通过形态学操作实现图像边缘
来源:互联网 发布:淘宝客如何生成淘口令 编辑:程序博客网 时间:2024/05/15 11:49
实现图像边缘的算法的思路是:首先将图像转换为二值图像,然后膨胀此二值图像,最后减去未膨胀之前的图像便得到了图像的边缘。
参考代码如下所示:
int _tmain(int argc, _TCHAR* argv[]){ IplImage *srcImg = cvLoadImage("test.jpg"); IplImage *grayImg = cvCreateImage(cvGetSize(srcImg), 8, 1); cvCvtColor(srcImg, grayImg, CV_BGR2GRAY); IplImage *dstImg = cvCreateImage(cvGetSize(srcImg), 8, 1);cvThreshold(grayImg, dstImg, cv::Otsu(srcImg), 255, CV_THRESH_BINARY); IplConvKernel *kernel = cvCreateStructuringElementEx(3, 3, 1, 1, CV_SHAPE_CROSS); cvMorphologyEx(dstImg, dstImg, NULL, kernel, CV_MOP_OPEN, 3); cvMorphologyEx(dstImg, dstImg, NULL, kernel, CV_MOP_CLOSE, 1); // Find edges: dilate(image) - image; IplImage *dilatedImg = cvCreateImage(cvGetSize(srcImg), 8, 1); cvDilate(dstImg, dilatedImg, kernel, 1); cvSub(dilatedImg, dstImg, dstImg); // Label edges in srcImg IplImage *redCh = cvCreateImage(cvGetSize(srcImg), 8, 1); IplImage *greenCh = cvCreateImage(cvGetSize(srcImg), 8, 1); IplImage *blueCh = cvCreateImage(cvGetSize(srcImg), 8, 1); cvSplit(srcImg, blueCh, greenCh, redCh, NULL); cvOr(redCh, dstImg, redCh); cvMerge(blueCh, greenCh, redCh, NULL, srcImg); cvNamedWindow("src"); cvShowImage("src", srcImg); cvNamedWindow("dst"); cvShowImage("dst", dstImg); cvWaitKey(0); return 0;}其中cv::Otsu(srcImg)的算法,可参考http://en.wikipedia.org/wiki/Otsu%27s_method
输出结果:
关于Image Engineering & Computer Vision的更多讨论与交流,敬请关注本博客和新浪微博songzi_tea.
0 0
- 通过形态学操作实现图像边缘
- 二值形态学操作、图像的边缘检测、图像编码
- matlab中的图像二值化、形态学操作、边缘查找
- 图像形态学概要-腐蚀、膨胀、开运算、闭运算、形态学梯度(形态学边缘提取)、顶帽操作、黑帽操作
- 图像形态学操作总结
- 图像处理-形态学操作
- 图像处理的形态学操作
- 详细分析图像形态学操作
- 【图像处理】基本形态学操作
- 14. 图像的形态学操作
- 形态学操作实现
- 形态学滤波对图像进行边缘及角点检测
- 图像形态学操作的基本原理简介
- 图像形态学操作—腐蚀膨胀深入
- 图像操作的形态学处理MATLAB
- 图像形态学操作—腐蚀膨胀深入
- bwmorph 对二值图像形态学操作
- 图像形态学操作—腐蚀膨胀深入
- 停靠模式:子视图自适应父视图长度宽度左边距右边距上下边距
- WPF学习之绑定—Validation Rule和Binding Group
- CG_INLINE note
- linux下修改主机名
- 需求分析六大原则
- 通过形态学操作实现图像边缘
- apache启用gzip压缩方法
- 第一天
- WebView 加载进度条
- C++调用MySQL
- 迅雷离线下载与高速通道运作原理详解
- PermGen space(内存溢出)
- jsoup
- 使用adb输入中文字符