0

OpenCV で使用されるデフォルト (ピクセル) のストレージ形式は何ですか?

BGRなのはわかっていますが、BGR32ですか?BGR16? パックされていますか、それとも平面ですか?

それを見つける方法を教えてもらえますか?

ご協力ありがとうございました。

[編集] コンテキスト : 実際、MIL (Matrox Imaging Library) と呼ばれる別のライブラリで OpenCV を使用しようとしています。MIL でイメージを取得し、それを OpenCV イメージに変換する必要があります。そのため、MIL を構成するには、デフォルトのピクセル形式を知る必要があります。

4

2 に答える 2

3

イメージ フォーマットは、イメージを作成するときにフラグによって設定されます。たとえばCV_8UC3、8 ビット ピクセル、符号なし、3 色チャネルを意味します。カラー イメージでは、ピクセルの順序は BGR であり、データは行の順序で格納されます。

データはピクセル レベルではパックされません - 3 バイト/ピクセルです (BGRA は一部の GPU 呼び出しのオプションです)。

行内のピクセル数 * バイト/ピクセル数が 4 の倍数でない場合、データはライン レベルでパックされる可能性があり、データは次の 32 ビット境界までゼロでパディングされます。呼び出し mat.ptr(n) は、「n」番目の行の先頭へのポインターを返します

データ ポインターを MIL イメージから cv::Mat の ctor に渡すことにより、別の互換性のあるイメージ フォーマットとメモリを共有できることに注意してください。

于 2013-07-03T14:48:55.987 に答える
1

イメージの管理方法によって異なります。たとえば、imread を使用してファイルからイメージをロードしましたか? imread hereを見てください。たとえば、カラー jpeg を使用すると、3 チャネル形式、全体で 24 ビットになります。もっと具体的に言えますか?

役に立つかどうかはわかりませんが、イメージを Android Bitmap (バイト配列 RGBA8888 として OpenCV に渡される) から OpenCV イメージ (BGR888) に変換するときに、同様の問題が発生しました。これが私がそれを解決した方法です。

cv::Mat orig_image1(orig_height, orig_width, CV_8UC4, image_data);   

int from_to[] = { 0, 2,  1, 1,  2, 0};    
cv::Mat image(orig_height, orig_width, CV_8UC3);   
cv::mixChannels(&orig_image1, 1, &image, 1, from_to, 3);
orig_image1.release();
于 2013-07-03T13:02:39.187 に答える