python opencv 图像处理(九)(python是什么意思)

网友投稿 330 2022-08-27


python opencv 图像处理(九)(python是什么意思)

图像腐蚀与图像膨胀

图像的腐蚀( Erosion )和膨胀( Dilation )是两种基本的形态学运算,主要用来寻找图像中的极大区域和极小区域。

又出来新名词了:形态学。简单来讲,图像形态学就是改变图像的形状,举例对于文字数字图像,将文字数字的线条变细或变粗。

消除噪声分割( isolate )出独立的图像元素,在图像中连接( join )相邻的元素。寻找图像中的明显的极大值区域或极小值区域求出图像的梯度

在接着往下看之前,有一点需要注意的是,图像的腐蚀与膨胀,主要针对的是二值图像(黑白图)的,其中进行变化的部分是图像的白色部分(高亮)部分,不是黑色部分。

图像膨胀就是图像中的高亮部分进行膨胀,「领域扩张」,效果图拥有比原图更大的高亮区域。

图像腐蚀就是原图中的高亮部分被腐蚀,「领域被蚕食」,效果图拥有比原图更小的高亮区域。

图像腐蚀

图像腐蚀其中有两个比较关键的输入对象,一个是二值图像,另一个是卷积核。

腐蚀:是一种消除边界点,使边界向内部收缩的过程

通俗讲法:在原图的每一个小区域里取最小值,由于是二值化图像,只要有一个点为0,则这个小区域的所有像素点都为0,来达到瘦身的目的算法:用 3x3 的kernel,扫描图像的每一个像素;用 kernel 与其覆盖的二值图像做 “与” 操作;若都为1,则图像的该像素为1;否则为0.最终结果:使二值图像减小一圈。(也就是做卷积乘法,取图像尺寸与卷积核一样大小区域与卷积核一一像素值相乘,与卷积不同的是,卷积计算像素一一相乘后要累计求和,这里是需要判断是否存在相乘值为0的)

OpenCV 为图像腐蚀提供的函数是:erode() ,它的原函数如下:

def erode(src, kernel, dst=None, anchor=None, iterations=None, borderType=None, borderValue=None)

src:原图像。kernel:卷积核,可以采用函数 np.ones((5,5), np.uint8) 构建。iterations:迭代次数,默认是迭代一次,表示进行一次腐蚀,如有需要,可进行多次迭代腐蚀。

这里通常设置卷积核所有值为1,只要是原始二值图像中像素值不为0,保留原始像素并做腐蚀处理。

import cv2 as cvimport numpy as npdef erode(): # 图像读取 src = cv.imread('data.jpg') # BGR 图像转灰度 gray_img = cv.cvtColor(src, cv.COLOR_BGR2GRAY) # 二值图像处理 r, b = cv.threshold(gray_img, 127, 255, cv.THRESH_TOZERO_INV) # 设置卷积核 kernel = np.ones((3, 3),np.uint8) # 进行图像腐蚀,默认迭代 1 次 dst1 = cv.erode(b, kernel) # 图像显示 cv.imshow("source", src) cv.imshow("b",b) cv.imshow("dst1", dst1) # 等待操作 cv.waitKey(0) cv.destroyAllWindows()

图像膨胀

图像膨胀正好和图像腐蚀相反,卷积核的中心点逐个扫描原始图像中的每一个像素点,被扫描到的原始图像中的像素点,只要有一个值为 1 时则为 1 ,否则为 0 。

OpenCV 为图像腐蚀提供的函数是:dilate() ,它的原函数如下:

def dilate(src, kernel, dst=None, anchor=None, iterations=None, borderType=None, borderValue=None)

src:原图像。kernel:卷积核,可以采用函数 np.ones((5,5), np.uint8) 构建。iterations:迭代次数,默认是迭代一次,表示进行一次膨胀,如有需要,可进行多次迭代腐蚀。

示例代码如下:

import cv2 as cvimport numpy as npdef dilate(): # 图像读取 src = cv.imread('data.jpg') # BGR 图像转灰度 gray_img = cv.cvtColor(src, cv.COLOR_BGR2GRAY) # 二值图像处理 r, b = cv.threshold(gray_img, 127, 255, cv.THRESH_TOZERO_INV) # 设置卷积核 kernel1 = np.ones((8, 8),np.uint8) # 进行图像腐蚀,默认迭代 1 次 dst1 = cv.dilate(b, kernel1) # 图像显示 cv.imshow("source", src) cv.imshow("b", b) cv.imshow("dst1", dst1) # 等待操作 cv.waitKey(0) cv.destroyAllWindows()


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:什么是接口文档,如何写接口,有什么规范?
下一篇:不懂技术如何看懂API接口文档?怎样才能看懂常用快递API接口文档?
相关文章

 发表评论

暂时没有评论,来抢沙发吧~