轮廓提取
来源:互联网 发布:淘宝行业排名 编辑:程序博客网 时间:2024/05/23 18:32
基本原理:对于一副背景为白色,目标为黑色的二值图像,如果在图中找到一点黑色,且它的8领域也均为黑色,就说明该点是目标的内部点,将其置为白色,表现为掏空状态;否则保持黑色不变,该点事目标的边界点。整幅图像按此原理处理后,便得到轮廓。
算法描述:
1.取得源图像的宽度。
2.创建一幅大小与源图像一致、全像素为白的目标图像。
3.除四周的边缘像素外,对源图像逐点扫描,如源图像当前点为黑色,则扫描其8领域,若8领域都为黑色,则将源图像当前点在目标图像中对应的点置黑。
4.重复步骤3,直至图像处理完毕。
5.所得的目标图像即为轮廓。
代码:
#include<opencv2\opencv.hpp>using namespace cv;Mat contour_extract(Mat &img){int width = img.cols;Mat mask(img.size(), img.type(), Scalar::all(255));for (int i = 1; i < img.rows - 1; i++){uchar *img_data = img.ptr<uchar>(i);uchar *mask_data = mask.ptr<uchar>(i);for (int j = 1; j < img.cols - 1; j++){int flag = 0;if (*img_data ==0){for (int ii = 0; ii < 3; ii++){for (int jj = 0; jj < 3; jj++){if (*(img_data + (ii - 1)*width + (jj - 1)) != 0){*mask_data = 0;flag = 1;break;}}if (flag == 1){break;}}}img_data++;mask_data++;}}return mask;}int main(){while (1){Mat img = imread("2.jpg", 0);imshow("源图像", img);threshold(img, img, 240, 255, 0);Mat kk=contour_extract(img);imshow("轮廓", kk);waitKey(1);} return 0;}
0 0
- 轮廓提取
- 轮廓提取
- 轮廓提取
- 轮廓提取
- 图像轮廓提取
- OpenCV轮廓提取
- emgu cv 轮廓提取
- 【opencv】轮廓提取
- opencv轮廓提取
- OpenCV轮廓提取
- cvFindContours/findContours提取轮廓
- opencv提取轮廓z
- OpenCV 轮廓提取
- VTK轮廓提取
- 提取单图元轮廓
- opencv矩形轮廓提取
- PS提取图形轮廓
- opencv 轮廓提取
- [置顶] localStorage存储JSON对象
- 使用 CGPDFDocument、CATiledLayer 和 UIPageViewController 做简单的 PDF 阅读器(一)
- 【UML初识】-行为图(二)
- 选择
- A*(A星)算法学习资料
- 轮廓提取
- php利用socket发请求
- 第12周OJ实践 爬楼梯
- 自定义View的简单案例(2)
- java类加载机制
- HDU5980 Find Small A
- 通过函数的地址调用函数
- 表达式语法分析——预测分析法
- 本地与远程服务器之间的文件传输