2012-07-18 10 views
6

mam tę maskę:OpenCV bitwise_and + maska ​​

mask

Powiedzmy chciałbym zrobić bitwise_and z innego obrazu, aby wypełnić w Białej to działa:

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

Teraz wynikowy obraz daje coś takiego:

Image + Mask

To jest piękne i eleganckie, ale chciałbym odjąć czerń od wyniku. Widziałem, że bitwise_and również akceptuje 8-bitowy obraz jednokanałowy, nie jestem do końca pewien, co robi. Przypuszczam, że jeśli jest 0, to pozwólmy mu przejść, bo inaczej to zignoruje.

Więc w jaki sposób użyć tej samej maski, aby przekonwertować ją jako obraz 8-bitowy i użyć go do usunięcia czerni z wyniku? Chciałbym tego samego obrazu, ale bez czarnej granicy w zasadzie.

Odpowiedz

7

Rozwiązanie jest dość proste. Ponieważ nie wiedziałem zbyt wiele o bibliotece openCV, nie używałem odpowiedniej funkcji do wykonania zadania. Nadal nie jestem pewien, dlaczego aplikacja uległa awarii podczas przenoszenia maski do metody bitwise_and.

Zasadniczo wszystko co musisz zrobić to:

image.copyTo(dst, mask); 

Spowoduje to skopiowanie obrazu do dst, a nawet obsługiwać szczegóły macie dać mu takie same właściwości jak „obraz”. Po prostu upewnij się, że maska ​​jest 8-bitowym obrazem jednokanałowym. W ten sposób po wywołaniu metody tylko piksele przechodzące przez maskę zostaną skopiowane do dst.

Oto link doc uzyskać więcej informacji: copyTo

0

wystarczy utworzyć nowy obszar roboczy większy niż fox_image

następnie użyć „I” metoda

lub można tłumaczyć czarną część pierwszy obraz na biały: 0 --- 255

, wtedy problem zostałby rozwiązany.