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

这篇具有很好参考价值的文章主要介绍了图像练习-矩形4点OpenCV(01)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

源图像

图像练习-矩形4点OpenCV(01),# 【OpenCV_练习】,opencv,计算机视觉,人工智能

结果展示

图像练习-矩形4点OpenCV(01),# 【OpenCV_练习】,opencv,计算机视觉,人工智能文章来源地址https://www.toymoban.com/news/detail-730666.html

代码
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();
}

到了这里,关于图像练习-矩形4点OpenCV(01)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 深度学习图像风格迁移 - opencv python 计算机竞赛

    🔥 优质竞赛项目系列,今天要分享的是 🚩 深度学习图像风格迁移 - opencv python 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分 工作量:3分 创新点:4分 🧿 更多资料, 项目分享: https://gitee.com/danche

    2024年02月04日
    浏览(58)
  • 计算机毕设 python opencv 机器视觉图像拼接算法

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月07日
    浏览(63)
  • 计算机竞赛 opencv python 深度学习垃圾图像分类系统

    🔥 优质竞赛项目系列,今天要分享的是 🚩 opencv python 深度学习垃圾分类系统 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分 工作量:3分 创新点:4分 这是一个较为新颖的竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng-senior/p

    2024年02月13日
    浏览(80)
  • 计算机视觉基础【OpenCV轻松入门】:获取图像的ROI

    OpenCV的基础是处理图像,而图像的基础是矩阵。 因此,如何使用好矩阵是非常关键的。 下面我们通过一个具体的实例来展示如何通过Python和OpenCV对矩阵进行操作,从而更好地实现对图像的处理。 ROI(Region of Interest)是指图像或视频中被选取或感兴趣的特定区域。ROI可以用矩

    2024年02月22日
    浏览(41)
  • 《OpenCV 计算机视觉编程攻略》学习笔记(一:图像编程入门)

    参考引用 OpenCV 计算机视觉编程攻略(第3版) 说明 本书结合 C++ 和 OpenCV 3.2 全面讲解计算机视觉编程 所有代码均在 Ubuntu 系统中用 g++ 编译执行 0. 安装 OpenCV 库 在Ubuntu上安装OpenCV及使用 OpenCV 库分为多个模块 ,常见模块如下 opencv_core 模块包含库的核心功能 opencv_imgproc 模块包

    2024年02月09日
    浏览(52)
  • 计算机竞赛 图像识别-人脸识别与疲劳检测 - python opencv

    🔥 优质竞赛项目系列,今天要分享的是 🚩 基于图像识别的人脸识别与疲劳检测系统 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分 工作量:3分 创新点:5分 🧿 更多资料, 项目分享: https://gitee.co

    2024年02月12日
    浏览(74)
  • Python+OpenCV 零基础学习笔记(4-5):计算机图形基础+Python相对文件路径+OpenCV图像+OpenCV视频

    【2022B站最好的OpenCV课程推荐】OpenCV从入门到实战 全套课程 CSDN标题里个括号对应视频的分P OpenCV+Python CSDN专栏 Gitee 项目地址 Python:3.11.5 Anaconda:23.7.4 IDE:vscode 运行环境:Windows OpenCV:4.8.1 Python+OpenCV 零基础学习笔记(1-3):anaconda+vscode+jupyter环境配置 本节课来了解以下OpenCV的简单使用

    2024年02月03日
    浏览(80)
  • OpenCV处理图像和计算机视觉任务时常见的算法和功能

    当涉及到OpenCV处理图像和计算机视觉任务时,有许多常见的具体算法和功能。以下是一些更具体的细分: 图像处理算法: 图像去噪 :包括均值去噪、高斯去噪、中值滤波等,用于减少图像中的噪声。 直方图均衡化 :用于增强图像的对比度,特别适用于低对比度图像。 边缘

    2024年02月11日
    浏览(43)
  • 计算机竞赛 基于深度学习的人脸性别年龄识别 - 图像识别 opencv

    🔥 优质竞赛项目系列,今天要分享的是 🚩 毕业设计 人脸性别年龄识别系统 - 图像识别 opencv 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分 工作量:3分 创新点:3分 🧿 更多资料, 项目分享: https

    2024年02月10日
    浏览(101)
  • 计算机竞赛 深度学习 opencv python 公式识别(图像识别 机器视觉)

    🔥 优质竞赛项目系列,今天要分享的是 🚩 基于深度学习的数学公式识别算法实现 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分 工作量:4分 创新点:4分 🧿 更多资料, 项目分享: https://gitee.com/d

    2024年02月07日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包