框架填充墙砌筑规范_opencv二值化图像
全栈程序员-用户IM • • 未分类
框架填充墙砌筑规范_opencv二值化图像http://bbs.csdn.net/topics/391542633?page=1
大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
opencv 孔洞填充,方案1:
http://bbs.csdn.net/topics/391542633?page=1
opencv 孔洞填充,方案1:
其实主要是imfill(matrix, ‘holes’); 的openCV/C++ 实现。
Overview:
imfill是matlab的一个函数,在http://www.mathworks.cn/cn/help/images/ref/imfill.html 中有详细的讲解。这个函数有好几种不同的签名。在这里我的侧重点是imfill(m, ‘holes’),以及如何用openCV来实现imfill一样的功能。本文有三部分组成。
1. 使用Matlab 的imfill 进行填充图像
在Matlab中简单的几行代码就能实现:
1 2 3 4 5 6 7 8
|
|
clc; clear; BW = im2bw( imread( ‘imfilltest.tif’)); imshow(BW); holes = imfill(BW, ‘holes’); BW(~holes) = 1; figure,imshow(holes); |
左图为填充前的图像,右图是填充后的图像:
opencv 在这里不像matlab那么好用了,matlab调用下。
C++ Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
|
|
#include #include #include using namespace std; using namespace cv; void my_imfillholes(Mat &src) { // detect external contours // vector > contours; vector hierarchy; findContours(src, contours, hierarchy, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE); // // fill external contours // if( !contours.empty() && !hierarchy.empty() ) { for ( int idx= 0;idx < contours.size();idx++) { drawContours(src,contours,idx,Scalar::all( 255),CV_FILLED, 8); } } } void test_my_imfillholes() { Mat m = imread(filltestName,IMREAD_GRAYSCALE); //threshold, (i,j)>100 –>255 Mat th_m; threshold(m, th_m, 100, 255, THRESH_BINARY); my_imfillholes(th_m); namedWindow(WinName, CV_WINDOW_AUTOSIZE); imshow(WinName, th_m); waitKey( 0); } void main() { test_my_imfillholes(); system( “pause”); } |
3. imfill 和opencv实现的imfill 对矩阵进行操作的对比
我仍有点不放心,觉得尽管2幅图看起来差不多,但是是不是完全一样呢,然后我觉得用个矩阵试一下。
m = [1, 1, 1, 0, 0, 0, 0, 0;
1, 0, 1, 0, 1, 1, 0, 0;
1, 0, 1, 0, 1, 1, 0, 0;
1, 1, 1, 0, 1, 0, 1, 0;
1, 0, 1, 0, 1, 0, 1, 0;
1, 1, 1, 0, 1, 0, 1, 0;
1, 0, 1, 0, 0, 1, 1, 0;
1, 1, 1, 0, 0, 0, 0, 0];
without_holes = imfill(m, ‘holes’)
得到结果:
without_holes =
1 1 1 0 0 0 0 0
1 1 1 0 1 1 0 0
1 1 1 0 1 1 0 0
1 1 1 0 1 1 1 0
1 1 1 0 1 1 1 0
1 1 1 0 1 1 1 0
1 1 1 0 0 1 1 0
1 1 1 0 0