(3)开运算
先腐蚀再膨胀。用于去除噪声。
opening = cv.morphologyEx(noi_src, cv.MORPH_OPEN, kernel)
(4)闭运算
先膨胀再腐蚀。被用于填充前景物体中的小洞,或前景物体上的小黑点。
closing = cv.morphologyEx(noi_src, cv.MORPH_CLOSE, kernel)
(5)形态学梯度
图像膨胀与腐蚀的差别。前景物体的轮廓。
gradient = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel)
(6)礼帽
原始图像与进行开运算之后得到的图像的差。
tophat = cv2.morphologyEx(img,cv2.MORPH_TOPHAT,kernel)
(7)黑帽
进行闭运算之后得到的图像与原始图像的差。
blackhat = cv2.morphologyEx(img,cv2.MORPH_BLACKHAT,kernel)
梯度简单来说就是求导。OpenCV提供了三种不同的梯度滤波器,或者高通滤波器:sobel,scharr和laplacian。
1.sobel
//sobelx = cv2.Sobel(test1,cv2.CV_64F,0,1,ksize = 3)
test是传入的要进行处理的图像,cv2.CV_64F是一种保存数值的类型,能够保存负数,0表示先不计算水平方向的梯度,1表示计算竖直方向的梯度,当然,我们也可以将参数改为1,1以同时计算竖直方向和水平方向的梯度,但是分开计算再融合图片所得到的效果要更好一些,这里的ksize表示卷积核的范围大小。
1.
sobelx = cv2.Sobel(pie,cv2.CV_64F,1,0,ksize = 3)#只计算横轴
sobely = cv2.Sobel(pie,cv2.CV_64F,0,1,ksize = 3)#只计算竖轴
sobelxy = cv2.addWeighted(sobelx,0.5,sobely,0.5,0)#融合两张图像
sobelxy = cv2.Sobel(pie,cv2.CV_64F,1,1,ksize = 3)#同时计算横轴和竖轴
2.
sobelxy = cv2.convertScaleAbs(sobelxy)#转化为绝对值
cv2_imshow("sobelxy",sobelxy)#展示图像
2.scharr算子
scharr算子跟sobel算子 原理相同,用法也相同,只是scharr算子对梯度更为敏感,原因是在卷积核中,它将乘数扩大到了10和3,相当于将梯度扩大了10被和3倍,这样所得到的梯度图像将会更加的细致。
import cv2
import numpy as np
import matplotlib.pyplot as plt
test1_gray = cv2.imread("test1.png",cv2.IMREAD_GRAYSCALE)#读入灰度图像
scharrx = cv2.Scharr(test1_gray,cv2.CV_64F,0,1)#scharr算子梯度处理灰度图像,只处理水平方向
scharry = cv2.Scharr(test1_gray,cv2.CV_64F,1,0)#scharr算子梯度处理灰度图像,只处理竖直方向
scharrx= cv2.convertScaleAbs(scharrx)#将像素值转化为绝对值
scharry = cv2.convertScaleAbs(scharry)#将像素值转化为绝对值
scharrxy = cv2.addWeighted(scharrx,0.5,scharry,0.5,0)#融合图像
3.laplacian算子
laplacian算子是一个二阶算子,它可以直接计算出图像的边界,但缺点是对噪音点敏感,一般不会单独使用,需要配合其他函数处理图像。
import cv2
import numpy as np
import matplotlib.pyplot as plt
def cv2_imshow(name,img):#定义展示图像的函数
cv2.imshow(name,img)
cv2.waitKey(0)
cv2.destroyAllWindows()
test1_gray = cv2.imread("test1.png",cv2.IMREAD_GRAYSCALE)#读入灰度图像
#laplacian算子处理梯度图像,对梯度变化速率更敏感,类似于二阶导
laplacian = cv2.Laplacian(test1_gray,cv2.CV_64F)#laplacian算子梯度处理灰度图像
laplacian = cv2.convertScaleAbs(laplacian)#将像素值转化为绝对值
cv2_imshow("laplacian",laplacian)#显示处理后的图像
img2 = cv.Canny(img,s1,s2)
//img为输入的灰度图像,s1,s2为低阈值,高阈值.
1.common
1.
cv2.findContours(image, mode, method)
image:寻找轮廓的二值图像
mode:轮廓的检索模式
method:轮廓的近似办法
其中method与mode众多,,不一一列举
2.
cv2.drawContours(image, contours, contourIdx, color)
image:需要绘制轮廓的目标图像,会改变原图
contours:轮廓点,上述函数cv2.findContours()的第一个返回值
contourIdx:轮廓的索引,表示绘制第几个轮廓,-1表示绘制所有的轮廓
color:绘制轮廓的颜色
2.矩形
x,y,w,h = cv2.boundingRect(img)
img:一个二值图像
x,y:矩形左上角坐标
w,h:矩形宽高
有两类图像金字塔:高斯金字塔和拉普拉斯金字塔。
使用函数cv2.pyrDown()和cv2.pyrUp()构建图像金字塔。
cv2.pyrDown()从一个高分辨率大尺寸的图像向上构建一个金字塔(尺寸变小,分辨率降低)。
cv2.pyrUp() 从一个低分辨率小尺寸的图像向下构建一个金子塔(尺寸变大,但分辨率不会增加)。
。