opencv图像形态学处理
来源:互联网 发布:泰国4g网络制式 编辑:程序博客网 时间:2024/06/05 07:50
部分内容转至http://blog.csdn.net/welcome_xu/article/details/6694985
1:图像的形态学处理:
膨胀、腐蚀、开、闭运算是数学形态学最基本的变换,用得最多的主要是针对二值图像的形态学
膨胀:把二值图像各1像素连接成分的边界扩大一层(填充边缘或0像素内部的孔);
腐蚀:把二值图像各1像素连接成分的边界点去掉从而缩小一层(可提取骨干信息,去掉毛刺,去掉孤立的0像素);
开:先腐蚀再膨胀,可以去掉目标外的孤立点
闭:先膨胀再腐蚀,可以去掉目标内的孔。
首先看一下opencv中自带的函数:
腐蚀:
CV_EXPORTS_W void erode( InputArray src, OutputArray dst, InputArray kernel, Point anchor=Point(-1,-1), int iterations=1, int borderType=BORDER_CONSTANT, const Scalar& borderValue=morphologyDefaultBorderValue() );
其中,src为输入的图像,一般为二值图像也可以是灰度图像,dst为输出图像,和src可以是同一个变量,kennels为结构元素,默认的话为一个3×3的矩阵,anchor:结构元素的中心,如果是默认参数(-1,-1),程序会自动将其设置为结构元素的中心。
iterations:迭代次数,我们可以选择对图像进行多次形态学运算。后面两个参数是边界类型,由于要处理领域问题,所以图像需要扩充边界。一般情况下使用默认即可。
膨胀:
CV_EXPORTS_W void dilate( InputArray src, OutputArray dst, InputArray kernel, Point anchor=Point(-1,-1), int iterations=1, int borderType=BORDER_CONSTANT, const Scalar& borderValue=morphologyDefaultBorderValue() );
参数和上边一样;
int _tmain(int argc, _TCHAR* argv[]){Mat image = imread("003.jpg",1);cvtColor(image,image,CV_RGB2GRAY);threshold(image,image,65,255,THRESH_BINARY);namedWindow("原图");imshow("原图",image);Mat eroded;erode(image,eroded,Mat());namedWindow("腐蚀");imshow("腐蚀",eroded);Mat dilated;dilate(image,dilated,Mat());namedWindow("膨胀");imshow("膨胀",dilated);waitKey(0);return 0;}
原二值图像和腐蚀膨胀后的结果如下图:
2:开运算与闭运算:
CV_EXPORTS_W void morphologyEx( InputArray src, OutputArray dst, int op, InputArray kernel, Point anchor=Point(-1,-1), int iterations=1, int borderType=BORDER_CONSTANT, const Scalar& borderValue=morphologyDefaultBorderValue() );
可以看到参数与腐蚀膨胀运算差不多,就是第三个参数op不一样。op为MORPH_CLOSE,表示闭运算。MORPH_OPEN表示开运算;
int _tmain(int argc, _TCHAR* argv[]){Mat image = imread("003.jpg",1);cvtColor(image,image,CV_RGB2GRAY);threshold(image,image,65,255,THRESH_BINARY);namedWindow("原图");imshow("原图",image);Mat element(5,5,CV_8U,Scalar(1));Mat closed;morphologyEx(image,closed,MORPH_CLOSE,element);namedWindow("closed");imshow("closed",closed);Mat opened;morphologyEx(image,opened,MORPH_OPEN,element);namedWindow("opened");imshow("opened",opened);waitKey(0);return 0;}
得到的结果:
图像的形态学操作主要用于:边缘检测、图像分割、形态骨架提取、噪声滤除。
选取结构元素的方法:多结构元素、遗传算法。
0 0
- openCV 形态学图像处理
- opencv图像形态学处理
- 【OpenCV】图像处理(二)图像形态学
- Opencv 图像处理——形态学方法
- OpenCV入门(八)--形态学图像处理
- 基于OpenCV的图像形态学处理
- opencv学习(8)形态学图像处理
- opencv:图像形态学
- opencv 图像形态学转换
- OpenCV图像处理形态学操作腐蚀Erode与膨胀Dilate
- Opencv-图像形态学处理比较(膨胀、腐蚀、开闭)
- OpenCV图像处理-区域分割-形态学操作应用
- opencv学习图像处理形态学腐蚀和膨胀
- 【OpenCV图像处理】十八、数学形态学方法(上)
- 【OpenCV图像处理】十九、数学形态学方法(中)
- 【OpenCV图像处理】二十、数学形态学方法(下)
- 形态学图像处理
- 形态学图像处理
- 【Leetcode】Climbing Stairs
- 数据库sqlite基本操作
- hihoCoder挑战赛 one
- C# HttpListener 开发服务器示例
- 如何提升思维广度、深度、高度和远度,从而完善自己的思维体系?
- opencv图像形态学处理
- html框架及其属性
- 【C语言】模拟实现memmove
- How does memmove differ from memcpy
- mysql 入门基础(7)—sql编程常用函数
- 最短路算法详解(Dijkstra/SPFA/Floyd)
- html表单及其属性
- 54 59. Spiral Matrix I II
- Iterator接口用法