函数
一、图像处理函数
图像基本处理
-
cv2.imshow(name,img)
name:窗口名称 ;img :窗口内容
-
cv2.waitkey(timeout)
显示图片时间timeout,单位为ms,0代表一直显示 if cv2.waitKey(100) & 0xFF == 27: # 27是esc键 break
-
cv2.destoryAllWindows()
关闭窗口
-
cv2.imread(filepath,flags)
读取图片,默认是三通道(BGR)的彩色图,flags=0读入灰度图
-
cv2.imwrite(filename,img)
保存图像,filename:文件名;img:内容
-
b,g,r=cv2.split(img)
颜色通道提取,opencv提取格式为BGR(注意不是RBG)\
-
cv2.merge(b,g,r)
重新组合颜色通道
-
cv2.copyMakeBorder(img,top, bottom, left, right,borderType)
填充边界;img:内容;top, bottom, left, right:四区域的大小;borderType:填充种类
-
cv2.add(img1, img2)
img1和img2的rgb值相加,超过255取255
-
cv2.addWeighted(img1,α,img2,β,b)
为图片添加权重, 混合图像,img1=X1;img2=X2;αX1+βX2+b
-
cv2.resize(img, (width, height))
变换图像大小(注意img.shape的出来的是(height,width))
-
cv2.resize(img, (0, 0), fx=a, fy=b)
变换图像大小((height,width)为(0,0),a为x变为原来a倍,b为y变为原来b倍)
-
cv_show(‘name’, contents)
name:窗口名称;contents:内容
-
cv2.VideoCapture(‘test.mp4’)
cv2.VideoCapture可以捕获摄像头,用数字来控制不同的设备,例如0,1。如果是视频文件,直接指定好路径即可。
-
vc.isOpened()
oepn, frame = vc.read() #open是个bool值,true和false;frame是图像数组,如:img。 vc.read()是一帧一帧的取,直到结束
-
cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 转为灰度
-
vc.isOpened()
oepn, frame = vc.read() #open是个bool值,true和false;frame是图像数组,如:img。 vc.read()是一帧一帧的取,直到结束
-
cv2.split(img)
b,g,r=cv2.split(img) 切片b,g,r
-
cv2.merge((b,g,r))
img=cv2.merge((b,g,r)) # 组合 b ,g ,r img.shape
-
cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, borderType=cv2.BORDER_REPLICATE)
top_size,bottom_size,left_size,right_size = (50,50,50,50) BORDER_REPLICATE:复制法,也就是复制最边缘像素。 BORDER_REFLECT:反射法,对感兴趣的图像中的像素在两边进行复制例如:fedcba|abcdefgh|hgfedcb BORDER_REFLECT_101:反射法,也就是以最边缘像素为轴,对称,gfedcb|abcdefgh|gfedcba BORDER_WRAP:外包装法cdefgh|abcdefgh|abcdefg BORDER_CONSTANT:常量法,常数值填充。
-
cv2.add(img_cat,img_cat2)[:5,:,0]
array([[255, 255, 255, ..., 255, 255, 255], [226, 234, 246, ..., 255, 255, 255], [226, 230, 246, ..., 255, 255, 255], [255, 255, 255, ..., 255, 255, 255], [255, 255, 255, ..., 255, 255, 255]], dtype=uint8)
-
cv2.resize(img_dog, (500, 414))
img_dog = cv2.resize(img_dog, (500, 414)) # w, h img_dog.shape (414, 500, 3) res = cv2.resize(img, (0, 0), fx=4, fy=4) # 指定倍数 plt.imshow(res)
-
cv2.calcHist(images,channels,mask,histSize,ranges)
显示直方图: images: 原图像图像格式为 uint8 或 float32。当传入函数时应 用中括号 [] 括来例如[img] channels: 同样用中括号括来它会告函数我们统幅图 像的直方图。如果入图像是灰度图它的值就是 [0]如果是彩色图像 的传入的参数可以是 [0][1][2] 它们分别对应着 BGR。 mask: 掩模图像。统整幅图像的直方图就把它为 None。但是如 果你想统图像某一分的直方图的你就制作一个掩模图像并 使用它。 histSize:BIN 的数目。也应用中括号括来 ranges: 像素值范围常为 [0-256] BINS :上面的直方图显示了每个像素值的像素数,即从0到255。即您需要256个值才能显示上述直方图。但是请考虑一下,如果您不需要单独查找所有像素值的像素数,而是在像素值间隔内查找像素数,该怎么办?例如,您需要找到介于 0 到 15 之间的像素数,然后是 16 到 31、...、240 到 255。您只需要 16 个值来表示直方图。 因此,只需将整个直方图拆分为 16 个子部分,每个子部分的值就是其中所有像素计数的总和。这每个子部分都称为"BIN"。在第一种情况下,条柱数为256(每个像素一个),而在第二种情况下,它只有16。BINS 在 OpenCV 文档中由术语histSize表示。 plt.hist(img.ravel(),256); # ravel()函数是把多维展开成一维
-
cv2.equalizeHist(img)
直方图均衡化
-
cv2.bitwise_and(img, img, mask=mask)
cv2.bitwise_and(img, img, mask=mask)#与操作
-
cv2.createCLAHE([, clipLimit[, tileGridSize]])
cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8,8)) clipLimit:颜色对比度的阈值,可选项,默认值 8 titleGridSize:局部直方图均衡化的模板(邻域)大小,可选项,默认值 (8,8)
-
cv2.matchTemplate(img, template, cv2.TM_SQDIFF)
TM_SQDIFF:计算平方不同,计算出来的值越小,越相关 TM_CCORR:计算相关性,计算出来的值越大,越相关 TM_CCOEFF:计算相关系数,计算出来的值越大,越相关 TM_SQDIFF_NORMED:计算归一化平方不同,计算出来的值越接近0,越相关 TM_CCORR_NORMED:计算归一化相关性,计算出来的值越接近1,越相关 TM_CCOEFF_NORMED:计算归一化相关系数,计算出来的值越接近1,越相关 methods = ['cv2.TM_CCOEFF', 'cv2.TM_CCOEFF_NORMED', 'cv2.TM_CCORR', 'cv2.TM_CCORR_NORMED', 'cv2.TM_SQDIFF', 'cv2.TM_SQDIFF_NORMED']
-
cv2.rectangle(img, pt1, pt2, color, thickness=None, lineType=None, shift=None )
img:指定一张图片,在这张图片的基础上进行绘制;(img相当于一个画板) pt1: 由(x_min,y_min)组成,为绘制的边框的左上角; pt2: 由(x_max, y_max)坐标,为绘制的边框的右下角,示意如下: color:指定边框的颜色,由(B,G,R)组成,当为(255,0,0)时为绿色,可以自由设定; thinkness:线条的粗细值,为正值时代表线条的粗细(以像素为单位),为负值时边框实心;
阈值与平滑处理
-
ret,det = cv2.threshold(src, thresh, maxval, type)
ret:阈值;det:输出图 src:原始图像;thresh:阈值,常见127(因为颜色为0-255); maxval:最大可能值(255);type:选择的功能或方法,即怎么判断阈值,二值化操作的类型
-
cv2.blur(img,ksize)
均值滤波( 矩形中间的值=矩形内的值相加取平均值) img:图像;ksize:矩阵大小
-
cv2.boxFilter(img, ddepth,ksize, normalize=True)
方框滤波: (normalize=True等同于均值滤波, normalize=false代表直接求和不取均值,越界后显示为255)** ddepth一般为-1表示得到的颜色通道和原图一致
-
cv2.GaussianBlur(img, ksize, sigmaX)
高斯滤波:(离得近的权重高,离得远的权重低) sigmaX为高斯函数在X轴上的标准差σ,调整σ实际是在调整周围像素对当前像素的影响程度, 调大σ即提高了远处像素对中心像素的影响程度,滤波结果也就越平滑
-
cv2.medianBlur(img,ksize)
中值滤波:(矩形内的值排序后取中间值) ksize为矩阵大小,即ksize×ksize
图像形态学处理
-
numpy.ones(shape, dtype=None, order=‘C’)
函数返回给定形状和数据类型的新数组,其中元素的值设置为1。
-
cv2.erode(img, kernel, iterations)
腐蚀操作,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算子 img:当前的图像;ddepth:图像的深度(一般为-1);dx和dy分别表示水平和竖直方向;ksize:Soble算子的大小
-
cv2.Scharr(img, ddepth, dx, dy)
Scharr算子(能捕捉到更多的细节)
-
cv2.Laplacian(img, ddepth)
Laplacian算子(噪点影响很大)
-
cv2.convertScaleAbs(sobelx)
变为绝对值
边缘检测
-
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)
找出轮廓 img:待测图像 mode:轮廓检索模式 method:轮廓逼近方法
-
cv2.drawContours(img, contours, contourIdx, color,width)
画出轮廓 contours:轮廓 contourIdx:轮廓数量,画第几个轮廓;默认-1,即所有轮廓 color:颜色(B,G,R) width:线条的宽度
-
cv2.contourArea(cnt)
计算轮廓面积
-
cv2.arcLength(cnt, True)
计算轮廓周长,True表示闭合
-
cv2.approxPolyDP(cnt, epsilon, True)
轮廓近似(普朗克算法) cnt:具体哪个轮廓 epsilon:给字节指定一个值来比较,一般按照周长的百分比设置 True:闭合
-
x, y, w, h = cv2.boundingRect(cnt)
(x, y)为坐标点,w, h为矩形长宽
-
cv2.rectangle(img, pt1, pt2, color,width)
画矩形 pt1:坐标点1 pt2:坐标点2 width:线宽
-
(x, y), radius = cv2.minEnclosingCircle(cnt)
外接圆近似
-
cv2.circle(img, center, radius,color, width)
画圆
-
res = cv2.matchTemplate(img, template, method)
模板匹配 method:匹配方法
-
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
min_val:算法算出的最小值 max_val:算法算出的最大值 min_loc:最小值所在的坐标(因为得到了h,w,所以可得到矩形) max_loc :最大值所在的坐标
直方图与傅里叶变换
-
cv2.calcHist(img, channels, mask, histSize, ranges)
像素直方图统计: img:原图像格式为uint8或floart32。当传入函数时应用中括号[]来,例如[img] channels:同样用中括号,他会告诉我们统幅图像的直方图。如果入图像是灰度图它的值就是[0],如果是彩色图像 的传入的参数可以是[0][1][2],他们分别对应着BGR。 mask:掩码图像。统整幅图像的直方图就把它为None。但是如果你想统图像某一分的直方图的,就制作一个掩码图 像并使用它。 histSize:BIN的数目。也应用中括号括来 ranges:像素值范围常为[0256]
-
cv2.bitwise_and(img, img, mask=mask)
与操作
-
cv2.equalizeHist(img)
直方图均衡化
-
cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8, 8))
自适应直方图均衡化 clipLimit:颜色对比度的阈值 titleGridSize:进行像素均衡化的网格大小,即在多少网格下进行直方图的均衡化操作
-
cv2.dft(img, flags)
执行傅里叶变换,flags:转换标识,通常为cv2.DFT_COMPLEX_OUTPUT,其他值如下
-
cv2.idft()
傅里叶逆变换
二、其他函数
-
cv2.getStructuringElement(shape, size)
shape:表示核的形状。可以选择三种 (1)矩形:MORPH_RECT (2)交叉形:MORPH_CROSS; (3)椭圆形:MORPH_ELLIPSE; size:表示核的尺寸。
三、OCR
(1)边缘检测
(2)获取轮廓
(3)变换
(4)OCR