博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《图像处理实例》 之 填充封闭区域
阅读量:4288 次
发布时间:2019-05-27

本文共 2110 字,大约阅读时间需要 7 分钟。


填充封闭区域

这是的作者想法,我只是对其理解之后改进和说明,欢迎大家使用这个小软件!

有需要源工程的朋友可以留邮箱! 


 目标:填充白色区域的内部

 说明:看似很简单的题目,如果盲目的做,半天弄不出来而且复杂度很高,在很多场合有利用。

 方法:

    1.利用边缘检测,然后去检测的点进行求平均,接着利用FloodFill进行填充。

    2.利用逆向思维,填充内部就等于填充外部,以外部的一个种子点利用FloodFill进行填充。

对方法一进行简单的阐述:

对方法二进行简单的阐述:

 本博文利用第二种方法进行操作:

上代码:

1 #include 
2 #include
3 4 using namespace std; 5 using namespace cv; 6 int FillBlock(Mat src, Mat &mask, Point center); 7 int main(int argc,char**argv) 8 { 9 Mat inputImage = imread("123.jpg", 0);10 threshold(inputImage, inputImage, 1, 255, THRESH_BINARY_INV | THRESH_OTSU);11 Mat mask = Mat::zeros(inputImage.size(), CV_8UC1);12 mask.setTo(255);13 Mat rows = Mat::ones(Size(inputImage.cols, 1), CV_8UC1), cols = Mat::zeros(Size(1, inputImage.rows), CV_8UC1);14 Mat src_rows_beg = mask.row(0);15 Mat src_rows_end = mask.row(inputImage.rows - 1);16 Mat src_cols_beg = mask.col(0);17 Mat src_cols_end = mask.col(inputImage.cols - 1);18 rows.copyTo(src_rows_beg); rows.copyTo(src_rows_end);19 cols.copyTo(src_cols_beg); cols.copyTo(src_cols_end);20 int temp = FillBlock(inputImage, mask, Point(1, 1));21 return 0;22 }23 24 int FillBlock(Mat src, Mat &mask, Point center)25 {26 uchar back = src.at
(center.y, center.x);27 vector
fill_point;28 int count = 0, count_mount = 1;29 fill_point.push_back(center);30 while (count < count_mount)31 {32 vector
img;33 vector
msk;34 for (int i = -1; i < 2; i++)35 {36 img.push_back(src.ptr
(fill_point[count].y + i));37 msk.push_back(mask.ptr
(fill_point[count].y + i));38 }39 for (size_t i = 0; i < 3; i++)40 {41 for (int j = -1; j < 2; j++)42 {43 if (img[i][fill_point[count].x + j] == back && !(j == 0 && i == 1) && msk[i][fill_point[count].x + j] == 255)44 {45 fill_point.push_back(Point(fill_point[count].x + j, fill_point[count].y + i - 1));46 msk[i][fill_point[count].x + j] = 1;47 }48 }49 }50 msk[1][fill_point[count].x] = 1;51 count_mount = fill_point.size() - 1;52 fill_point.erase(fill_point.begin());53 }54 return 0;55 }

转载地址:http://kitgi.baihongyu.com/

你可能感兴趣的文章
android之延迟执行的几种方法
查看>>
android保存内容到xml中、解析xml
查看>>
android之对话框、单选,多选,进度条,日期选择对话框,时间选择对话框
查看>>
android 之从操作sqlite
查看>>
nodejs之express详解
查看>>
android之常见问题集合和注意事项
查看>>
adroid之加密算法md5
查看>>
android之drawable文件的设置selector、shape
查看>>
android之手势、touch事件流程、事件传递机制
查看>>
android之res/values、国际化
查看>>
android之一键锁屏、开启管理员权限、取消权限、卸载应用、开启应用
查看>>
android之判断服务是否再运行ActivityManager
查看>>
android之自定义组合控件
查看>>
android之土司的触摸点击事件
查看>>
android之获取联系人列表
查看>>
android之升级下载、安装apk
查看>>
android之自定义土司Toast
查看>>
android之实现多次点击事件
查看>>
android之挂断电话
查看>>
android之listview分页加载上拉刷新、更新listview
查看>>