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

Viewing 8 bit RAW image file in openCV

本文关键字:RAW 图像 文件 8位 openCV      更新时间:2023-10-16

我有一个包含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();
}

任何帮助都将非常感激。

谢谢,罗希特

您必须将其转换为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

c++注释:

cv::Mat img(rows,cols,CV_8U,ptrToDat);
cv::imwhow("img",img);
cv::waitkey();

*data应按列保存,否则使用:

cv::Mat img(cols,rows,CV_8U,ptrToDat);
img=img.t();
cv::imwhow("img",img);
cv::waitkey();