在openCV中查看8位RAW图像文件

时间:2013-03-09 11:56:23

标签: c++ opencv image-processing binary-data

我有一个原始文件,其中包含5个字节的标头,每个字节包含前两位的行数和列数。第5个字节包含图像中每个像素的位数,在所有情况下都是8位。之后是图像数据。

由于我是openCV的新手,我想问一下如何使用C ++将此RAW图像文件视为灰度图像?

我知道如何在C ++中读取二进制数据并将图像存储为二维无符号字符数组(因为每个像素为8位)。

有人可以告诉我如何使用openCV将此数据视为图像吗?

我正在使用以下代码,但获得了一个非常奇怪的图像:

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

非常感谢任何帮助。

谢谢, 罗希特

1 个答案:

答案 0 :(得分:1)

您必须将其转换为IplImage。

如果你想把它看作纯灰度图像,它实际上相当容易。

我在一个应用程序中使用的示例代码:

CvSize mSize;
mSize.height = 960;
mSize.width = 1280;

IplImage* image1 = cvCreateImage(mSize, 8, 1);
memcpy( image1->imageData, rawDataPointer, sizeOfImage);
cvNamedWindow( "corners1", 1 );
cvShowImage( "corners1", image1 );

此时你有一个有效的IplImage,然后你可以显示它。 (最后两行代码显示)

如果图像是拜耳平铺的,则必须转换为RGB。