我一直使用C API,并试图将一个简单的项目转换为C++ API来获取它的句柄,但我似乎无法弄清楚如何在C++中分配矩阵的元素.例如,我有以下数组:
double rotation[] = { 0, 1, 0,
-1, 0, 0,
0, 0, 1 };
Run Code Online (Sandbox Code Playgroud)
我有一个3x3垫,分配 Mat *rotation_vector = new Mat(3,3, CV_64FC1);
在C中,它只是cvInitMatHeader(rotation_vector, 3, 3, CV_64FC1, rotation);.这是如何在C++中完成的?
你应该使用cv :: Mat对象的一些变体.
对于已知并修复了大小的小矩阵,可以使用cv :: Matx对象:
cv::Matx33d rotation( 0.0, 1.0, 0.0,
-1.0, 0.0, 0.0,
0.0, 0.0, 1.0 );
Run Code Online (Sandbox Code Playgroud)
对于动态大小的数组,可以使用cv :: Mat对象
cv::Mat aBigMatrix( 53, 71, cv::CV_64FC1, cv::Scalar::all( 0.0 ) );
Run Code Online (Sandbox Code Playgroud)
这将创建一个宽度为53,高度为71的2d矩阵,每个元素是64位浮点单通道值(基本上是一个双精度值),并且所有元素都将设置为0.
或者,您可以使用cv :: Mat_模板类,其好处是更简洁的初始化(除其他外):
cv::Mat_<double> anotherBigMatrix( 53, 71, 0.0 );
Run Code Online (Sandbox Code Playgroud)
这将创建与上述矩阵等效的矩阵.
最后,您可以将模板矩阵类与初始化列表一起使用,类似于在常规C中执行此操作的方式:
使用不同的类有许多权衡,因此您应该确保阅读OpenCV文档,以便选择正确的类