opencv中的开运算,闭运算,形态学梯度,顶帽和黑帽,Canny算子,Sobel算子,Laplace算子,Scharr滤波器 简易理解。

开运算:先腐蚀,再膨胀

可以清除一些小东西(亮的),放大局部低亮度的区域


闭运算:先膨胀,再腐蚀

可以清除小黑点


形态学梯度:膨胀图与腐蚀图之差

提取物体边缘


顶帽:原图像 - 开运算图

突出原图像中比周围亮的区域


黑帽:闭运算图 - 原图像

突出原图像中比周围暗的区域


这些运算都能用一个函数进行处理

[cpp]  view plain  copy
  1. void morphologyEx(InputArray src, OutputArray dst, int op, InputArray kernel, ...)  


看前四个参数就行了,后面的就用默认值

第一个参数 输入

第二个参数 输出

第三个参数 操作类型

MORTH_OPEN                函数做开运算

MORTH_CLOSE              函数做闭运算

MORTH_GRADIENT       函数做形态学梯度运算

MORTH_TOPHAT            函数做顶帽运算

MORTH_BLACKHAT       函数做黑帽运算

MORTH_DILATE              函数做膨胀运算

MORTH_ERODE             函数做腐蚀运算


第四个参数  内核类型    用getStructuringElement函数得到


例子:

[cpp]  view plain  copy
  1. morphologyEx(ma1, maArray[0], MORPH_OPEN, getStructuringElement(MORPH_RECT, Size(15,15)));  
  2. imshow("im4", maArray[0]);  
  3.   
  4. morphologyEx(ma1, maArray[1], MORPH_CLOSE, getStructuringElement(MORPH_RECT, Size(15, 15)));  
  5. imshow("im5", maArray[1]);  
  6.   
  7. morphologyEx(ma1, maArray[2], MORPH_GRADIENT, getStructuringElement(MORPH_RECT, Size(15, 15)));  
  8. imshow("im6", maArray[2]);  
  9.   
  10. morphologyEx(ma1, maArray[3], MORPH_TOPHAT, getStructuringElement(MORPH_RECT, Size(15, 15)));  
  11. imshow("im7", maArray[3]);  
  12.   
  13. morphologyEx(ma1, maArray[4], MORPH_BLACKHAT, getStructuringElement(MORPH_RECT, Size(15, 15)));  
  14. imshow("im8", maArray[4]);  
  15.   
  16. morphologyEx(ma1, maArray[5], MORPH_DILATE, getStructuringElement(MORPH_RECT, Size(15, 15)));  
  17. imshow("im9", maArray[5]);  
  18.   
  19. morphologyEx(ma1, maArray[6], MORPH_ERODE, getStructuringElement(MORPH_RECT, Size(15, 15)));  
  20. imshow("im10", maArray[6]);  

放出一些运行效果图:

 

canny边缘检测效果图:



 


Sobel边缘检测:



Scharr滤波器:



你可能感兴趣的:(OpenCV)