【问题标题】:OpenCV 2.4 : C API for converting cvMat to IplImageOpenCV 2.4:用于将 cvMat 转换为 IplImage 的 C API
【发布时间】:2018-03-20 09:53:47
【问题描述】:

我在 cvMat 对象中有一个 YUYV 图像缓冲区(如下所示的 sn-p)。我必须将此 cvMat 对象转换为 IplImage 以进行颜色转换。

CvMat cvmat = cvMat(480, 640, CV_8UC2, yuyv_buff);

我尝试使用以下选项将此 cvmat 对象转换为 IplImage 对象(src:https://medium.com/@zixuan.wang/mat-cvmat-iplimage-2f9603b43909)。

//cvGetImage()
CvMat M;
IplImage* img = cvCreateImageHeader(M.size(), M.depth(), M.channels());
cvGetImage(&M, img); //Deep Copy

//Or
CvMat M;
IplImage* img = cvGetImage(&M, cvCreateImageHeader(M.size(), M.depth(), M.channels()));

//cvConvert()
CvMat M;
IplImage* img = cvCreateImage(M.size(), M.depth(), M.channels());
cvConvert(&M, img); //Deep Copy

但没有任何效果。 cvGetImage()cvConvert() 期望 cvArr* 作为输入。将&cvmat 传递给他们会引发异常。

在 OpenCV 2.4 中有没有其他方法可以将 CvMat 对象转换为 IplImage 对象?

注意:我不能使用 C++ API 或任何其他版本的 OpenCV。我仅限于使用 OpenCV 2.4

编辑 1:我的目标是将此 YUYV 缓冲区转换为 RGB 图像对象。

【问题讨论】:

  • 我从未尝试过向后转换,但我怀疑M.data 会为您提供所需的数组。
  • 尝试传递 M.data,仍然 OpenCV 抛出异常。 terminate called after throwing an instance of 'cv::Exception'. what(): /build/<path>/modules/core/src/array.cpp:2791: error: (-206) in function cvGetImage
  • 我能够直接从 yuyv 图像缓冲区创建 IplImage,而不是创建 cvMat,如下所示:IplImage* frame = cvCreateImage(cvSize(640,480), IPL_DEPTH_8U, 2); frame->imageData=(char*)yuyv_buffer;

标签: opencv iplimage opencv-mat


【解决方案1】:

我可以直接从 yuyv 图像缓冲区创建一个IplImage,而不是创建cvMat,如下所示:

IplImage* frame = cvCreateImage(cvSize(640,480), IPL_DEPTH_8U, 2); 
frame->imageData=(char*)yuyv_buffer;

【讨论】:

    猜你喜欢
    • 2011-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-04
    • 2011-06-12
    • 1970-01-01
    • 1970-01-01
    • 2012-03-08
    相关资源
    最近更新 更多