2012-07-18 14 views
6

tengo esta máscara:OpenCV bitwise_and + enmascarar

mask

Digamos que me gustaría hacer una bitwise_and con otra imagen para rellenar el blanco esto funciona:

cv::bitwise_and(srcImage, mask, dstImage, [mask???]); 

Ahora, la imagen resultante da algo como esto:

Image + Mask

Esto está bien y elegante, pero me gustaría restar el negro del resultado. Lo he visto a bitwise_y también acepta una imagen de canal único de 8 bits, no estoy exactamente seguro de lo que hace. Supongo que si es 0, deja que pase, de lo contrario lo ignora.

Entonces, ¿cómo usaría la misma máscara para convertirla como una imagen de 8 bits y la usaría para eliminar el negro del resultado? Me gustaría la misma imagen, pero sin el borde negro en esencia.

Respuesta

7

La solución es bastante simple. Como no sabía mucho sobre la biblioteca openCV, no estaba usando la función correcta para la tarea. Todavía no estoy seguro de por qué la aplicación se colgó al pasar una máscara al método bitwise_and.

En esencia todo lo que tiene que hacer es la siguiente:

image.copyTo(dst, mask); 

Esto copiará la imagen para el horario de verano e incluso manejar los detalles de la alfombra para darle las mismas propiedades que la 'imagen'. Solo tienes que asegurarte de que la máscara sea una imagen de canal único de 8 bits. De esta forma, cuando llame al método, solo los píxeles que pasen la máscara se copiarán a dst.

Aquí está el enlace doc para obtener más información: copyTo

0

acaba de crear un nuevo lienzo más grande que el fox_image

entonces utilizar “Y” método

o, se puede traducir la parte en negro de la primera imagen en blanco: 0 --- 255

entonces, el problema estaría resuelto.