1

行数と列数をそれぞれ最初の 2 ビットに含む 5 バイトのヘッダーを含む raw ファイルがあります。5 番目のバイトには、画像内の各ピクセルのビット数が含まれており、すべての場合で 8 ビットです。その後に画像データが続きます。

私はopenCVを初めて使用するので、C++を使用してこのRAW画像ファイルをグレースケール画像として表示する方法を尋ねたいですか?

私は C++ でバイナリ データを読み取る方法を知っており、画像を 2 次元の unsigned char 配列として保存しました (各ピクセルは 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 が得られます。(コードの最後の 2 行に表示されます)

画像がベイヤー タイルの場合は、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 に答える