我有一个包含jpeg图像数据的unsigned char*
缓冲区。 我想使用c++和opencv显示该图像。 如果我执行以下操作:
Mat img(Size(640, 480), CV_8UC3, data);
namedWindow("image", 1);
imShow("image", img);
我得到了一个杂乱无序的像素图像。
我想这是因为数据是jpeg格式(带有头文件)。因为这个可以正常工作:
Mat imgbuf(Size(640, 480), CV_8UC3, data);
Mat img = imdecode(imgbuf, CV_LOAD_IMAGE_COLOR);
但是我不能使用imdecode函数,因为它基于GTK 2的highgui.h,而在我的项目中我使用GTK 3。
那么,如何显示缓冲区数据?除了opencv中的imdecode之外,是否有其他方法解码jpeg图像,如果这是问题的原因。 我真的不想重新构建带有Qt的opencv...
还有其他建议吗?
(使用Linux)
libjpeg
进行解码并完成吗?有什么问题吗? - mmgplibjpeg
,那么opencv
将无法加载JPEG
图像,因此不会包括其他库。 - mmgpMat imgbuf(...)
行中,你读入了 640x480x3 字段的数据。由于 JPEG 是压缩的,JPEG 将确实轻松地适应其中。因此剩余的点将填充从内存中随机获取的数据,这非常糟糕。之后,您加载 Mat,其中包括 JPEG 和一堆随机内存数据,并对其进行解码。相反,首先将无符号字符缓冲区放入大小与缓冲区完全相同的向量或 mat 中,然后将其馈送到 imdecode 中。 - TimZamancv::Mat data(1, (int)str.size(), CV_8UC1, (void*)str.c_str());
然后跟着cv::imdecode(data, 0);
- Octo Poulos