【C++ OpenCV】机器视觉-二值图像和灰度图像的膨胀、腐蚀、开运算、闭运算

原图请添加图片描述

结果图
请添加图片描述

//包含头文件
#include <opencv2/opencv.hpp>

//命名空间
using namespace cv;
using namespace std;

//全局函数声明部分

//我的腐蚀运算
Mat Erode(Mat src, Mat Mask, uint32_t x0, uint32_t y0)
{
	uint32_t x = 0, y = 0;
	Mat dst(src.rows, src.cols, CV_8U, Scalar(0));

	for (x = 0; x < src.cols; ++x)
	{
		for (y = 0; y < src.rows; ++y)
		{
			uint8_t dst_P = 255;
			for (uint32_t xm = 0; xm < Mask.cols; ++xm)
			{
				for (uint32_t ym = 0; ym < Mask.rows; ++ym)
				{
					if (dst_P && Mask.at<uchar>(Point(xm, ym)) && (x + xm) < src.cols && (y + ym) < src.rows)
						if (dst_P > src.at<uchar>(Point(x + xm, y + ym)))	//寻找最小值
							dst_P = src.at<uchar>(Point(x + xm, y + ym));
				}
				if (!dst_P)
					break;
			}
			if (dst_P && (x + x0) < src.cols && (y + y0) < src.rows)
				dst.at<uchar>(Point(x + x0, y + y0)) = dst_P;
		}
	}
	return dst;
}

//我的膨胀运算
Mat Dilate(Mat src, Mat Mask, uint32_t x0, uint32_t y0)
{
	uint32_t x = 0, y = 0;
	Mat dst(src.rows, src.cols, CV_8U, Scalar(0));

	for (x = 0; x < src.cols; ++x)
	{
		for (y = 0; y < src.rows; ++y)
		{
			uint8_t dst_P = 0;
			for (uint32_t xm = 0; xm < Mask.cols; ++xm)
			{
				for (uint32_t ym = 0; ym < Mask.rows; ++ym)
				{
					if (dst_P != 255 && Mask.at<uchar>(Point(xm, ym)) && (x + xm) < src.cols && (y + ym) < src.rows)
						if (dst_P < src.at<uchar>(Point(x + xm, y + ym)))	//寻找最大值
							dst_P = src.at<uchar>(Point(x + xm, y + ym));
				}
				if (dst_P == 255)
					break;
			}
			if (dst_P && (x + x0) < src.cols && (y + y0) < src.rows)
				dst.at<uchar>(Point(x + x0, y + y0)) = dst_P;
		}
	}
	return dst;
}

