morphologyEx 形态学

举报
风吹稻花香 发表于 2021/06/05 00:34:00 2021/06/05
【摘要】 形态学可以对着二值图操作,好像也能对着灰度图操作,返回的还是灰度图。 利用morphologyEx这个函数可以方便的对图像进行一系列的膨胀腐蚀组合。 函数讲解 ●函数原型 ○c++   void morphologyEx( InputArray src, OutputArray dst, int op, InputArray kernel, Point a...

形态学可以对着二值图操作,好像也能对着灰度图操作,返回的还是灰度图。

利用morphologyEx这个函数可以方便的对图像进行一系列的膨胀腐蚀组合。

函数讲解

●函数原型
○c++

 


  
  1. void morphologyEx( InputArray src, OutputArray dst,
  2. int op, InputArray kernel,
  3. Point anchor = Point(-1,-1), int iterations = 1,
  4. int borderType = BORDER_CONSTANT,
  5. const Scalar& borderValue = morphologyDefaultBorderValue() )

○Android

 


  
  1. void morphologyEx(Mat src, Mat dst, int op, Mat kernel, Point anchor, int iterations, int borderType, Scalar borderValue)

●参数解释
○src:源图像Mat对象
○dst:目标图像Mat对象
○op:操作的类型,通过源码我们得知总共有以下几种类型:

 


  
  1. enum MorphTypes{
  2. MORPH_ERODE = 0, //腐蚀
  3. MORPH_DILATE = 1, //膨胀
  4. MORPH_OPEN = 2, //开操作
  5. MORPH_CLOSE = 3, //闭操作
  6. MORPH_GRADIENT = 4, //梯度操作
  7. MORPH_TOPHAT = 5, //顶帽操作
  8. MORPH_BLACKHAT = 6, //黑帽操作
  9. MORPH_HITMISS = 7
  10. };

○kernel:用于膨胀操作的结构元素,如果取值为Mat(),那么默认使用一个3 x 3 的方形结构元素,可以使用getStructuringElement()来创建结构元素
○anchor:参考点,其默认值为(-1,-1)说明位于kernel的中心位置。
○borderType :边缘类型,默认为BORDER_CONSTANT。
○borderValue :边缘值,用它的默认值即可。

各种操作的效果

●MORPH_ERODE(腐蚀)
erode(腐蚀)函数效果一样
●MORPH_DILATE(膨胀)
dilate(膨胀)函数效果一样
●MORPH_OPEN(开)
其实内部就是进行了先腐蚀后膨胀的操作。

 

源图像

 

操作后图像


●MORPH_CLOSE(闭)
其实内部就是进行了先膨胀后腐蚀的操作。

 

源图像

 

操作后图像


●MORPH_GRADIENT(梯度)
内部是膨胀减去腐蚀

 

源图像

 

操作后的图像


●MORPH_TOPHAT(顶帽)

 

源图像

 

操作后的图像


●MORPH_BLACKHAT(黑帽)

 

源图像

 

操作后的图像

函数使用

●c++中

 


  
  1. #include<opencv2/opencv.hpp>
  2. using namespace cv;
  3. int main() {
  4. Mat src = imread("C:/Users/Administrator/Desktop/wan.png");//引入源图像
  5. if (src.empty()) {
  6. return -1;
  7. }
  8. imshow("src", src);//展示源图像
  9. Mat dst;
  10. Mat kernel = getStructuringElement(MORPH_RECT,Size(3,3));//创建结构元素大小为3*3
  11. morphologyEx(src, dst,MORPH_OPEN, kernel);//开操作
  12. imshow("dst", dst);//展示目标图像
  13. waitKey(0);
  14. return 0;
  15. }

●Android中

 


  
  1. Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_beauty);//获取源图像Bitmap对象
  2. Mat src = new Mat();
  3. Mat dst = new Mat();
  4. Utils.bitmapToMat(bitmap,src);//Bitmap转换为Mat对象
  5. Mat kernel = Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size(3, 3));//获取结构元素
  6. Imgproc.morphologyEx(src,dst,Imgproc.MORPH_OPEN,kernel);//开操作
  7. Utils.matToBitmap(dst,bitmap);//Mat转换为Bitmap对象
  8. imageView.setImageBitmap(bitmap);



作者:itfitness
链接:https://www.jianshu.com/p/ee72f5215e07
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

文章来源: blog.csdn.net,作者:网奇,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/jacke121/article/details/115220106

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。