1.形态学操作
图像腐蚀:主要针对二值图像
1.定义
2.函数调用:
dst = cv2.erode(src,kernel,iterations) (iterations表示迭代次数,kernel代表卷积核)
kernel的创建:kernel=np.ones((5,5),np.uint8)
图像膨胀(图像腐蚀的逆操作):
1.大体印象
2.函数调用:
dst = cv2.dilate(src,kernel,iterations)
开运算:
1.定义:即先对图像进行腐蚀再进行膨胀
2.函数调用:
opening = cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel) 第二个参数代表开运算
闭运算:
1.定义:即先膨胀再腐蚀
2.函数调用:
closing = cv2.morphologyEx(img,cv2.MORPH_CLOSE,kernel) 第二个参数代表闭运算
梯度运算:
1.定义:梯度=膨胀-腐蚀
函数调用:
result = cv2.morphologyEx(img,cv2.MORPH_GRADIENT,kernel) 第二个参数代表梯度运算
图像礼帽:
1.定义:礼帽=原图像-开运算
2.函数调用:
result = cv2.morphologyEx(img,cv2.MORPH_TOPHAT,kernel) 第二个参数代表礼帽运算
黑帽操作:
1.定义:黑帽=闭运算-原图像
result = cv2.morphologyEx(img,cv2.MORPH_BLACKHAT,kernel) 第二个参数代表黑帽运算
2.图像梯度
sobel理论基础:用来计算图像的边界
sobel的计算sobel算子函数使用:
1.dst = cv2.Sobel(src,ddepth,dx,dy,[ksize])
其中对ddepth参数的赋值处理如下:
2.对sobel的计算
计算sobel的两种方式3.尽量不要用紫色代码部分的方法,得到的边界不清晰
两种方法scharr算子函数使用:
1.dst = Scharr(src,ddepth,dx,dy)
可以用Sobel函数表示Scharr算子2.函数调用
两种算子比较
精确度权重不同Laplacian算子函数使用:
计算原理
1.函数调用
dst = cv2.Laplacian(src,ddepth)
函数应用3.canny边缘检测
1.一般步骤:
去噪(高斯滤波)——梯度(sobel)——非极大值抑制——滞后阈值
2.函数使用:
edges = cv2.Canny(image,threshold1,threshold2) 两个参数代表minVal和MaxVal两个参数越小,得到的边缘越细腻
4.图像金字塔
图像金字塔结构向下取样(缩小图像):从第i层到第i+1层
1.对图像Gi进行高斯核卷积 2.删除所有偶数的行和列
向上取样(放大图像):从第i+1层到第i层
两个取样不是互逆操作
向下取样函数及其使用
dst = cv2.pyrDown(src); 得到原来大小的四分之一
向上取样函数及其使用
dst = cv2.pyrUp(src)
拉普拉斯金字塔
图像轮廓
边缘检测能够检测出边缘,但是边缘是不连续的,把边缘连起来,成为轮廓。
注意:OpenCV中将黑色默认为背景色
函数调用:cv2.findContours()查找轮廓 cv2.drawContours()将找到的轮廓画到图像上
image,contours,hierarchy = cv2.findContours(image,mode,method)
image:修改后的二值图像 contours:代表轮廓
mode属性取值:
method属性取值:
r = cv2.drawContours(o,contours,contourIdx,color[,thickness])
各属性含义:
轮廓绘制实例:
网友评论