您的位置:首页 > 编程语言 > Python开发

opencv python 图片腐蚀和膨胀

2017-07-18 23:04 85 查看
参考:http://blog.csdn.net/yellow_red_people/article/details/53181239

定义一个5x5的结构:kernel=np.uint8(np.zeros((5,5)))

(1)腐蚀操作:

定义了一个5×5的十字形结构元素 其实是一个5x5的矩阵,我们知道在图片的腐蚀过程,对图片的每个点,使用这个结构扫描每一个点,用结构元素与其覆盖的二值图像做“与”操作,如果都为1,结果图像的该像素为1。否则为0,腐蚀处理的结果是使原来的二值图像减小一圈。
#00100
#00100
#11111
#00100
#00100


使用的函数:cv2.erode(img,kernel);

(2)膨胀操作:

使用同样的结构,对图片的每个点,使用这个结构扫描每一个点,用结构元素与其覆盖的二值图像做“与”操作,如果出现1,结果图像的该像素为1。否则为0,腐蚀处理的结果是使原来的二值图像扩大一圈。

使用的函数:cv2.dilate(img,kernel)

两张图片相减得到图片的边缘。

代码:

#encoding=utf-8  

import cv2    

import numpy as np    

#定义了一个5×5的十字形结构元素,  

#用结构元素与其覆盖的二值图像做“与”操作  

#如果都为1,结果图像的该像素为1。否则为0  

#腐蚀处理的结果是使原来的二值图像减小一圈。  

#00100  

#00100  

#11111  

#00100  

#00100  

kernel=np.uint8(np.zeros((5,5)))  

for x in range(5):  

    kernel[x,2]=1;  

    kernel[2,x]=1;  

#读入图片  

img = cv2.imread(r'E:\data\4.jpg',0)  

#腐蚀图像   

eroded=cv2.erode(img,kernel);  

#膨胀图像    

dilated = cv2.dilate(img,kernel)  

  

#将两幅图像相减获得边,第一个参数是膨胀后的图像,第二个参数是腐蚀后的图像    

result = cv2.absdiff(dilated,eroded);    

#取反  

x=0;  

y=0;  

width=result.shape[0]  

height=result.shape[1]  

while x<width:  

    y=0  

    while y<height:  

        result[x][y]=255-result[x][y]  

        y=y+1;  

    x=x+1  

cv2.imwrite("E:\data\eroded.jpg", eroded)  

cv2.imwrite("E:\data\dilated.jpg", dilated)  

cv2.imwrite("E:\data\result.jpg", result)  

  

  

cv2.waitKey(0)    

cv2.destroyAllWindows()  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: