图像练习-矩形4点OpenCV(01)

news2024/12/28 4:55:41

提取出里面最大矩形的四个顶点坐标 

源图像

结果展示

代码
void getLine(std::vector<int>& data, int threshold)
{
	for (int x = 0; x < data.size(); x++)
	{
		if (0 == data[x])
		{
			continue;
		}

		int maxValue = 0, maxLoc = -1, i = -1;
		for (i = x; i < data.size(); ++i)
		{
			if (data[i] > maxValue)
			{
				maxValue = data[i];
				maxLoc = i;
			}
			if (data[i] == 0)
			{
				break;
			}
			data[i] = 0;
		}
		x = i;
		data[maxLoc] = 1;
	}
}

void rectangle_vertex_old()
{
	cv::Mat image = cv::imread("rectangle_vertex.jpg", cv::IMREAD_COLOR);

	cv::Mat gray;
	cv::cvtColor(image, gray, cv::COLOR_BGR2GRAY);

	cv::Mat binary = gray < 100;

	//计算x及y方向投影
	std::vector<int> widthHist(binary.cols, -1);
	std::vector<int> heightHist(binary.rows, -1);
	for (int y = 0; y < binary.rows; y++)
	{
		for (int x = 0; x < binary.cols; x++)
		{
			int value = (int)binary.at<uchar>(y, x) / 255.0;
			heightHist[y] = heightHist[y] + value;
			widthHist[x] = widthHist[x] + value;
		}
	}

	int histThreshold = (int)(binary.rows * 0.7);
	//y方向的投影二值化
	for (int y = 0; y < binary.rows; y++)
	{
		if (heightHist[y] < histThreshold)
		{
			heightHist[y] = 0;
		}
	}

	//计算水平线的位置
	getLine(heightHist, histThreshold);

	histThreshold = (int)(binary.cols * 0.7);

	//x方向的投影二值化
	for (int y = 0; y < binary.cols; y++)
	{
		if (widthHist[y] < histThreshold)
		{
			widthHist[y] = 0;
		}
	}

	//计算垂直线的位置
	getLine(widthHist, histThreshold);

	//寻找左上点左下点
	cv::Point ptLeftTop(-1, -1), ptLeftDown(-1, -1);
	for (int x = 0; x < binary.cols; x++)
	{
		if (widthHist[x] == 1)
		{
			for (int y = 0; y < binary.rows; y++)
			{
				if (heightHist[y] == 1)
				{
					ptLeftTop.x = x;
					ptLeftTop.y = y;
				}
			}

			for (int y = binary.rows - 1; y > 0; y--)
			{
				if (heightHist[y] == 1)
				{
					ptLeftDown.x = x;
					ptLeftDown.y = y;
				}
			}
			break;
		}
	}

	//寻找右上点右下点
	cv::Point ptRightTop(-1, -1), ptRightDown(-1, -1);
	for (int x = binary.cols - 1; x > 0; x--)
	{
		if (widthHist[x] == 1)
		{
			for (int y = 0; y < binary.rows; y++)
			{
				if (heightHist[y] == 1)
				{
					ptRightTop.x = x;
					ptRightTop.y = y;
				}
			}

			for (int y = binary.rows - 1; y > 0; y--)
			{
				if (heightHist[y] == 1)
				{
					ptRightDown.x = x;
					ptRightDown.y = y;
				}
			}

			break;
		}
	}

	//画出4个点
	if (ptLeftTop != cv::Point(-1, -1))
	{
		cv::circle(image, ptLeftTop, 4, cv::Scalar(0, 0, 255, 0), 4);
	}
	if (ptLeftDown != cv::Point(-1, -1))
	{
		cv::circle(image, ptLeftDown, 4, cv::Scalar(0, 0, 255, 0), 4);
	}
	if (ptRightTop != cv::Point(-1, -1))
	{
		cv::circle(image, ptRightTop, 4, cv::Scalar(0, 0, 255, 0), 4);
	}
	if (ptRightDown != cv::Point(-1, -1))
	{
		cv::circle(image, ptRightDown, 4, cv::Scalar(0, 0, 255, 0), 4);
	}


	cv::namedWindow("src_old");
	cv::imshow("src_old", image);

	cv::waitKey();
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

普通货架智能改造

系统架构 普通货架亮灯改造 普通货架亮灯改造可以选用&#xff0c;铝合金多色灯条和电子标签&#xff0c;两种形式进行货架智能亮灯改造&#xff1b;其差别在于铝合金多色灯条亮灯改造后&#xff0c;只适用于手持终端扫描校验灭灯&#xff1b;电子标签则可以支持手动确认拍灭…

分布式运用之企业级日志ELFK+logstash的过滤模块

一、ELFK集群部署&#xff08;FilebeatELK&#xff09; 在搭建ELK的基础上安装Filebeat服务&#xff0c;Filebeat服务可以布置在以下任意一台主机&#xff0c;本次实验将布置在apache服务器的节点上 步骤一&#xff1a;安装 Filebeat&#xff08;在apache节点操作&#xff09…

渲染路径RenderingPath

文章目录 前言一、什么是渲染路径二、渲染路径有哪些1、前向渲染路径2、延迟渲染路径3、顶点照明渲染路径(已过时)4、旧的渲染路径&#xff08;已过时&#xff09; 前言 渲染路径RenderingPath 一、什么是渲染路径 为进行光照计算而设计的渲染方式 二、渲染路径有哪些 1、前向…

虹科案例 | ELPRO帮助客户实现符合GDP标准的温度监测和高效的温度数据管理

文章来源&#xff1a;虹科环境监测技术 点击阅读原文&#xff1a;https://mp.weixin.qq.com/s/wwIPx_GK3ywqWr5BABC4KQ 在本案例研究中&#xff0c;虹科ELPRO帮助客户 ● 实施了温度监测解决方案&#xff0c;以一致的数据结构获取各国和各种运输方式的数据; ● 通过将温度数据上…

华为OD机试 - 快递运输 - 送分题(Java 2023 B卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路1、题目描述2、大白话分析 五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题…

邓俊辉《数据结构》→ “2.6.5 二分查找(版本A)”之“成功查找长度”递推式推导

【问题描述】 邓俊辉的《数据结构&#xff08;C语言版&#xff09;&#xff08;第3版&#xff09;》&#xff08;ISBN&#xff1a;9787302330646&#xff09;中&#xff0c;开始于第48页的“2.6.5 二分查找&#xff08;版本A&#xff09;”内容在第50页详述了“成功查找长度”的…

敏捷在建设项目中的应用

敏捷这个概念天然地和软件开发密不可分&#xff0c;因为在2001年由17位软件业的管理大师聚在一起举办一场具有历史里程碑意义的大会&#xff0c;确定了敏捷软件开发宣言和敏捷原则&#xff0c;软件开发就是敏捷的起源之地。 钱亮老师在ShineScrum捷行举办的第五届敏捷论坛&…

vue项目打包部署到服务器,报错。

这个是因为后端部署服务器时&#xff0c;名称没有对上&#xff0c;不是前端的问题&#xff0c;后端配置名称和前端的包名称保持一致就可以了。

pve虚拟lxc安装docker教程

目录 &#xff08;一&#xff09;前提1. 存在的问题2. 解决办法 &#xff08;二&#xff09;安装lxc系统1. 环境2. 镜像3. 安装流程 &#xff08;三&#xff09;ubuntu安装docker1. 不同版本docker介绍&#xff1a;2. 安装docker-ce3. 安装青龙4. 青龙的卸载更新 &#xff08;四…

9.23统计学金融学(第一部分)

泊松分布 某事件在特定时间或空间中发生的次数。比如一天内中奖的个数&#xff0c;一个月内某机器损坏的次数等。 泊松概率的成立条件是在任意两个长度相等的区间中&#xff0c;时间发生的概率是相同的&#xff0c;并且事件是否发生都是相互独立的。 泊松概率既然表示事件在…

Python的安装教程(Windows)

简单理解就两个动作&#xff1a;安装python、安装PyCharm 我们要跟着做&#xff01;&#xff01;&#xff01; 编辑器和编译器 编辑器和编译器是两个不同的概念。编辑器是一种编写代码的工具&#xff0c;方便人对程序的操作和管理。常见的编辑器有文本编辑器、网页编辑器、源…

python回文素数

这能有1和本身整除的整数叫素数&#xff1b;如一个素数从左向右和从右向左是相同的数&#xff0c;则该素数为回文素数。编程求出2-1000内的所有回文素数。 源代码&#xff1a; def sushu(n): for i in range(2,n//21): if n%i 0: return False r…

PZ-3B-70E2A-10、PZ-6B-220E2A-20电控比例压力流量驱动泵放大器

PZ-2B-35E1A-11、PZ-2B-35E2A-11、PZ-2B-35E3A-11、PZ-2B-45E1A-11、PZ-2B-45E2A-11、PZ-2B-45E3A-11、PZ-3B-70E1A-10、PZ-3B-70E2A-10、PZ-3B-70E3A-10、PZ-4B-70E1A-10、PZ-4B-70E2A-10、PZ-4B-70E3A-10、PZ-5B-130E1A-10、PZ-5B-130E2A-10、PZ-5B-130E3A-10、PZ-6B-180E1A-…

MySQL数据库入门到精通5--进阶篇(视图/存储过程/触发器)

4.视图/存储过程/触发器 4.1 视图 4.1.1 介绍 视图&#xff08;View&#xff09;是一种虚拟存在的表。视图中的数据并不在数据库中实际存在&#xff0c;行和列数据来自定义视 图的查询中使用的表&#xff0c;并且是在使用视图时动态生成的。 通俗的讲&#xff0c;视图只保存了…

windows系统将 CMD(命令提示符)添加到鼠标右键菜单

一、新建OpenCMDHere.reg文件 OpenCMDHere.reg Windows Registry Editor Version 5.00[HKEY_CLASSES_ROOT\Directory\Background\shell\OpenCMDHere] "Open CMD Here" "Icon""C:\\WINDOWS\\system32\\cmd.exe"[HKEY_CLASSES_ROOT\Directory\Ba…

相机数据恢复!详细步骤解析(2023新版)

和朋友在外面旅游用相机拍了好多有意义的照片和视频&#xff0c;但是导入电脑后不知道是被我删除了还是什么原因&#xff0c;这些照片都不见了&#xff0c;请问有方法恢复吗&#xff1f;” 在数字摄影时代&#xff0c;我们依赖相机记录珍贵的瞬间。然而&#xff0c;相机数据丢失…

废料出售回收小程序开发制作方案

随着社会对环保意识的提高&#xff0c;废料回收已经成为一项备受关注的社会活动。许多人意识到将废料进行回收不仅可以保护环境&#xff0c;还可以获得一定的经济回报。因此&#xff0c;开发一款废料出售回收小程序具有重要意义。这个小程序将有助于简化废料交易流程&#xff0…

华为云云耀云服务器L实例评测|定时给微信群中推送每日新闻及生活小常识

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂 目录 前言效果图前期准备 前言 你是否遇到过这样的场景&#xff1a; 自己的私域群或粉丝群&#xff0c;为了活跃群内气氛&#xff0c;每日早晨发送热点新闻至群中&#xff0c;供大家讨论自…

OpenHarmony应用分发运营体系

一、分发流程 图片来源&#xff1a;OpenHarmony官网 二、主要途径 更多 开鸿智谷在鸿OS 开发板 设备 润和HiHopeOS 开发板 设备 软通动力SwanLinkOS 开发板 设备 深开鸿KaiHongOS 开发板 设备 华为HarmonyOS AGC 18N 开放原子开源基金会OpenHarmony 底座基础

伯俊ERP与金蝶云星空对接集成表头表体组合查询打通应收单新增

伯俊ERP与金蝶云星空对接集成表头表体组合查询打通应收单新增 数据源平台:伯俊ERP 伯俊科技拥有近千人的团队、出色的本地化服务能力及强劲的研发创新实力&#xff0c;在深耕零售行业24年中&#xff0c;成功研发企业级ERP系统、OMS订单管理系统、门店收银系统、门店管理软硬件一…