2012-06-29 8 views
13

Diciamo che ho due immagini binarie della stessa dimensione. Come trovo l'intersezione tra le due immagini binarie? Solo i pixel della stessa coordinata (posizione) sulle due immagini che sono bianche (grigio - 255) danno dei pixel bianchi sull'immagine di uscita (intersezione).OpenCV - Intersezione tra due immagini binarie

+0

È possibile utilizzare gli operatori '&' e '|', come descritto in http://stackoverflow.com/questions/17961092/how-do-i-do-boolean-operation-on-mat-such-as- Mat3-mat1-mat2 –

risposta

34

È possibile utilizzare cvAnd o cv::bitwise_and sulle due immagini. L'immagine risultante sarà bianca solo dove entrambe le immagini di input sono bianche.

EDIT: Ecco i risultati dell'applicazione cv::bitwise_and, cv::bitwise_or e cv::bitwise_xor sulle immagini binarie:

Queste sono le immagini a due sorgenti:

image 1image 2

Ecco il risultato dell'applicazione cv::bitwise_and:

imgAnd

Ecco il risultato dell'applicazione di cv::bitwise_or:

imgOr

Ecco il risultato dell'applicazione di cv::bitwise_xor:

imgXor

1

Ecco come fare questo in Python (con le immagini di cui sopra) :

import cv2 

img1 = cv2.imread('black_top_right_triangle.png',0) 
img2 = cv2.imread('black_bottom_right_triangle.png',0) 

img_bwa = cv2.bitwise_and(img1,img2) 
img_bwo = cv2.bitwise_or(img1,img2) 
img_bwx = cv2.bitwise_xor(img1,img2) 

cv2.imshow("Bitwise AND of Image 1 and 2", img_bwa) 
cv2.imshow("Bitwise OR of Image 1 and 2", img_bwo) 
cv2.imshow("Bitwise XOR of Image 1 and 2", img_bwx) 
cv2.waitKey(0) 
cv2.destroyAllWindows() 

Se è necessario installare OpenCV per Python, risparmiare tempo seguendo these directions (l'installazione è stata storicamente un bel problema).