//主函数
int main(int argc, char* argv[])
{
	//【1】载入图像,灰度化
	Mat image = imread("2.png", 0);//灰度原图

	//【2】检查是否载入成功
	if (image.empty())
	{
		printf("读取图片错误,请确认目录下是否有imread函数指定图片存在!\n");
		return 0;
	}

	//【3】生成结构元素
	uint8_t element_a[7][7] =
	{ 1,	1,	1,	1,	1,	1,	1,
		1,	1,	1,	1,	1,	1,	1,
		1,	1,	1,	1,	1,	1,	1,
		1,	1,	1,	1,	1,	1,	1,
		1,	1,	1,	1,	1,	1,	1,
		1,	1,	1,	1,	1,	1,	1,
		1,	1,	1,	1,	1,	1,	1, };
	Mat element = Mat(7, 7, CV_8U, element_a);

	//【4】显示图像
	imshow("原灰度图像", image);

	//【5】腐蚀运算
	Mat erodedImage;
	erode(image, erodedImage, element);
	imshow("Opencv的腐蚀运算", erodedImage);
	imshow("我的腐蚀运算", Erode(image, element, 3, 3));

	//【6】膨胀运算
	Mat dilatedImage;
	dilate(image, dilatedImage, element);
	imshow("Opencv的膨胀运算", dilatedImage);
	imshow("我的膨胀运算", Dilate(image, element, 3, 3));

	//【7】开运算
	Mat OpenImage;
	morphologyEx(image, OpenImage, MORPH_OPEN, element);
	imshow("Opencv的开运算", OpenImage);
	imshow("我的开运算", Dilate(Erode(image, element, 3, 3), element, 3, 3));	//开运算即先腐蚀再膨胀

	//【8】闭运算
	Mat CloseImage;
	morphologyEx(image, CloseImage, MORPH_CLOSE, element);
	imshow("Opencv的闭运算", CloseImage);
	imshow("我的闭运算", Erode(Dilate(image, element, 3, 3), element, 3, 3));	//闭运算即先膨胀再腐蚀

	//【10】保持窗口显示
	waitKey(0);
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/769843.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何在忘记密码的情况下删除华为ID激活锁

当您手中拥有最新的华为手机时&#xff0c;您会忍不住探索新的可能性&#xff0c;以从您的设备中获得最大价值。您可以下载新的应用程序、Android 启动器等&#xff0c;但这些应用程序中的大多数都会给您的手机带来错误和安全威胁&#xff0c;如果不恢复出厂设置&#xff0c;可…

阿里云 ECS 服务器的安全组设置

阿里云 ECS 服务器的安全组设置 缘由安全组多个安全组各司其职一些常见的IP段百度 IP 段华为云 IP 段搜狗蜘蛛 IP 段阿里云 IP 段 。。。 缘由 最近公司规模缩减&#xff0c;原有的托管在 IDC 机房的服务器&#xff0c;都被处理掉了&#xff0c;所有代码都迁移到了阿里云的云服…

DolphinScheduler部署安装or基础介绍(一)

DolphinScheduler概述 Apache DolphinScheduler是一个分布式、易扩展的可视化DAG工作流任务调度平台。致力于解决数据处理流程中错综复杂的依赖关系&#xff0c;使调度系统在数据处理流程中开箱即用 DolphinScheduler核心架构 DolphinScheduler的主要角色如下&#xff1a; Ma…

迅狐多语言跨境电商系统源码-提供简单可定制解决方案

随着全球化的不断发展&#xff0c;跨境电商已经成为企业拓展市场、提升销售额的重要手段。然而&#xff0c;由于语言和文化差异&#xff0c;跨境电商经常面临着多语言支持的问题。为了解决这个问题&#xff0c;迅狐多语言跨境电商系统源码应运而生。 多语言跨境电商系统源码是一…

adb push 报错 ...error: failed to copy...

一、现象&#xff1a; 原因&#xff1a;没有权限导致的 二、解决方法&#xff1a; adb root adb remount #重新加载文件系统三、再次尝试&#xff1a;adb push xxx.apk /system/app 结果&#xff1a;成功

Qt Group与华为合作开发OpenHarmony版本,打造无缝跨设备操作系统

在华为开发者大会2024上&#xff0c;跨平台软件开发和质量保证工具的领先供应商 Qt Group&#xff08;Nasdaq, Helsinki: QTCOM&#xff09;荣幸地宣布成为OpenHarmony生态系统合作伙伴。这是继近几年华为采用Qt开发框架和自动化测试工具Squish的商业许可后&#xff0c;Qt Grou…

项目上线文档编写指南

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

MeEdu网校系统搜索功能问题处理

MeEdu通过 MeiliSearch 实现全文搜索服务。 一、下载 MeiliSearch 程序 https://github.com/meilisearch/MeiliSearch/releases/tag/v0.24.0 只能下载 v0.24.0 版本&#xff0c;其版本不支持 下载 meilisearch-linux-amd64就可以了 二、上传 MeiliSearch 三、启动命令如下…

项目中上传功能过段时间就报错,解决方案

实际项目中&#xff0c;发现过段时间上传功能就报错&#xff0c;报错如下&#xff1a; 排查问题&#xff1a; 在服务器的 /tmp目录下发现并没有 /tomcat目录&#xff0c;也就验证了上面找不到这个文件的报错 那么这个临时给tomcat的上传目录怎么就没有了呢&#xff1f; 其实临…

SyntaxError: invalid character in identifier 解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

sklearn(Python机器学习库)介绍

0 引言 Sklearn (全称 Scikit-Learn)是基于Python 编程语言的免费软件机器学习库。 Scikit-learn主要是用Python编写的,它建立在 NumPy, SciPy, Pandas 和 Matplotlib 之上,里面API 的设计非常好,所有对象的接口简单,很适合新手上路。 Scikit-learn与许多其他Python库很好地…

MES系统如何支持多品种小批量生产

MES系统&#xff08;制造执行系统&#xff09;在多品种小批量生产环境中发挥着至关重要的作用。它通过一系列先进的技术手段&#xff0c;提高了生产线的灵活性和效率&#xff0c;从而有效地支持了多品种小批量生产。以下是MES系统如何支持多品种小批量生产的详细分析&#xff1…

【GD32F303红枫派使用手册】第二十九节 USB-IAP升级实验

29.1 实验内容 通过本实验主要学习以下内容&#xff1a; USB IAP升级操作 29.2 实验原理 USB IAP升级本例程中使用的是Custom HID中的IAP设备类&#xff0c;其设备类协议的实现与HID的类似&#xff0c;主要包括GET_REPORT/GET_IDLE/GET_PROTOCOL/SET_REPORT/SET_IDLE/SET_P…

VirtualBox 虚拟机的网络通过宿主机的网络进行冲浪

虚拟机与宿主机通过桥接模式处在同一个网络中 1.说明2.操作步骤2.1.虚拟机设置网络2.2.手动指定虚拟机的IP 1.说明 A.虚拟机 ubuntu-20.04 B.宿主机网络 Wireless LAN adapter WLAN:Connection-specific DNS Suffix . : lanIPv4 Address. . . . . . . . . . . : 192.168.111…

电源管理芯片PMIC的安全策略

1.概述 PMIC作为系统的电源管理模块&#xff0c;其输入电压一般会比较高&#xff0c;为保证芯片自身的安全&#xff0c;PMIC芯片会有独立的安全域&#xff0c;和功能域完全隔离&#xff0c;拥有独立的电压和电流输入&#xff0c;独立的晶振模块&#xff0c;内部运行监控状态机…

谷粒商城笔记-02-项目整体效果展示

这是整个项目的第2集。 主要内容是&#xff1a; 演示了谷粒商城的后台管理系统 演示了商城系统 项目第一阶段[分布式基础篇]的主要内容及这个阶段完成后能达到的技能水平项目第一阶段[分布式高级篇]的主要内容及这个阶段完成后能达到的技能水平项目第一阶段[高可用集群篇]的主…

专利优先权是什么

专利优先权&#xff1a;定义、分类与重要性 在专利的世界中&#xff0c;专利优先权是一个至关重要的概念。它不仅是专利申请人权益的保障&#xff0c;更是确保创新成果得到及时和充分保护的重要工具。 一、专利优先权的定义 专利优先权是指专利申请人就其发明创造第一次在某…

【期末复习】数据库系统概论(附带考点汇总)

第1章.绪论 目录 第1章.绪论1.1. 数据库系统概述1.1.1.基本概念1.1.2.产生和发展 1.2.概念模型1.2.1.三种模型1.2.2.概念模型1.2.3.关系模型 1.3.数据库系统结构1.3.1三级模式结构1.3.2.两级映像与数据独立性 第2章.关系型数据库2.1.关系2.2.关系操作2.2.1.基本关系操作2.2.2.关…

从关键新闻和最新技术看AI行业发展(2024.6.17-6.30第二十六期) |【WeThinkIn老实人报】

写在前面 【WeThinkIn老实人报】旨在整理&挖掘AI行业的关键新闻和最新技术&#xff0c;同时Rocky会对这些关键信息进行解读&#xff0c;力求让读者们能从容跟随AI科技潮流。也欢迎大家提出宝贵的优化建议&#xff0c;一起交流学习&#x1f4aa; 欢迎大家关注Rocky的公众号&…

万界星空科技QMS系统:重塑质量管理新纪元

万界星空科技QMS&#xff08;Quality Management System&#xff09;质量管理系统是一套全面、高效的质量管理工具&#xff0c;旨在帮助企业提升产品质量、优化生产流程、降低质量成本。该系统具备多个具体功能模块&#xff0c;以下是对其主要功能模块的详细介绍&#xff1a; 一…
最新文章