复数操作
在opencv中,我们会用到坐标的加减运算。也就是复数加法了。
当做的运算量小,可以用Point的运算符重载来完成加减法。
但如果有大量的复数运算怎么办呢?
可以把Mat的元素设置为Point来完成。
以下有两个例子,分别用了Point 和 Point2d。
Point 是int型二维坐标,Point2d是double型二维坐标。
下面就是一个调用Mat中Point2d元素的例子。
void complex_test1()
{
Mat x1 = Mat(1,3,CV_64FC2);
x1.ptr<Point2d>(0)[0] = Point2d(2,3);
x1.ptr<Point2d>(0)[1] = Point2d(4,0);
x1.ptr<Point2d>(0)[2] = x1.ptr<Point2d>(0)[0] + x1.ptr<Point2d>(0)[1];
cout << "Matrix x1:" << x1 << endl;
}
为了书写方便,可以使用Mat_辅助类
代码可简化为:
void complex_test2()
{
Mat x1_ = Mat(1,3,CV_32SC2);
Mat_<Point> x1 = x1_;
x1(0,0) = Point(2,3);
x1(0,1) = Point(4,0);
x1(0,2) = x1(0,0) + x1(0,1);
cout << "Matrix x1:" << x1 << endl;
}
这里x1(0,0) 就是x1_.ptr<Point>(0)[0]
以上两个函数的结果为: