填充墙一般用什么材料_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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python的数组怎么用_python数组的使用

    python的数组怎么用_python数组的使用1 Python 的数组分三种类型 1 list 普通的链表 初始化后可以通过特定方法动态增加元素 定义方式 arr 元素 2 Tuple 固定的数组 一旦定义后 其元素个数是不能再改变的 定义方式 arr 元素 2 Dictionary 词典类型 即是 Hash 数组 定义方式 arr 元素 k v 2 下面具体说明这些数组的使用方法和技巧 1 list 链表数组 a

    2025年10月15日
    2
  • 【C#】Unity3D中的C#编程初级[通俗易懂]

    【C#】Unity3D中的C#编程初级[通俗易懂]一、前言这篇文章主要是给零基础想要Unity入门的关于C#编程的一些意见二、参考文章unity中的C#编程-零基础(Unity2017)三、正文1.什么是C#编程语言?微软官方出版2.编程工具(IDE)3.创建第一个C#代码4.场景的保存和脚本的保存5.关于日志输出(指控制输出,其中Log有三类:正常、警告、错误输出)6.变量7.方法的定义和调…

    2022年5月13日
    65
  • 简述Vue的响应式原理

    简述Vue的响应式原理当一个Vue实例创建时,vue会遍历data选项的属性,用Object.defineProperty将它们转为getter/setter并且在内部追踪相关依赖,在属性被访问和修改时通知变化。每个组件实例都有相应的watcher程序实例,它会在组件渲染的过程中把属性记录为依赖,之后当依赖项的setter被调用时,会通知watcher重新计算,从而致使它关联的组件得以更新。 巴拉巴拉:==…

    2022年5月7日
    67
  • 数据库索引的实现原理

    数据库索引的实现原理

    2022年2月24日
    58
  • 迭代器Python_Python进阶

    迭代器Python_Python进阶迭代器迭代是访问集合元素的一种方式。迭代器是一个可以记住遍历的位置的对象。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。可迭代对象我们已经知道可以对l

    2022年7月29日
    7
  • 数据库MySQL学习——内含34道MySQL练习题及答案

    数据库MySQL学习——内含34道MySQL练习题及答案数据库MySQL1MySQL数据库简介1.1sql、DB、DBMS分别是什么,关系?DB:DataBase数据库DBMS:DateBaseManagementSystem数据库管理系统SQL:结构化查询语言、sql语句的编译有dbms完成DBMS负责执行sql语句,通过之心sql语句来操作DB当中的数据1.2什么是表?table是数据库的基本组成单元,所有的数据都以表格的形式组织,目的是可读性强行:被称为数据/记录(data)列:被称为字段(column)学号(

    2025年12月8日
    3

发表回复

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

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