2016-07-19 10 views
1

cv :: Matに対してブール型の "not"演算を行う簡単な方法があるかどうかを知りたいと思います。これは機能しません:ブール値Not OpenCV 3.1

cv::Mat mat = cv::Mat::ones(3,3, CV_8U); 
cv::Mat mat_not = !mat; 

このように、効果的な、または簡単な方法がありますか?私はこのようなものを使うことに頼るべきです:

cv::Mat mat_not = mat < cv::Mat::ones(3,3,CV_8U); 

ありがとうたくさんありがとう!

EDIT:私はMATLABとC++の間に "not"演算子を混乱させました(私は最初のものを別のものに変換しているので)。これは正常に動作します:

cv::Mat map2 = ~map1; 
+1

ブール値ではない '〜' – Miki

+0

ああ!うん、それは明らかです!これを指摘してくれてありがとう。 MatlabコードをC++に翻訳していたので、混乱しました。 – Cedric

答えて

2

編集:2016年7月20日午後12時30分

私はOPが望んで規則的ではないと私はそれがなどIDLとMATLABのようなもののために異なることに慣れている参照をしかし。

@ cxyzs7、@Cedric、および@Mikiは、C++で演算子を述べたようにされた〜そう...

mat = ~mat; 

あなたがこれまでの要素賢明(例えばビット単位)他の何かをしたい場合ほとんどの時間はalrですそれのために全体的な機能があります。 IE ...

bitwise_not

cv::Mat src; 
src = stuff; 
cv::Mat dst; 

//then call it 
bitwise_not(src,dst); 

あなたは要素ごとに実行したい機能がライブラリに存在しない場合、またはあなたが常に強引な方法で行うことができ、オーバーロード演算子ではない場合。 ..

for(...) { 
    for (...) { 
     dst.at<int>(i,j) = ! src.at<int>(i,j); 
    } 
} 
+1

情報ありがとう! :) BTW、 'bitwise_not(mat1、mat1);'のようなdst行列と同じsrc行列を使うのは安全ですか?ありがとう! – Cedric

+1

まあ、それは完全にクールです。 –

+1

しかし、 'bitwise_not'は' not'ではありません。私はOPが 'not '演算子の後にmat_not = cv :: Mat :: zeros()を必要としていると思った。しかし、 'bitwise_not'は、要素がすべて254に等しい3行3列の行列を与えます。私が間違っているなら、私を訂正してください。 – cxyzs7