[英]OpenCV create Mat from Array in heap
我尝试使用在堆上分配的数组初始化Mat对象时遇到问题。
这是我的代码:
void test(){
int rows = 2;
int cols = 3;
float **P_array;
P_array = new float*[rows];
int i;
for(i = 0; i < rows; i++)
P_array[i] = new float[cols];
P_array[0][0]=1.0; P_array[0][1]=2.0; P_array[0][2]=3.0;
P_array[1][0]=4.0; P_array[1][1]=5.0; P_array[1][2]=6.0;
float P_array2[2][3]={{1.0,2.0,3.0},{4.0,5.0,6.0}};
Mat P_m = Mat(rows, cols, CV_32FC1, &P_array);
Mat P_m2 = Mat(2,3, CV_32FC1, &P_array2);
cout << "P_m: " << P_m << endl;
cout << "P_m2: " << P_m2 << endl;
}
结果如下:
P_m: [1.1737847e-33, 2.8025969e-45, 2.8025969e-45;
4.2038954e-45, 1.1443695e-33, -2.2388967e-06]
P_m2: [1, 2, 3;
4, 5, 6]
如您所见,动态分配的数组未成功复制。 但是,对我而言,能够从动态分配的数组进行初始化至关重要。
我该怎么办?
谢谢你的帮助。
opencv Mat想要连续的内存,其内部表示只是一个uchar *。
如果您需要使用动态内存对其进行初始化,则只需使用单个 float指针即可:
float *data = new float[ rows * cols ];
data[ y * cols + x ] = 17; // etc.
Mat m(rows, cols, CV_32F, data);
同样,在完成Mat之前,请确保您的数据指针不会被删除/超出范围。 在这种情况下,您需要将其clone()以获得深拷贝:
Mat n = m.clone();
delete[] data; // safe now.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.