2016-03-30 3 views
0

Ich versuche einen umrissenen Bild-Effekt zu erstellen, der ein Bild (oder Video) aufnimmt, die Umrisse findet und sie dann über dem Originalbild als schwarze Linie zeichnet. Ich bin derzeit immer die Umrisse so:OpenCV fügen schwarze Pixel von einer Matte zur anderen hinzu. C++

Mat im = imread(...); 
Mat outline; 
cvtColor(im, outline, COLOR_BGR2GRAY); 
GaussianBlur(outline, outline, Size(15,15),2,2); 
Canny(outline, outline, 0, 30, 3); 
bitwise_not(outline, outline); 
cvtColor(outline,outline, COLOR_GRAY2BGR); 

wie würde ich mich dann darum, sicherzustellen, dass alle Pixel, die zu im hinzugefügt bekommen schwarz sind?

Antwort

2

Sie können setTo mit einer Maske verwenden.

sollten Sie tun:

im.setTo(Scalar(0,0,0), ~outline); 

das heißt: im Bild im, alle Pixel festgelegt, die schwarz in outline bis schwarz sind (Scalar(0,0,0))


Oder Sie können vermeiden bitwise_not verwenden und dann vermeiden, die Maske erneut zu negieren. Der endgültige Code wird wie folgt aussehen:

Mat im = imread(...); 
Mat outline; 
cvtColor(im, outline, COLOR_BGR2GRAY); 
GaussianBlur(outline, outline, Size(15,15),2,2); 
Canny(outline, outline, 0, 30, 3); 

im.setTo(Scalar(0,0,0), outline); 

// or 
// bitwise_not(outline, outline); 
// im.setTo(Scalar(0,0,0), ~outline); 

imshow("Result", im); 
waitKey(); 
+0

Vielen Dank, das war genau das, was ich gesucht habe. Das sieht großartig aus. :) –

+0

Froh, dass es geholfen hat; D – Miki

Verwandte Themen