2016-07-19 7 views
1

Ich würde gerne wissen, ob es eine einfache Möglichkeit gibt, eine boolesche "Nicht" -Operation auf einem cv :: Mat zu machen. Dies funktioniert nicht:Boolean Nicht in OpenCV 3.1

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

Gibt es einen effektiven oder einfachen Weg, dies zu tun? Sollte ich etwas wie das verwenden:

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

Vielen Dank!

EDIT: Ich habe den "nicht" Operator zwischen MATLAB und C++ verwechselt (da ich die erste in die andere übersetze). Dies funktioniert gut:

cv::Mat map2 = ~map1; 
+1

boolean nicht ist '~' – Miki

+0

Oh! Ja, das ist offensichtlich! Danke, dass du darauf hingewiesen hast. Übersetzen Matlab-Code in C++, es hat mich verwirrt! – Cedric

Antwort

2

Edit: 12.30 7/20/2016

ich die op sehen nicht regelmäßig will und ich bin für Dinge wie IDL und MatLab usw. zu diesem unterschiedlich verwendet .

Als @ cxyzs7, @Cedric und @Miki den Operator in C++ erwähnt ist ~ so ...

mat = ~mat; 

Allerdings, wenn Sie jemals tun weise etwas anderes Element wollen (eine bitweise zum Beispiel) die meiste Zeit gibt es schon Dafür gibt es eine ganze Funktion. IE ...

bitwise_not

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

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

Wenn die Funktion, die Sie durch das Element wollen Element tun, ist nicht existent in der Bibliothek oder ist keine überladene Operator immer kann es die Brute-Force-Weg tun. ..

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

Danke für die Info! :) BTW, ist es sicher, die selbe src Matrix wie die dst Matrix zu verwenden, wie zum Beispiel 'bitwise_not (mat1, mat1);'? Vielen Dank! – Cedric

+1

Ja, das ist total cool. –

+1

Aber 'bitwise_not' ist nicht' not'. Ich dachte, dass das OP nach dem "nicht" -Operator mat_not = cv :: Mat :: zeros() will. Aber 'bitwise_not' würde eine 3 mal 3 Matrix mit einem Element von 254 ergeben, oder? Korrigiere mich, wenn ich falsch liege. – cxyzs7

Verwandte Themen