如何在c++ opencv中分配矩阵的元素
How to allocate the elements of a matrix in c++ opencv?
我一直使用C API,并试图将一个简单的项目转换为c++ API来处理它,但我似乎无法弄清楚如何在c++中分配矩阵的元素。例如,我有以下数组:
double rotation[] = { 0, 1, 0,
-1, 0, 0,
0, 0, 1 };
我有一个3x3垫子,分配与Mat *rotation_vector = new Mat(3,3, CV_64FC1);
在C中,它就是cvInitMatHeader(rotation_vector, 3, 3, CV_64FC1, rotation);
。这在c++中是如何实现的?
您应该使用cv::Mat对象的一些变体
对于大小已知且固定的小矩阵,可以使用cv:: matrix对象:
cv::Matx33d rotation( 0.0, 1.0, 0.0,
-1.0, 0.0, 0.0,
0.0, 0.0, 1.0 );
对于动态大小的数组,可以使用cv::Mat对象
cv::Mat aBigMatrix( 53, 71, cv::CV_64FC1, cv::Scalar::all( 0.0 ) );
这将创建一个宽度为53,高度为71的2d矩阵,每个元素是64位浮点单通道值(基本上是双精度),所有元素将被设置为0。
或者,您可以使用cv::Mat_模板类,这样做的好处是初始化更简洁(在其他事情中):
cv::Mat_<double> anotherBigMatrix( 53, 71, 0.0 );
这将创建一个与上面描述的相同的矩阵。
最后,您可以使用模板矩阵类和初始化列表,类似于您在常规C中所做的:
使用不同的类有很多权衡,所以你应该确保你阅读了OpenCV文档,以便你选择正确的
如果您只想为已经分配的数据创建一个头,请执行:
cv::Mat rotation_matrix(3, 3, CV_64FC1, rotation)
这将使Mat成为该数据的标头(不会复制数据)。如果你想把它复制到一个新的矩阵,你可以这样做:
cv::Mat new_matrix = rotation_matrix.clone();
您不希望将new
与cv::Mat
一起使用(在几乎所有情况下),它是引用计数数据类型-将其视为智能指针。CvMat*
应该是cv::Mat
(注意缺少*
)。
相关文章:
- 访问动态分配列表中的元素
- 如何为 std::vector 分配内存,然后稍后为某些元素调用构造函数?
- 动态分配列表 - 创建一个函数,用于删除所有包含偶数值的元素
- 是否有具有外部元素分配的序列容器(在 STL 中)?
- C++ 将元素分配给映射值时访问错误
- 如何通过查找迭代器结果分配给一组对的元素
- C++通过别名指针以静默方式将错误的类型分配给数组元素
- c++ 使用动态分配运算符反向数组元素
- 为什么在 c++ 中分配 char 数组元素时,分配的字符会被销毁?
- 在 CPP 中将元素分配给矢量
- 如何将元素分配给向量?
- 并行算法将向量的元素分配到另一个元素的元素
- 无法在重载运算符时将数组元素分配给类变量"="
- 将字符串元素分配给结构数组中的结构
- 为每个循环中的std :: vector的当前元素分配迭代器
- OpenCV:为矩阵元素分配新值
- 将矢量元素分配给字符变量
- 如何拥有一个带有类元素的向量,其中一些元素分配了构造函数参数
- 为什么std::deque在默认构造函数中为它的元素分配内存?
- C++将字符串的元素分配给一个新字符串