填充墙一般用什么材料_opencv填充封闭区域

填充墙一般用什么材料_opencv填充封闭区域目录一、须知二、演示过程代码展示主函数展示原图运行结果三、总结一、须知本文章所提供代码不是自创,由于时间太久实在找不到来源,发布出来只为给大家提供便利,完全免费。话不多说,不想看文章的直接点击下载链接即可:点我.二、演示过程代码展示Matcop二值图intn填充比n小的孔洞函数默认为4连通如想改为8连通自行修改代码即可。#include”imfill.h”Matimfill(Matcop,intn){ Matdata=~cop; Matlabels,

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新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;
}

原图

在这里插入图片描述

运行结果

在这里插入图片描述

三、总结

新代码的运行速度较之前发布的相同功能的孔洞填充函数运行速度更快,实践证明大牛无处不在,小白瑟瑟发抖。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/194560.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 报表开发-列表参数

    1.目的:做一个下图的筛选框-实现多选(这是在已有报表基础上加一个筛选框,如果从无到有,步骤略有不同)(点击前)(点击时)2.首先配置数据源制作报表,点击报表中任意一个指标,在左上角出现数据源3.从组件中拖一个列表参数过来4.拖过来是这样子的,右键,录入数据5.录入固定数据,绑定数据源(记得按“应用”和“确定”)添加完就下面这样了6….

    2022年4月5日
    44
  • H.264 MPEG4 AVC Tutorial 学习笔记

    H.264 MPEG4 AVC Tutorial 学习笔记概述 命名 ITU-T H.264(previouslycalledH.26L) ISO/IEC MPEG-4…

    2022年9月19日
    2
  • 一篇文章教会你使用word域代码(seq field code )

    一篇文章教会你使用word域代码(seq field code )word域代码常常用于自动增长的序列表示,比如论文中的图号、表号。这是一个非常有用的技能,建议花十分钟打开word跟着走一遍。一、域代码的插入、显式、复制、更新Ctl+F9会显式出花括号,中间可以填入域代码,一定是使用Ctl+F9显式出的花括号,不能直接自己打出花括号,如下图所示其中seq表示是序列域代码(sequence),list是自己随便取的域名字。其实这行域代码可以理解成…

    2022年6月12日
    60
  • 教你如何选择以太坊ETH挖矿教程及挖矿分配模式

    教你如何选择以太坊ETH挖矿教程及挖矿分配模式现在,国内国外的矿池越来越多,挖矿难度也越来越大,对于矿工来说,又好又稳定的收益保障一直是追求的目标。以太坊ETH,全球第二大加密货币,对以太坊的追求者都有一种浓重的信仰与情怀,特别是最近消息称以太坊2.0即将来临,更加的激动人心。但最终的目的也是要获得收益,影响收益最大的因素就是矿池收益分配模式,现在矿池收益分配模式有:PPS、PPLNS、PPS+、FPPS等。那么,对于挖以太坊ETH来说…

    2022年6月7日
    65
  • 【VUE】- 前端封装之父子组件传值

    【VUE】- 前端封装之父子组件传值前端代码进行抽象与封装离不开父子组件传值问题,做的过程中总有梳理不清楚的时候,在此总结一波,一方面是自己梳理梳理思路,另外一方面有需要的伙伴们也可以瞅一瞅,本文是从开始到最后实现数据的一个操作过程;父组件向子组件传值1、可抽离的静态页面首先是看一下自己的静态页面有哪些相似之处可以被抽象出来,如下面这个页面,看似不一样,实则都是一样的,只是图标和文字内容不一致,OK了解后我们可以开始设计静态页…

    2022年5月16日
    47
  • sublime phpcs

    sublime phpcs

    2022年3月2日
    44

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号