使用openCV在C ++中查看灰度RAW图像文件

时间:2013-03-10 10:31:16

标签: c++ opencv image-processing grayscale

我有一个原始图像文件,其中包含从第5个字节开始的图像数据。 文件中的每个字节代表8位灰度像素强度。 我已经能够将图像的二进制数据存储在二维无符号字符数组中。

有谁能告诉我如何使用数组或文件在openCV中显示图像?

现在我正在使用此代码:

void openRaw() {
    cv::Mat img(numRows,numCols,CV_8U,&(image[0][0]);
    //img.t();
    cv::imshow("img",img);  
    cv::waitKey();
}

但它显示的是错误的图像。

我也尝试过使用IplImage方法,但我不知道如何将指针传递给那里的源图像。

有人可以为我提供一些代码吗?

谢谢, 乌代

1 个答案:

答案 0 :(得分:0)

“我已经能够将图像的二进制数据存储在二维无符号字符数组中。”

这是你的问题。

opencv将像素数据存储在连续的uchar *中,所以它期望你也一样。

你的2d数组很可能是一个指针数组,它不一样。

所以:代替2d数组,制作1d:

uchar *data = new uchar[rows * cols];

你可以在那里访问单个像素:

uchar pixel = data[y*cols+x];    

然后将数据指针传递给你的cv :: Mat:

cv::Mat img( rows, cols, CV_8U, data );
哦,请不要再使用IplImages(又名1.0 api),不惜一切代价避免使用!