3

2942584 などの大きな整数を cv Mat に入れるのに苦労しています。それを受け入れる唯一のタイプは CV_8UC1 でしたが、値を 2942584 から 120 に変更します (明らかに 8 ビットで)。

しかし、とにかく cv Mat に元の値を持つことはありますか??

これが役立つ場合の簡単なコードは次のとおりです。

Mat matrix(6,10,CV_8UC1);
matrix.at<char>(0,0) = 2942584;
cout << (int)matrix.at<char>(0,0);

出力:

120
4

1 に答える 1

7

マトリックスを定義するときCV_8UC1、すべての要素が 8 ビットでなければならないことを定義します。つまり、0 から 255 までの値しか格納できないということです。大きな数を使用する場合は、行列をCV_32UC1forunsigned integersまたはCV_32SC1forとして定義する必要がありますsigned integersintまた、代わりに値を保存しchar、適切な方法で読み取る必要があります。

より正しいコードは

Mat matrix(6,10,CV_32SC1); 
matrix.at<int>(0,0) = 2942584;
cout << (int)matrix.at<int>(0,0);

もう1つ:行列要素の形式は次のとおりです

CV_<NUMBER_OF_BITS><SIGNED/UNSIGNED>C<NUMBER_OF_CHANNELS>
于 2012-08-26T18:59:11.923 に答える