图像基本处理
cv2.imshow(name,img)
name:窗口名称 ;img :窗口内容
cv2.waitkey(timeout)
显示图片时间timeout,单位为ms,0代表一直显示
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:内容
阈值与平滑处理
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)
腐蚀操作
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
图像金字塔与轮廓检测
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()
执行傅里叶变换
cv2.idft()
傅里叶逆变换
cv2.getStructuringElement(shape, size)
shape:表示核的形状。可以选择三种
(1)矩形:MORPH_RECT
(2)交叉形:MORPH_CROSS;
(3)椭圆形:MORPH_ELLIPSE;
size:表示核的尺寸。
(1)边缘检测
(2)获取轮廓
(3)变换
(4)OCR