Python下opencv使用笔记(六)(图像的形态学转换)
来源:互联网 发布:常熟淘宝兼职客服 编辑:程序博客网 时间:2024/06/06 11:49
形态学一般是使用二值图像,进行边界提取,骨架提取,孔洞填充,角点提取,图像重建等等。常用的形态学操作时腐蚀与膨胀,在他们的基础上演变出一些变体,包括开运算、闭运算、梯度等等。形态学一般是对二值图像进行的操作。
下面贴几个比较好的介绍图像形态学方面的博客
图像处理基本算法-形态学
图像的形态学处理
(一)腐蚀
关于腐蚀就是将图像的边界腐蚀掉,或者说使得图像整体上看起来变瘦了。它的操作原理就是卷积核沿着图像滑动,如果与卷积核对应的原图像的所有像素值都是1,那么中心元素保持原来的值,否则就变为0。这对于去除白噪声很有用,也可以用于断开两个连载一起的物体。一个例子如下:
import cv2import numpy as npimport matplotlib.pyplot as pltimg = cv2.imread('man.jpg',0) #直接读为灰度图像kernel = np.ones((5,5),np.uint8)erosion = cv2.erode(img,kernel,1)plt.subplot(1,2,1),plt.imshow(img,'gray')#默认彩色,另一种彩色bgrplt.subplot(1,2,2),plt.imshow(erosion,'gray')
(二)膨胀
膨胀原理与腐蚀相同,只不过膨胀的时候与卷积核对应的原图像的像素值只要有一个为1,那么中心元素就是1。这么做带来的变化就是图像膨胀了,或者说图像变胖了。
import cv2import numpy as npimport matplotlib.pyplot as pltimg = cv2.imread('man.jpg',0) #直接读为灰度图像kernel = np.ones((5,5),np.uint8)erosion = cv2.dilate(img,kernel,1)plt.subplot(1,2,1),plt.imshow(img,'gray')#默认彩色,另一种彩色bgrplt.subplot(1,2,2),plt.imshow(erosion,'gray')
(三)开运算
先进行腐蚀再进行膨胀的运算就是开运算,腐蚀可以让那些在图像外面的小点点去掉,然后把主图像膨胀回去,实现去除图像外噪声。这里为了测试,将图像改一改,内外都加点白点试试:
import cv2import numpy as npimport matplotlib.pyplot as pltimg = cv2.imread('man1.jpg',0) #直接读为灰度图像kernel = np.ones((5,5),np.uint8)erosion = cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel)plt.subplot(1,2,1),plt.imshow(img,'gray')#默认彩色,另一种彩色bgrplt.subplot(1,2,2),plt.imshow(erosion,'gray')
可以看到,外面的白点去点了,但是图像里面的白点似乎还在,多多少少影响着图形。
(四)闭运算
先进行膨胀再进行腐蚀的运算就是闭运算,膨胀可以让那些在图像里面的小点点去掉,然后把主图像腐蚀回去,实现去除图像内噪声。
import cv2import numpy as npimport matplotlib.pyplot as pltimg = cv2.imread('man1.jpg',0) #直接读为灰度图像kernel = np.ones((5,5),np.uint8)erosion = cv2.morphologyEx(img,cv2.MORPH_CLOSE,kernel)plt.subplot(1,2,1),plt.imshow(img,'gray')#默认彩色,另一种彩色bgrplt.subplot(1,2,2),plt.imshow(erosion,'gray')
(五)形态学梯度
膨胀与腐蚀的组合使用,使得结果看上去是提取了物体的轮廓一样。
import cv2import numpy as npimport matplotlib.pyplot as pltimg = cv2.imread('man.jpg',0) #直接读为灰度图像kernel = np.ones((5,5),np.uint8)closing= cv2.morphologyEx(img,cv2.MORPH_GRADIENT,kernel)plt.subplot(1,2,1),plt.imshow(img,'gray')#默认彩色,另一种彩色bgrplt.subplot(1,2,2),plt.imshow(closing,'gray')
(六)礼帽
原始图像与其进行开运算后的图像进行一个差。
import cv2import numpy as npimport matplotlib.pyplot as pltimg = cv2.imread('man.jpg',0) #直接读为灰度图像kernel = np.ones((5,5),np.uint8)closing= cv2.morphologyEx(img,cv2.MORPH_TOPHAT,kernel)plt.subplot(1,2,1),plt.imshow(img,'gray')#默认彩色,另一种彩色bgrplt.subplot(1,2,2),plt.imshow(closing,'gray')
(七)黑帽
原始图像与其进行闭运算后的图像进行一个差。
import cv2import numpy as npimport matplotlib.pyplot as pltimg = cv2.imread('man.jpg',0) #直接读为灰度图像kernel = np.ones((5,5),np.uint8)closing= cv2.morphologyEx(img,cv2.MORPH_BLACKHAT,kernel)plt.subplot(1,2,1),plt.imshow(img,'gray')#默认彩色,另一种彩色bgrplt.subplot(1,2,2),plt.imshow(closing,'gray')
从运算上讲是这样的,但是这个图下礼帽与黑帽的结果并不是很明显。
0 0
- Python下opencv使用笔记(六)(图像的形态学转换)
- Python OpenCV 形态学 (六)
- OpenCV入门笔记(六) 形态学变换
- openCV学习笔记(5)-- 图像形态学
- python opencv入门 形态学转换(13)
- opencv 图像形态学转换
- Python下opencv使用笔记(八)(图像金字塔)
- Python下opencv使用笔记(九)(图像直方图)
- openCv学习笔记(六)-openCv对形态学的运算处理
- 【OpenCV图像处理】二十、数学形态学方法(下)
- 【OpenCV】图像处理(二)图像形态学
- Python下opencv使用笔记(三)(图像的几何变换)
- Python下opencv使用笔记(四)(图像的阈值处理)
- Python下opencv使用笔记(五)(图像的平滑与滤波)
- Python下opencv使用笔记(三)(图像的几何变换)
- opencv笔记(2):图像形态学
- OpenCV-Python—形态学转换
- opencv-python(11):形态学转换
- Python爬虫学习系列教程
- linux学习总结之磁盘管理
- 最小二乘法&梯度下降法
- 乱弹纪录I:Geometry Shader
- mongoVue的使用
- Python下opencv使用笔记(六)(图像的形态学转换)
- Java多线程笔记
- android ActionBar(2)
- win7下搭建opengl es 2.0开发环境
- 处理动态链表所需函数
- MyEclipse中更换JDK及工程警告问题
- [leetcode] 143.Reorder List
- 亚马逊是如何颠覆商业软件高昂价格这座”柏林墙”的
- Maven settings.xml