一、常用函数
- cv2.imread(filepath,flags) 读取一张图片,默认读取三通道(RGB)彩图,flags若取值0则读取灰度图
- cv2.VideoCapture(filepath) 读取一段视频 (视频相当于很多帧的图片,亦可定义为函数,方便之后调用——video_process将视频转为灰度视频)
def video_process(video):
vc = cv2.VideoCapture(video)
if vc.isOpened():
open,frame = vc.read()
else:
open = False
while open:
ret,frame = vc.read()
if frame is None:
break
if ret == True:
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
cv2.imshow('result',gray)
if cv2.waitKey(10) & 0xFF == 27:
break
vc.release()
cv2.destroyAllWindows()
- cv2.imshow(name,img) 显示图片,结合cv2.waitkey(0)使用,否则只显示一瞬间 (为了简便可将其定义为函数方法后续随时调用)
def cv_show(name,img):
cv2.imshow(name,img)
cv2.waitKey(0)
cv2.destroyAllWindows()
- cv2.waitkey(timeout) 显示图片的时间,单位ms,0则一直显示直到按任意键退出
- b,g,r = cv2.split(img) 提取颜色通道,在OpenCV中提取的格式顺序为BGR而非RGB
- cv2.merge(b,g,r) 重组颜色通道
- cv2.imwrite(filename,img) 将图像保存
- cv2.copyMakeBorder(img,top,bottom,left,right,borderType) 填充边界
- cv2.resize(img, (width,height)) 变换图像的大小 (
注意img.shape的出来的是(height,width)
) - cv2.resize(img, (0, 0), fx=0.25, fy=0.25,interpolation=cv2.INTER_NEAREST) 最近邻插值法缩放缩放到原来图像的四分之一 (用于快速裁剪较大图片)
def cv_scale(img):
img=cv2.imread(img)
print(img.shape)
# 将图片高和宽分别赋值给x,y
x, y = img.shape[0:2]
# 最近邻插值法缩放
# 缩放到原来的四分之一
img_scaled = cv2.resize(img, (0, 0), fx=0.25, fy=0.25, interpolation=cv2.INTER_NEAREST)
return img_scaled
- cv2.addWeighted(img1,α,img2,β,b)
为图片添加权重, 混合图像 αX1+βX2+b
- cv2.blur(img,ksize) 均值滤波(
矩形中间的值=矩形内的值相加取平均值
) - cv2.boxFilter(img, ddepth,ksize, normalize=True) 方框滤波 (
normalize=True等同于均值滤波, normalize=false代表直接求和不取均值,越界后显示为255
) - cv2.GaussianBlur(img,ksize,sigmaX) 高斯滤波 (
离得近的权重高,离得远的权重低
) - cv2.medianBlur(img,ksize) 中值滤波(
矩形内的值排序后取中值
) - cv2.erode(img, kernel, iterations) 腐蚀操作
- cv2.dilate(img1, kernel, iterations) 膨胀操作
- cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel) 开运算(
先腐蚀再膨胀
) - cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel) 闭运算(
先膨胀再腐蚀
) - cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel) 梯度运算(
膨胀-腐蚀
) - cv2.morphologyEx(img,cv2.MORPH_TOPHAT,kernel) 顶帽运算(
原始值-开运算
) - cv2.morphologyEx(img,cv2.MORPH_BLACKHAT,kernel) 底帽运算(
闭运算-原始值
) - cv2.Sobel(img, ddepth, dx, dy,ksize) Sobel算子
- cv2.Scharr(img, ddepth, dx, dy) Scharr算子(
能捕捉到更多的细节
) - cv2.Laplacian(img, ddepth) Laplacian算子(
噪点影响很大
) - cv2.Canny(img, threshold1, threshold2) 边缘检测(
threshold<value<threshold2,范围越大,边缘检测细节越多
) - cv2.pyrUp(img) 高斯金字塔:向上采样(
放大图像
) - cv2.pyrDown(img) 高斯金字塔:向下采样(
缩小图像
) - img-cv2.pyrUp(cv2.pyrDown(img)) 拉普拉斯金字塔(
原图-(先缩小后放大)
) - cv2.findContours(img, mode, method) 找出轮廓
- drawContours(img, contours, contourIdx, color) 画出轮廓
- cv2.contourArea(contour) 轮廓面积
- cv2.arcLength(cnt, True) 轮廓周长 True表示闭合的
- cv2.approxPolyDP(cnt, epsilon, True) 轮廓近似(
普朗克算法
) - cv2.matchTemplate(img, templ, method) 模板匹配
- cv2.rectangle(img, pt1, pt2, color) 画矩形
- cv2.calcHist(img, channels, mask, histSize, ranges) 像素直方图统计
- cv2.equalizeHist(img) 直方图均衡化
二、常用操作示例
- 单纯保留某一颜色通道
img = img.copy()
img[: