4

cv::bitwise_not を double 値の cv::Mat マトリックスにしようとしました。みたいに応募しました

cv::bitwise_not(img, imgtemp);

imgCV_64F0 と 1 のデータです。ただし、imgtemp内部には意味のないデータがすべて含まれています。img0 inは 1 at で imgtemp、1 inimgは 0 at である と予想していimgtempます。double Mat 行列に bitwise_not を適用する方法は? ありがとう

4

3 に答える 3

4

倍精度 (浮動小数点) 値ではなくビット演算を行うという感覚が得られません。指数に対してもビット演算を行うことになります (こちらを参照)。すべてのビットは、0 から 1 へ、またはその逆に反転されます。関数のドキュメント にも、この側面に関する注意事項があります。

浮動小数点入力配列の場合、そのマシン固有のビット表現 (通常は IEEE754 準拠) が演算に使用されます。

あなたが提案したように、ゼロを1に、またはその逆にしたい場合は、次のことができます。

cv::threshold(warpmask, warpmaskTemp,0.5,1.0,THRESH_BINARY_INV)

ドキュメントを参照)(はい、入力と宛先に同じマトリックスを使用できます)。

于 2013-07-23T08:23:48.057 に答える
0

メソッドのシグネチャが間違っているか、メソッドのパラメーターの名前が間違っていると思いますbitwise_not

[bitwise_not() メソッドに関する OpenCV 2.4.6 ドキュメント] によると ( http://docs.opencv.org/modules/core/doc/operations_on_arrays.html#void bitwise_not(InputArray src, OutputArray dst, InputArray mask))

void bitwise_not(InputArray src, OutputArray dst, InputArray mask=noArray())

マスクを使用する場合は、マスクが「bitwise_not」メソッドのオプションであるため、最後の引数である必要があります。

さらに、混乱を避けるために、すべてのデータ型を同じにする必要があります。私が暗示しようとしているのは、ソースと宛先のデータ形式、およびメソッド パラメーターなどの暫定的なデータ形式は同じ形式でなければならないということです。CV_64Fとは別のインエインには装着できません。ここでビー玉を失っていない場合、ビットごとの操作では、単純にするために、すべてのデータを符号なしまたは符号付き整数形式にする必要がある可能性があります。それでも、すべてのタイプを同じにする必要があります。

あなたが得たガベージについては、変数を妥当な値で初期化することが一般的で優れたプログラミング手法だと思います。これは、段階的にデバッグし、失敗した場所の詳細を確認するときに役立ちます。

試してみる。

于 2013-07-23T07:27:00.800 に答える