Sto cercando una funzione in OpenCV per aiutarmi a fare le maschere di immagini.funzione di OpenCV simile a MATLAB di "trovare"
ad esempio in MATLAB:
B (A < 1) = 0;
o
B = zeri (dimensione (A));
B (A == 10) = c;
Sto cercando una funzione in OpenCV per aiutarmi a fare le maschere di immagini.funzione di OpenCV simile a MATLAB di "trovare"
ad esempio in MATLAB:
B (A < 1) = 0;
o
B = zeri (dimensione (A));
B (A == 10) = c;
Alcune funzioni permettono di passare mask
argomenti a loro. Per creare maschere il modo in cui lei descrive, penso che tu sia dopo Cmp or CmpS che sono operatori di confronto, che consente di creare maschere, in confronto ad un altro array o scalare. Per esempio:
im = cv.LoadImageM('tree.jpg', cv.CV_LOAD_IMAGE_GRAYSCALE)
mask_im = cv.CreateImage((im.width, im.height), cv.IPL_DEPTH_8U, 1)
#Here we create a mask by using `greater than 100` as our comparison
cv.CmpS(im, 100, mask_im, cv.CV_CMP_GT)
#We set all values in im to 255, apart from those masked, cv.Set can take a mask arg.
cv.Set(im, 255, mask=mask_im)
cv.ShowImage("masked", im)
cv.WaitKey(0)
originale im
:
im
dopo l'elaborazione:
OpenCV C++ supporta la seguente sintassi si potrebbe trovare conveniente nel maschere creando:
Mat B= A > 1;//B(A<1)=0
o
Mat B = A==10;
B *= c;
che dovrebbe essere equivalente a:
B=zeros(size(A));
B(A==10)=c;
È anche possibile utilizzare compare()
. Vedere il seguente OpenCV Documentation.
Avreste idea del perché il risultato di (matrice == 1) si tradurrebbe in quei valori che sono 1 nella matrice di origine essendo 255 nella matrice di uscita? –
OpenCV ha un concetto chiamato mascheramento. La convenzione è che una maschera binaria è implementata usando i caratteri 0-> 0 e 1-> 255. Quindi la risposta migliore è che 255 viene reindirizzato per nessun motivo speciale diverso dalla convenzione. Si noti che quando si utilizza una maschera nelle funzioni OPenCV non è necessario attenersi a questa convenzione. Qualsiasi numero compreso tra 1-255 è vero e 0 è falso. –
Grazie! Sì, mi rendo conto che 255 valuterà come vero, ma in MATLAB è comune sommare gli 1 nell'output della matrice binaria. Ero confuso dal fatto che stavo ottenendo numeri enormi perché tutti erano 255. Lo terrò a mente. Grazie ancora. –
Grazie! esattamente quello che stavo cercando :) –