在opencv中使用imshow显示字节数组的最快方法是啥?
Posted
技术标签:
【中文标题】在opencv中使用imshow显示字节数组的最快方法是啥?【英文标题】:What is the fastest way to display a byte array using imshow in opencv?在opencv中使用imshow显示字节数组的最快方法是什么? 【发布时间】:2015-04-25 21:13:18 【问题描述】:我有一个指向图像缓冲区(字节数组)的指针,并且我知道行数和列数。在opencv中显示此图像数据的最快方法是什么?请参阅下面的详细信息。
int rows, cols;
unsigned char *ImageBuffer;
if (err = WFS_GetSpotfieldImage(instr.handle, &ImageBuffer, &rows, &cols))
handle_errors(err);
// what goes here to construct "MAT image" using the "ImageBuffer" which is a pointer?
Mat image(rows, cols, CV_8UC3, Scalar(255, 0, 0));
cv::namedWindow("Spot Field", cv::WINDOW_AUTOSIZE);
cv::imshow("Spot Field", image);
【问题讨论】:
“最快的方式”是什么意思?如果你强加这个功能;没有什么可以改变的...... 我的意思是如何将ImageBuffer指向的字节数组转换成Mat格式。使用for循环并根据字节数组中的数据设置Mat图像的像素是否足够快? 试试这个答案:***.com/questions/6924790/… 您只需cout << image;
即可打印其所有数据。
【参考方案1】:
使用这个构造函数:
Mat::Mat(int rows, int cols, int type, void* data, size_t step=AUTO_STEP)
data – 指向用户数据的指针。采用数据和步骤参数的矩阵构造函数不分配矩阵数据。相反,它们只是初始化指向指定数据的矩阵头,这意味着没有数据被复制。此操作非常高效,可用于使用 OpenCV 函数处理外部数据。外部数据不会自动释放,所以你应该注意它。
【讨论】:
谢谢斯图科夫!我发现以下方法比您提到的上述构造函数稍快: Mat image(rows, cols, CV_8UC1, Scalar(0, 0, 0)); for (int y = 0; y (y, x) = temp; 你的方法在创建一个空矩阵的过程中首先分配新的数据,然后将数据重写从缓冲区传输过来的数据。上述方法不会分配所有新数据。以上是关于在opencv中使用imshow显示字节数组的最快方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章
是否可以使用 opencv 的 imshow 显示没有工具栏的图像?