OpenCV Point类型操作

本文详细介绍了OpenCV中二维和三维点类的各种操作方法,包括构造函数的使用、成员函数访问、点乘运算、十字相乘及点是否在矩形内的判断等,并通过实例演示了如何在代码中应用这些操作。

1,常用操作总结 

操作例子
默认构造函数cv::Point2i p;
cv::Point3f p;
赋值构造函数cv::Point3f p2(p1);
带参构造函数cv::Point2i p(x0,x1);
cv::Point3f p(x0,x1,x2);
转换为Vec3f类型cv::Vec3f p;
成员对象的访问p.x,p.y;对于三维影像则 p.z
点乘float value=p1.dot(p2);
双精度点乘float value=p1.ddot(p2);
十字相乘crossp1.cross(p2);仅仅适用于三维点
判断点是否在矩阵内p.inside(r);仅仅适用与二维点

2、使用的例子

//包含OpenCV的头文件
//参照github https://github.com/yoyoyo-yo/Gasyori100knock 
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace  std;
//使用OpenCV的命名空间
using namespace cv;
//Point 类型操作 类型
int main()
{
	//1.默认构造函数
	Point2i p1;//数据为[0,0]
	Point3f p2;//数据为[0,0,0]
	cout << p1 << '\n' << p2 << endl;

	//2.赋值构造函数
	Point3f p3(1, 2,3);//数据为[1,2,3]
	Point3f p4(p3);//数据为[1,2,3]
	cout << p3 << "\n" << p4 << endl;

	//3,带参数的构造函数
	Point2i p5(1, 2);//数据为[1,2]
	Point3f p6(1.1, 1.2, 1.3);//数据为[1.1,1.2,1.3]
	cout << p5 << '\n' << p6 << endl;

	//4,隐式类型转换,转换为Vec3f
	Vec3f v = p6;//数据为[1.1,1.2,1.3]
	cout << v << endl;

	//5,成员函数访问
	cout << p5.x << '\t' << p5.y << endl;
	cout << p6.x << '\t' << p6.y << '\t' << p6.z << endl;

	//6.点乘 --可以用来计算两个向量之间的夹角
	Point3f p7(2.0f, 3.0f, 4.0f);
	float value = p6.dot(p7);
	cout << value << endl;
	
	//7.十字相乘 仅仅适用与三维点影像
	//结果返回两个向量的垂直向量
	Point3f p8(1, 0, 0);//x方向的单位向量
	Point3f p9(0, 1, 0);//Y方向的单位向量
	Point3f p10 = p8.cross(p9);//计算出来的Z方向的单位向量
	cout << p10 << endl;

	//8.判断点是否在矩阵内 仅仅适用与二维点
	Rect2f r(0,0,1,1);//注意,这个构造函数是(x,y,width,height)X坐标系向右为正,Y坐标系向上为正
	Point2f p(0.5, 0.5);
	bool bValue = p.inside(r);//返回为true
	p.x = 2;
	bValue = p.inside(r);//返回为false
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值