2011-09-30 7 views
0

私は、符号付きchar型とunsigned char型はすべてのプラットフォームで8ビットであるとは保証されませんが、時には8ビット以上です。 もしそうならOpenCvを使ってCV_8Uが常に8ビットであることを確認できますか? 私は8ビットのMatをとり、必要に応じてCV_8SC1要素をucharsに変換し、CV_8UC1をscharに変換する短い関数を書いています。 これはプラットフォームに依存しないことが心配です。何らかの形でコードを修正する必要があります(ただし、方法はわかりません)。8ビットシステムではないCV_8U opencvの行列

P .:同様に、32ビット整数のないマシンでもCV_32Sはどのようにしてintになりますか?

+1

私はあなたがこれについて心配する必要はないと思う - ただOpenCVが基本的な実装を世話するようにする。 CHAR_BIT> 8のプラットフォームは、やや珍しい(通常はDSP)。 sizeof(int)> 4は多少一般的ですが、OpenCVがこれを処理することは間違いありません。 –

+1

実際、OpenCVはia32、amd64、arm(2.3.0以降)プラットフォームでのみ動作すると約束されています。これらのプラットフォームはすべて8ビットのcharと32ビットのintを持っています。 @AndreyKamaev。 –

+0

そして、scharからucharへの変換とviceversaについては、私が書いたコードに頼ることができると思いますか?これらのプラットフォームはすべて2を補完していますか? –

答えて

1

あなたはこれのリファレンスを与えることができますか(それについて聞いたことはありません)?おそらく、cv :: Matの行の最後に追加されるパディングを意味します。パディングは通常使用されないため、問題はありません。特に、インターフェイス関数を使用すると問題はありません。イテレータ(c.f.)。いくつかのコードを投稿すると、実装に実際にこのような問題があった場合はわかります。それらはintlong特定inttypes.hで定義されたもの(例えばint32_tuint32_t)のようなタイプではなく、プラットフォームを、何を使用するため

// template methods for iteration over matrix elements. 
// the iterators take care of skipping gaps in the end of rows (if any) 
template<typename _Tp> MatIterator_<_Tp> begin(); 
template<typename _Tp> MatIterator_<_Tp> end(); 

CV_32Sは常に32ビットの整数です。

関連する問題