2016-04-26 11 views
1

Ich lade Bilder von einer URL in OpenCV. Einige Bilder sind PNG und haben vier Kanäle. Ich suche nach einer Möglichkeit, den 4. Kanal zu entfernen, falls er existiert.So entfernen Sie den 4. Kanal von PNG-Bildern

Dies ist, wie ich das Bild laden:

def read_image_from_url(self, imgurl): 
    req = urllib.urlopen(imgurl) 
    arr = np.asarray(bytearray(req.read()), dtype=np.uint8) 
    return cv2.imdecode(arr,-1) # 'load it as it is' 

Ich will nicht die cv2.imdecode(arr,-1) ändern, sondern ich möchte, ob das geladene Bild einen vierten Kanal hat zu überprüfen, und wenn ja, es entfernen.

Etwas Ähnliches, aber ich weiß nicht, wie eigentlich den vierten Kanal

def read_image_from_url(self, imgurl): 
    req = urllib.urlopen(imgurl) 
    arr = np.asarray(bytearray(req.read()), dtype=np.uint8) 
    image = cv2.imdecode(arr,-1) # 'load it as it is' 
    s = image.shape 
    #check if third tuple of s is 4 
    #if it is 4 then remove the 4th channel and return the image. 

Antwort

2

Sie benötigen für die Anzahl der Kanäle von img.shape zu überprüfen und dann entsprechend verfahren:

# In case of grayScale images the len(img.shape) == 2 
if len(img.shape) > 2 and img.shape[2] == 4: 
    #convert the image from RGBA2RGB 
    img = cv2.cvtColor(img, cv2.COLOR_BGRA2BGR) 
0

Lesen Sie diese entfernen: http://docs.opencv.org/2.4/modules/highgui/doc/reading_and_writing_images_and_video.html

cv2.imdecode (buf, Fahnen)

wenn Flags < 0 wie in Ihrem Fall (-1) erhalten Sie das Bild wie es ist. Wenn Flags> 0 ist, wird ein 3-Kanal-Bild zurückgegeben. Alphakanal wird entfernt. flags == 0 ergibt ein Graustufenbild

cv2.imdecode(arr,1) sollte zu einem 3-Kanal-Ausgang führen.

+0

Ja, es gibt bestimmte Bilder, die ich als -IS wollen. Deshalb zögere ich, die Flagge zu ändern, aber überprüfe, ob es eine vierte Ebene gibt und entferne sie dann. – Anthony

+0

dann sollten Sie fragen, wie man überprüft, ob es einen 4. Kanal gibt, nicht, wie man ihn entfernt ... – Piglet

+0

Dieses Flag wird auch die Bittiefe beeinflussen, so dass es keine gute Lösung zum Entfernen des Alphakanals ist –