[FIXED] Wie man mit Maskenbildern in Python umgeht

Ausgabe

Ich habe einige Bilder vom Boden eines Obstgartens, die so aussehen:

image1.png
Geben Sie hier die Bildbeschreibung ein

image2.png
Geben Sie hier die Bildbeschreibung ein

Jetzt möchte ich eine Kastanienregion extrahieren image1.pngund sie dann anziehen image2.png.

Also habe ich mit Adobe Photoshop ein Maskenbild erstellt, und das Ergebnis (als exportiert mask.png) sieht so aus:
Geben Sie hier die Bildbeschreibung ein
Sie können sehen, dass der ausgewählte Bereich eng an den Rand der Kastanie angepasst ist.

Als ich jedoch das exportierte Maskenbild mit Python las, passte die ausgewählte Region nicht mehr zum Rand. Es war ein Rechteck, das so aussah:

result.png
Geben Sie hier die Bildbeschreibung ein

Dies ist, was ich getan habe, als ich die Bilder gelesen und generiert habe result.png.

import numpy as np 
from PIL import Image 
import matplotlib.pyplot as plt 

# read image1.png
image1 = np.array(Image.open('image1.png').convert('RGB'))
# read mask.png
mask = np.array(Image.open('mask.png').convert('RGB')) 

# Boolean indices representing the selected region
region = np.all(img != 255, axis=-1)
# "region" has a shape of (height, width)
# so we have to add an axis corresponding to color channels
region = np.dstack([region, region, region])

plt.imshow(np.where(region, image1, 255))                                                           
plt.axis('off')
plt.savefig('result.png', bbox_inches='tight')

Gibt es ein Tool, mit dem ich das Maskenbild so verwenden kann, wie es ist (nicht wie result.png, sondern wie mask.png)?

Lösung

Sie können OpenCV Python ausprobieren. Technisch gesehen ist Ihr mask.pngBild ein RGBA-Farbbild, wobei RGB für Rot-Grün-Blau und A für Transparenz steht. Wenn Sie verwendet np.array(Image.open('mask.png').convert('RGB'))haben, haben Sie den Transparenzkanal aus dem Bild entfernt.

import numpy as np 
import cv2
import matplotlib.pyplot as plt 

mask = cv2.imread('mask.png', cv2.IMREAD_UNCHANGED)

cv2.imwrite('result.png',mask)


Beantwortet von –
manaclan


Antwort geprüft von –
Clifford M. (FixError Volunteer)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like