opencv图像腐蚀和膨胀操作,opencv 膨胀

  opencv图像腐蚀和膨胀操作,opencv 膨胀

  原文链接:3358 www . juzi code.com/opencv-python-erode-dilate

  返回Opencv-Python教程

  形态学变换是基于图像形状的变换过程,通常用于处理二值图像,当然也用于灰度。OpenCV中的形态变换也是基于像平滑一样的“滑动窗口”,但形态变换中的“滑动窗口”有一个更专业的术语“结构”。用于平滑的结构形状有四边形、十字形、椭圆形等。它们的形状决定了形态转换的特征。形态变换主要包括腐蚀、膨胀、开运算、闭运算等。

  1.蚀刻侵蚀)蚀刻操作可以“蚀刻”边界的白色(前景)像素,但仍然保留大部分白色。滑动窗口(如平滑)通过某种纹理在图像上滑动。如果纹理覆盖了原始图像中的所有像素,并且为“1”,则新图像中该像素的值为“1”。(cv8u是255)。腐蚀可以用来消除噪音和“粘滞”。

  界面格式:

  2.ERODE (src,kernel[,dst[,anchor[,iterations[,borderType[,border value]])-dst 3358 www . Sina .可由kernel:getstructuringelement()构建;Dst)输出图像、通道号、数据类型与src相同;锚点:锚点。默认情况下,中心点由-1和-1表示。迭代次数:腐蚀次数;BorderType:边框类型;BorderValue:边界值;以下是5号和7号管道的腐蚀示例。

  Importmatplotlib。pyplotpltimportcv2print (VX微信官方账号:orange code/juzi code . com))print)cv2。_ _ version _ 3:samples \ \ picture \ mnist-7 . jpg ,cv2 . im read 0)kernel=cv2 . getstructuringelement(cv2 . morph _ rect,(5)迭代次数=1(kernel=cv2 . getstructuringelement(cv2 . morph _ rect,(7,7)) #ksize=7x7,img _ ret 2=cv2 iterations=2)# k size=7x 7,蚀刻两次#显示图像fig,Ax=PLT.subplots 0)。set_title(原创-MNIST)juzi code . com))axcv 2 . color _ bgr 2 RGB 1)。imshow (cv2.cvtcolor (img _ ret1,cv2。COLOR_BGR2RGB)) ax) 1,0)。set_title 1)。imshow ) cv2.cvtcolor ) img_ret3,cv2.color _ bgr2RGB ax [ 0,1 ]。轴(关);ax [ 1,0 ]。轴(关);Ax [1,1]。axis (off))关闭坐标轴并显示plt.show)的执行结果:

  原图片来源:mnist

  从执行结果可以看出,kernel的ksize越大,迭代次数越多,镜像看起来就像一个“稳定”的。

  2.exploit Expansion))膨胀是腐蚀的逆操作,可以使边框白色(前景)像素“长大”并膨胀。当窗口通过白色像素时,如果结构元素中的一个像素为“1”,则该像素在新图像中的值为“1”。(cv8u是255)。膨胀可以用来加强连接和填充凹陷。

  界面格式:

  2.Dilate (src,kernel[,dst[,anchor[,iterations[,borderType[,border value]])-dst 3358 www . Sina image kernel:哈哈

  GetStructuringElement()构造;Dst:输出图像,通道数和数据类型与src相同;Anchor:锚点,默认为(-1,-1)表示中心点;迭代次数:腐蚀次数;BorderType:边框类型;BorderValue:边界值;以下是内核大小为5和7的扩展示例:

  将matplotlib.pyplot作为血小板计数导入cv2print(VX公众号:桔子代码/juzicode.com’)打印( cv2 .__version__:,cv2 .__version__)plt.rc(font ,family=Youyuan ,size=9)img=cv2.imread(.\ \ samples \ \ picture \ \ m NIST-7-b . jpg ,cv2 .IMREAD _ gray)_,img=cv2.threshold(img,127,255,0)kernel=cv2。getstructuringelement(cv2 .MORPH_RECT,(5,5))img_ret1=cv2.dilate(img,kernel,iterations=1)kernel=cv2。getstructuringelement(cv2 .MORPH_RECT,(7,7))img _ ret 2=cv2 . dilat(img内核,迭代次数=1)img_ret3=cv2.dilate(img,内核,迭代次数=2) #显示图像fig,ax=plt.subplots(2,2)ax[0,0].set_title(原图-mnist(juzicode.com))ax[0,0].imshow(cv2.cvtColor(img,cv2 .COLOR_BGR2RGB)) #matplotlib显示图像为rgb格式ax[0,1].set _ title( dilat ksize=5 )ax[0,1].imshow(cv2.cvtColor(img_ret1,cv2 .COLOR_BGR2RGB))ax[1,0].set_title(dilate ksize=7)ax[1,0].imshow(cv2.cvtColor(img_ret2,cv2 .COLOR_BGR2RGB))ax[1,1].set _ title( dilat ksize=7 ITER=2 )ax[1,1].imshow(cv2.cvtColor(img_ret3,cv2 .COLOR_BGR2RGB))ax[0,0].轴("关");ax[0,1].轴("关");ax[1,0].轴("关");ax[1,1].轴(关)#关闭坐标轴显示plt.show()运行结果:

  原图图源:mnist

  从运行结果可以看到核心的ksize越大,迭代次数越多,图像看起来越"胖"。

  3、结构元生成getStructuringElement()结构元生成函数用来生成形态学变换的核心参数。

  接口形式:

  cv2。getstructuringelement(shape,ksize[,anchor]) -retval参数含义:shape:结构元(内核)的形状;ksize:结构元(内核)的大小;锚:锚点,默认使用(-1,-1)表示中心点;其中形状属性有可选的3种形状:

  cv2 .矩形墨菲方形,所有的数值均为1cv2 .变形_交叉十字交叉形,在锚点坐标的水平和竖直方向的元素为1,其他为0cv2 .变形_椭圆椭圆形下面是一个核心大小为7,形状不同的膨胀例子:

  将matplotlib.pyplot作为血小板计数导入cv2print(VX公众号:桔子代码/juzicode.com’)打印( cv2 .__version__:,cv2 .__version__)plt.rc(font ,family=Youyuan ,size=9)img=cv2.imread(.\ \ samples \ \ picture \ \ m NIST-7-b . jpg ,cv2 .IMREAD _ gray)_,img=cv2.threshold(img,127,255,0)kernel=cv2。getstructuringelement(cv2 .墨菲_RECT,(7,7))打印(墨菲_RECT内核:\n ,内核)img_ret1=cv2.dilate(img,内核,迭代次数=1)内核=cv2.getStructuringElement(cv2 .MORPH_ELLIPSE,(7,7))print( MORPH _ ELLIPSE kernel:\ n ,kernel)img_ret2=cv2.dilate(img,kernel,iterations=1)kernel=cv2。getstructuringelement(cv2 .MORPH_CROSS,(7,7))print(MORPH_CROSS kernel:\n ,kernel)img_ret3=cv2.dilate(img,kernel,iterations=1) #显示图像fig,ax=plt.subplots(2,2)ax[0,0].set_title(原图-mnist(juzicode.com))ax[0,0].imshow(cv2.cvtColor(img,cv2 .COLOR_BGR2RGB)) #matplotlib显示图像为rgb格式ax[0,1].设置标题(变形_RECT内核)ax[0,1].imshow(cv2.cvtColor(img_ret1,cv2 .COLOR_BGR2RGB))ax[1,0].set _ title( MORPH _ ELLIPSE kernel )ax[1,0].imshow(cv2.cvtColor(img_ret2,cv2 .COLOR_BGR2RGB))ax[1,1].set _ title( MORPH _ CROSS kernel )ax[1,1].imshow(cv2.cvtColor(img_ret3,cv2 .COLOR_BGR2RGB))ax[0,0].轴("关");ax[0,1].轴("关");ax[1,0].轴("关");ax[1,1].轴(关)#关闭坐标轴显示plt.show()运行结果:

  甲硫膦酸丙胺乙酯公众号:桔子码/鞠子码。com cv2。_ _ version _ _:4。5 .3 MORPH _ RECT内核:[[1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1内核:[[0 0 0 1 0 0 0 0][0 1 1 1 1 1 0][1 1 1 1 1 1 1 1 1 1] [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 1 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

  原图图源:mnist

  从运行结果可以看到当使用方形矩形墨菲的结构元时,新图像的边界看起来仍然是方方正正的,但是使用十字形变形_交叉和椭圆形变形_椭圆的结构元时,边界要显得"圆滑"的多。

  4、实际应用的例子下面是一个用腐蚀去除噪声的例子:

  将matplotlib.pyplot作为血小板计数导入cv2print(VX公众号:桔子代码/juzicode.com’)打印( cv2 .__version__:,cv2 .__version__)plt.rc(font ,family=Youyuan ,size=9)img=cv2.imread(.\ \样本\ \图片\ \ m NIST-7-噪音。jpg ,cv2 .IMREAD _ gray)_,img=cv2.threshold(img,127,255,0)kernel=cv2。getstructuringelement(cv2 .MORPH_RECT,(7,7))img_ret1=cv2.erode(img,kernel,iterations=2) #显示图像fig,ax=plt.subplots(1,2)ax[0].set_title(原图(juzicode.com))ax[0].imshow(cv2.cvtColor(img,cv2 .COLOR_BGR2RGB)) #matplotlib显示图像为rgb格式斧[1].set _ title( erode ksize=7 ITER=2 )ax[1].imshow(cv2.cvtColor(img_ret1,cv2 .COLOR_BGR2RGB))ax[0].轴("关");斧[1].轴( off)plt.show()

  原图图源:mnist

  在原图中白色小点表示的噪声通过腐蚀操作被去除掉了。

  下面是一个在五线谱中去除横线的例子:

  将matplotlib.pyplot作为血小板计数导入cv2print(VX公众号:桔子代码/juzicode.com’)打印( cv2 .__version__:,cv2 .__version__)plt.rc(font ,family=Youyuan ,size=9)img=cv2.imread(.\\samples\\data\\notes.png ,cv2 .IMREAD _ gray)_,img_故意的秋天=cv2.threshold(img,127,255,1)#二值反色内核=cv2。getstructuringelement(cv2 .MORPH_RECT,(1,7))img_erode=cv2.erode(img_故意的秋天,内核,迭代次数=1)img _ dilate=cv2。扩张(img _ erode,内核,迭代次数=1) #显示图像fig,ax=plt.subplots(3,1)ax[0].set_title(原图(juzicode.com))ax[0].imshow(cv2.cvtColor(img,cv2 .COLOR_BGR2RGB)) #matplotlib显示图像为rgb格式斧[1].set_title(img_erode) ax[1].imshow(cv2.cvtColor(img_erode,cv2 .COLOR_BGR2RGB))ax[2].set_title(img_dilate) ax[2].imshow(cv2.cvtColor(img_dilate,cv2 .COLOR_BGR2RGB))ax[0].轴("关");斧[1].轴("关");斧头.轴( off)plt.show()

  因为横线是水平方向的,高度小长度大,先用一个17的结构元进行腐蚀,这时腐蚀会作用到垂直方向上,水平方向几乎不会被影响到,从而将高度较小的横线腐蚀掉,但是因为腐蚀操作将需要保留的符号也腐蚀掉了一部分,所以再用同样的结构元进行一次膨胀操作,就能复原出符号的形状。

  扩展阅读:OpenCV-Python教程

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • opencv图像识别数字,opencv 识别
  • opencv图像识别数字,opencv 识别,如何基于opencv实现简单的数字识别
  • opencv图像的旋转角度计算,opencv图像仿射变换
  • opencv图像的旋转角度计算,opencv图像仿射变换,OpenCV图像几何变换之透视变换
  • opencv图像的旋转角度计算,opencv 旋转任意角度
  • opencv图像的旋转角度计算,opencv 旋转任意角度,opencv图片的任意角度旋转实现示例
  • opencv图像处理函数,opencv图像轮廓合并
  • opencv图像处理函数,opencv图像轮廓合并,OpenCV图像处理之七种常用图像几何变换
  • opencv双线性插值函数,opencv 图像插值
  • LBPH人脸识别,基于opencv的人脸识别技术
  • LBPH人脸识别,基于opencv的人脸识别技术,Opencv LBPH人脸识别算法详解
  • ,,OpenCV黑帽运算(BLACKHAT)的使用
  • opencv双线性插值函数,opencv 图像插值,C++ OpenCV实现图像双三次插值算法详解
  • ,,C语言 OpenCV实现柱面投影
  • ,,C++ Opencv imfill孔洞填充函数的实现思路与代码
  • 留言与评论(共有 条评论)
       
    验证码: