1

5 バイト目以降の画像データを含む raw 画像ファイルがあります。ファイル内の各バイトは、8 ビットのグレースケール ピクセル強度を表します。イメージのバイナリ データを 2 次元の unsigned char 配列に格納できました。

配列またはファイルを使用してopenCVで画像を表示する方法を教えてもらえますか?

現在、私はこのコードを使用しています:

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

しかし、間違った画像を表示しています。

IplImage メソッドも使用してみましたが、そこにソース イメージへのポインターを渡す方法がわかりません。

誰かが私にこれのためのコードを提供できますか?

ありがとう、ウダイ

4

1 に答える 1

1

「画像のバイナリ データを 2 次元の unsigned char 配列に格納できました。」

それがあなたの問題です。

opencv はピクセル データを連続した uchar* に保存するため、同じものを期待します。

あなたの2次元配列はポインタの配列である可能性が最も高く、同じではありません。

そのため: 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) を使用しないでください。絶対に避けてください。

于 2013-03-10T12:10:45.850 に答える