【发布时间】:2018-12-13 12:59:25
【问题描述】:
我是OpenCV 的新手。我有一个unsigned char 大小为5038848 的数组来创建一个Image of 1944*2592 什么是从该一维数组制作图像的最快方法。
我已经使用Nested Loop 完成了这项工作,但我认为创建单个帧需要很多时间。
那么谁能告诉另一个比这更快的解决方案。
【问题讨论】:
标签: c++ arrays image opencv mat
我是OpenCV 的新手。我有一个unsigned char 大小为5038848 的数组来创建一个Image of 1944*2592 什么是从该一维数组制作图像的最快方法。
我已经使用Nested Loop 完成了这项工作,但我认为创建单个帧需要很多时间。
那么谁能告诉另一个比这更快的解决方案。
【问题讨论】:
标签: c++ arrays image opencv mat
您可以创建一个空的Mat 并将数据设置为您的数组。
unsigned char* array = ...
img = cv::Mat(1944,2592, CV_8U);
img.data = array;
cv::imshow('My image', img);
cv::waitKey()
更快的方法是使用您的数据直接创建Mat。这样,在创建对象时不会分配数据指针。它也可能更安全,因为您不直接操作内部数据指针。
img = cv::Mat(1944, 2592, CV_8U, array);
【讨论】:
Mat 对象也会将其解释为二维。
IntPtr 作为参数来使用现有数据创建图像。在 C++ 中确实有相同类型的构造函数,您可以使用它来代替我展示的方法。