大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
一、须知
本文章所提供代码不是自创,由于时间太久实在找不到来源,发布出来只为给大家提供便利,完全免费。
话不多说,不想看文章的直接点击下载链接即可:
点我.
二、演示过程
代码展示
Mat cop
二值图
int n
填充比n
小的孔洞
函数默认为4连通 如想改为8连通 自行修改代码即可。
#include"imfill.h"
Mat imfill(Mat cop,int n)
{
Mat data = ~cop;
Mat labels, stats, centroids;
connectedComponentsWithStats(data, labels, stats, centroids, 4, CV_16U);
int regions_count = stats.rows - 1;
int regions_size, regions_x1, regions_y1, regions_x2, regions_y2;
for (int i = 1; i <= regions_count; i++)
{
regions_size = stats.ptr<int>(i)[4];
if (regions_size < n)
{
regions_x1 = stats.ptr<int>(i)[0];
regions_y1 = stats.ptr<int>(i)[1];
regions_x2 = regions_x1 + stats.ptr<int>(i)[2];
regions_y2 = regions_y1 + stats.ptr<int>(i)[3];
for (int j = regions_y1; j < regions_y2; j++)
{
for (int k = regions_x1; k < regions_x2; k++)
{
if (labels.ptr<ushort>(j)[k] == i)
data.ptr<uchar>(j)[k] = 0;
}
}
}
}
data = ~data;
return data;
}
主函数展示
#include<opencv2/opencv.hpp>
#include<iostream>
using namespace std;
using namespace cv;
#include"imfill.h"
Mat src,dst, gray, erzhi,holef;
int main()
{
src = imread("5.jpg");
//imshow("万丈高楼第一步",src);
blur(src, dst, Size(3, 3), Point(-1, -1));
//imshow("均值滤波",dst);
cvtColor(dst, gray, COLOR_BGR2GRAY);
//imshow("灰度图",gray);
Canny(gray, erzhi, 100, 200, 3, false);
//imshow("边缘检测",erzhi);
holef = imfill(erzhi,1000);
imshow("填洞", holef);
waitKey(0);
return 0;
}
原图
运行结果
三、总结
新代码的运行速度较之前发布的相同功能的孔洞填充函数运行速度更快,实践证明大牛无处不在,小白瑟瑟发抖。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/194560.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...