矩阵乘法是图像处理中非常基本的任务,而OpenCV使用重载*运算符来处理。点的STL vector 可以通过强制转换为Mat。

vector<Point2f> p1(2);
p1[0].x=1;p1[0].y=0;
p1[1].x=0;p1[1].y=1;
Mat p1M=Mat(p1);

如OpenCV文档中所述,这将创建具有单列(包含2个元素)且行等于 vector 个数的矩阵:
[1 0;0 1]------>p1M.rows=2;p1M.cols=1

当您想对矩阵进行乘法运算(p1M * p1M)... [2x1] * [2x1] ??? ......时,基本上,我相信到Matrix的所有转换 vector 都是按原样合并 vector 。 ...

但是,命令p1M.at<float> (0,1)p1M.at<float> (1,0)分别返回0和1。这让我认为p1M * p1M是可能的,但是不幸的是,它只能编译并生成运行时错误:



我正在考虑编写一个函数来做到这一点! Mat的载体,反之亦然...我缺少什么吗?

最佳答案

您可能需要研究cv::Mat::reshape
http://docs.opencv.org/modules/core/doc/basic_structures.html#mat-reshape

从点列表创建垫时,它将为点的每个分量创建一个通道。因此,如果您使用Point3f,它将创建具有3个通道的单列Mat。

您可以尝试通过调用将p1M转换为期望的矩阵

p1M.reshape(1);

09-05 00:34