我想通过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等?我该如何设置?
答案 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);