1

我有一个原始文件,其中包含 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();
}

任何帮助将不胜感激。

谢谢,罗希特

4

2 回答 2

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。

于 2013-03-09T12:00:10.017 回答
0

c++ 符号:

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

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

cv::Mat img(cols,rows,CV_8U,ptrToDat);
img=img.t();
cv::imwhow("img",img);
cv::waitkey();
于 2013-03-10T07:52:47.733 回答