IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> OpenCV 角点排序 demo(C++版) -> 正文阅读

[人工智能]OpenCV 角点排序 demo(C++版)

OpenCV 角点排序 demo(C++版)


前言

?
??OpenCV 中确定矩形 ROI 区域后,可获取矩形区域中四个角点,若进行 solvePnP 测距,角点要一一对应,故需对其进行排序。
??其次,若矩形发生大于90度的旋转(无论顺时针还是逆时针),写死的 “目标实际点位” 便会与 “测得的角点” 发生错位,影响 solvePnP 测距,所以还需考虑矩形某一特定方向上是长轴还是短轴,下面给出角点排序的 demo 与大家交流。


?

一、C++ 角点排序 demo

?

	//********************** 坐标点排序 **********************
	Point2f verticess[4];
	Point2f tempPoint;
	verticess[0] = Point2f(50, 10);
	verticess[1] = Point2f(100, 10);
	verticess[2] = Point2f(100, 30);
	verticess[3] = Point2f(50, 30);

	double longSide, shortSide;    //定义长短边

	// 按x轴坐标从小到大排序
	for (int i = 0; i < 3; i++)
	{
		for (int j = i + 1; j < 4; j++)
		{
			if (verticess[i].x > verticess[j].x)
			{
				tempPoint = verticess[i];
				verticess[i] = verticess[j];
				verticess[j] = tempPoint;
			}
		}
	}

	// 按纵坐标排序,依次排为(): 0左上角   1左下角   2右上角   3右下角
	if (verticess[0].y > verticess[1].y)
	{
		tempPoint = verticess[0];
		verticess[0] = verticess[1];
		verticess[1] = tempPoint;
	}
	if (verticess[2].y > verticess[3].y)
	{
		tempPoint = verticess[2];
		verticess[2] = verticess[3];
		verticess[3] = tempPoint;
	}

	// 输出排序后结果
	for (int i = 0; i < 4; i++)
	{
		cout << "verticess:  " << verticess[i] << endl;

	}

	// 存入Point2f类容器中,以左下角为第一个点,逆时针方向存入
	urelpoints.clear();
	urelpoints.push_back(verticess[1]);
	urelpoints.push_back(verticess[3]);
	urelpoints.push_back(verticess[2]);
	urelpoints.push_back(verticess[0]);

	// 计算长短边,适应两种矩形
	longSide = sqrt(pow(verticess[2].x - verticess[0].x, 2) + pow(verticess[2].y - verticess[0].y, 2));
	shortSide = sqrt(pow(verticess[1].x - verticess[0].x, 2) + pow(verticess[1].y - verticess[0].y, 2));

	cout << "longSide:  " << longSide << endl;
	cout << "shortSide:  " << shortSide << endl;


	// 输出目标容器结果
	for (int i = 0; i < 4; i++)
	{
		cout << "urelpoints :  " << urelpoints[i] << endl;
	}

	
	if (shortSide > longSide)     // 短轴大于长轴,则为竖直方向为长轴的矩形
	{
		// 采用objA

	}
	else 
	{
		// 采用objB

	}

总结

??此博客为 C++版 OpenCV 角点排序,Python版参见本分类其他文章。

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-08-30 12:03:49  更:2021-08-30 12:05:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 17:58:14-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码