opencv python 学习第三天 图片腐蚀和膨胀

定义一个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)

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

代码:

  1. #encoding=utf-8  
  2. import cv2    
  3. import numpy as np    
  4. #定义了一个5×5的十字形结构元素,  
  5. #用结构元素与其覆盖的二值图像做“与”操作  
  6. #如果都为1,结果图像的该像素为1。否则为0  
  7. #腐蚀处理的结果是使原来的二值图像减小一圈。  
  8. #00100  
  9. #00100  
  10. #11111  
  11. #00100  
  12. #00100  
  13. kernel=np.uint8(np.zeros((5,5)))  
  14. for x in range(5):  
  15.     kernel[x,2]=1;  
  16.     kernel[2,x]=1;  
  17. #读入图片  
  18. img = cv2.imread('./1.jpg',0)  
  19. #腐蚀图像   
  20. eroded=cv2.erode(img,kernel);  
  21. #膨胀图像    
  22. dilated = cv2.dilate(img,kernel)  
  23.   
  24.   
  25.   
  26. #将两幅图像相减获得边,第一个参数是膨胀后的图像,第二个参数是腐蚀后的图像    
  27. result = cv2.absdiff(dilated,eroded);    
  28. #取反  
  29. x=0;  
  30. y=0;  
  31. width=result.shape[0]  
  32. height=result.shape[1]  
  33. while x<width:  
  34.     y=0  
  35.     while y<height:  
  36.         result[x][y]=255-result[x][y]  
  37.         y=y+1;  
  38.     x=x+1  
  39. cv2.imwrite("./eroded.jpg", eroded)  
  40. cv2.imwrite("./dilated.jpg", dilated)  
  41. cv2.imwrite("./result.jpg", result)  
  42.   
  43.   
  44. cv2.waitKey(0)    
  45. cv2.destroyAllWindows()   
结果
阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