我正在尝试将像素数据转换为OpenCV Mat对象

时间:2015-02-25 05:48:19

标签: c++ opencv

我想通过opencv cvShowImage()函数输出原始像素数据。

我有以下代码:

#include <opencv2/highgui/highgui.hpp>

// pdata is the raw pixel data as 3 uchars per pixel
static char bitmap[640*480*3];
memcpy(bitmap,pdata,640*480*3);
cv::Mat mat(480,640,CV_8UC3,bitmap);

std::cout << mat.flags << ", "
          << mat.dims  << ", "
          << mat.rows  << ", "
          << mat.cols  << std::endl;

cvShowImage("result",&mat);

哪个输出:

1124024336, 2, 480, 640

到控制台,但无法使用cvShowImage()输出图像。而是通过消息抛出异常:

OpenCV Error: Bad flag (parameter or structure field) (Unrecognized or unsupported array type) in cvGetMat

我怀疑问题在于我创建mat对象的方式,但是我很难找到关于我应该如何做的更具体的信息。

我不认为CV_8UC3足以描述它来呈现数据数组。是否必须知道数据是RGB还是YUY2等?我该如何设置?

1 个答案:

答案 0 :(得分:1)

尝试使用cv::imshow("result", mat),而不是混合旧的C和新的C ++ API。我希望将Mat投射到CvArr*是问题的根源。

所以,像这样:

#include <opencv2/highgui/highgui.hpp>

// pdata is the raw pixel data as 3 uchars per pixel
static char bitmap[640*480*3];
memcpy(bitmap,pdata,640*480*3);
cv::Mat mat(480,640,CV_8UC3,bitmap);

std::cout << mat.flags << ", "
          << mat.dims  << ", "
          << mat.rows  << ", "
          << mat.cols  << std::endl;

cv::imshow("result", mat);