如何快速将C++数组转换为2D opencv Mat对象?
暴力方法是遍历2D矩阵的所有条目,并使用数组的值填充它们。
是否有更好/更快的方法来完成这个任务?
我能否只是将数组的指针传递给2D矩阵?
(我正在使用opencv 2.4.8)
如何快速将C++数组转换为2D opencv Mat对象?
暴力方法是遍历2D矩阵的所有条目,并使用数组的值填充它们。
是否有更好/更快的方法来完成这个任务?
我能否只是将数组的指针传递给2D矩阵?
(我正在使用opencv 2.4.8)
cv::Mat
的文档中可以看到如何实现这一点。这意味着你可以做类似的事情。C++: Mat::Mat(int rows, int cols, int type, void* data, size_t step=AUTO_STEP)
double x[100][100];
cv::Mat A(100, 100, CV_64F, x);
cv::Mat
并使用std::memcpy
进行操作。这样做的话,它会复制数据,可能会慢一些,但数据将由cv::Mat
对象拥有,并在cv::Mat
销毁时被销毁。double x[100][100];
cv::Mat A(100,100,CV_64F);
std::memcpy(A.data, x, 100*100*sizeof(double));
#include <opencv2/opencv.hpp>
int main()
{
// First row contains 3 white pixels
// Second row contains 3 black pixels
uchar temp[2][3] = {{255, 255, 255}, {0, 0, 0}};
cv::Mat mat = cv::Mat(2, 3, CV_8UC1);
// The first element of temp decays to int* data.
// It means that mat.data tracks temp.
mat.data = temp[0];
// Change the upper left pixel to black from temp,
// the change affects mat.
temp[0][0] = uchar(0);
cv::namedWindow("title", cv::WINDOW_NORMAL);
cv::imshow("title", mat);
cv::waitKey();
return 0;
}