gpt4 book ai didi

c++ - opencv 从缓冲区读取 jpeg 图像

转载 作者:IT老高 更新时间:2023-10-28 21:45:12 27 4
gpt4 key购买 nike

我有一个 unsigned char* 缓冲区,其中包含 jpeg 图像的数据。我想使用 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中解码jpeg图像而不是imdecode,如果这是问题的话。我真的不想用 Qt 重建 opencv...

还有其他建议吗?

(使用 Linux)

最佳答案

我在网上看到很多关于这个问题的回答说你应该直接调用libjpeg并绕过OpenCV的imread()例程。

这不是必需的!您可以使用 imdecode() 从内存中解码原始图像缓冲区。这样做的方法不直观,并且没有足够的文档来帮助第一次尝试这样做的人。

如果您有原始文件数据的指针/大小(fread() 直接来自 .jpg、.png、.tif、文件等...

int    nSize = ...       // Size of buffer
uchar* pcBuffer = ... // Raw buffer data


// Create a Size(1, nSize) Mat object of 8-bit, single-byte elements
Mat rawData( 1, nSize, CV_8UC1, (void*)pcBuffer );

Mat decodedImage = imdecode( rawData /*, flags */ );
if ( decodedImage.data == NULL )
{
// Error reading raw image data
}

就是这样!

希望这对将来的人有所帮助。

关于c++ - opencv 从缓冲区读取 jpeg 图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14727267/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com