Python+OpenCV图像处理之腐蚀与膨胀
Posted qianxia
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python+OpenCV图像处理之腐蚀与膨胀相关的知识,希望对你有一定的参考价值。
形态学操作其实就是改变物体的形状,一般作用于二值化图,来连接相邻的元素或分离成独立的元素。
腐蚀的原理是在原图的小区域内取局部最小值。因为是二值化图,只有0和255,所以小区域内有一个是0该像素点就为0
膨胀的原理是在原图的小区域内取局部最大值
腐蚀与膨胀的python实现
import cv2 """ 腐蚀算法:变瘦 用kernel,扫描图像的每一个像素;用kernel与其覆盖的二值图像做 “与” 操作;如果都为1,结果图像的该像素为1;否则为0. 结果:使二值图像减小一圈 """ def erode_demo(image): print(image.shape) gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) ret, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU) cv2.imshow("binary", binary) kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5)) dst = cv2.erode(binary, kernel) cv2.imshow("erode", dst) """ 膨胀算法:变胖 用kernel,扫描图像的每一个像素;用kernel与其覆盖的二值图像做 “与” 操作;如果都为0,结果图像的该像素为0;否则为1. 结果:使二值图像扩大一圈 """ def dilate_demo(image): print(image.shape) gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) ret, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_OTSU | cv2.THRESH_BINARY) cv2.imshow("binary", binary) kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5)) dst = cv2.dilate(binary, kernel) cv2.imshow("dilate", dst) if __name__ == "__main__": img = cv2.imread("img.jpg") cv2.namedWindow("input image", cv2.WINDOW_AUTOSIZE) cv2.imshow("input image", img) erode_demo(img) dilate_demo(img) cv2.waitKey(0) cv2.destroyAllWindows() # img = cv2.imread("image/123.jpg") # cv2.namedWindow("input image",cv2.WINDOW_AUTOSIZE) # cv2.imshow("input image",img) # kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5)) # dst = cv2.erode(img, kernel) # 腐蚀 # dst1 = cv2.dilate(img, kernel) # 膨胀 # cv2.imshow("erode result", dst) # cv2.imshow("dilate result", dst1) # cv2.waitKey(0) # cv2.destroyAllWindows()
运行结果如下
可以不进行灰度处理,直接对彩色图像进行腐蚀和膨胀处理,结果如下
腐蚀函数cv2.erode(src, kernel, dst=None, anchor=None, iterations=None, borderType=None, borderValue=None)
膨胀函数cv2.dilate(src, kernel, dst=None, anchor=None, iterations=None, borderType=None, borderValue=None)
获取不同形状的结构元素cv2.getStructuringElement(shape, ksize, anchor=None),返回指定形状和尺寸的结构元素
参数shape:表示内核的形状,矩形:MORPH_RECT 十字形:MORPH_CORSS 椭圆形:MORPH_ELLIPSE;
参数ksize:是内核的尺寸(n,n)
参数anchor:锚点的位置
以上是关于Python+OpenCV图像处理之腐蚀与膨胀的主要内容,如果未能解决你的问题,请参考以下文章