Opencv(EmguCV)における画像スパンストライドの計算式

EmguCVでは、3チャンネルの画像Image<Bgr,byte>がある場合、画像の幅はWidth=21、高さはHeight=10となり、インターネット上にある計算方法によれば、

公式1:

int stride = width * 3;  
if (stride % 4 != 0)
    stride += 4 - stride % 4; 

        ストライドが 64 であることがわかり、合計バイト数は stride*Height =640 になるはずですが、画像の実際のバイト サイズは 720 であり、矛盾しています。この場合、ストライドの計算方法は次のようになります。

公式2:

int stride = Width * 3;
if (stride% 4 != 0)
    stride += (4 - Width % 4) * 3;

        このように、ストライドは 72 で、Bytes の計算はちょうど 720 になります。これは、インターネット上で言及されているストライドの計算方法と矛盾します。理由は何ですか? 理解できない!

        一部の画像では、式 1 の計算がたまたま正しい場合があります。たとえば、幅が 11、高さが 10 の場合、opencv での画像の実際のバイト サイズは 360 であり、式 1 の結果と一致します。F2も360です。

     では、opencv の Bytes の値は何でしょうか?

     調査の結果、opencv の Bgr のストライドは 12 ビット単位であることが判明したため、計算は
if (stride % 12 != 0) stride += 12 - stride % 12 に従う必要があり、これは上記の式と一致します。の2。現時点では、私の解決策はバイトを使用するのではなく、intptrにバイトを使用し、イメージのビルドにscan0を使用することであるため、問題はありません。


 

おすすめ

転載: blog.csdn.net/whf227/article/details/121752409