2017-12-07 22 views
1

Ich versuche ein Gesicht in einem gif-Bild zu erkennen, aber da OpenCV Gif-Formate nicht unterstützt, habe ich PIL-Modul verwendet, um das zu lesen gif-Bild und wandle es wieder in ein numpy Array um OpenCV zu benutzen. Aber damit bekomme ich einen Assertionsfehler.Programmbegegnungen OpenCV Fehler: Assertion fehlgeschlagen (scn == 3 || scn == 4)

Hier ist mein Code unten

import cv2 
import numpy as np 
from PIL import Image 

# get the features and pass it to the Cascade Classifier 
face_cascade = cv2.CascadeClassifier("haarcascade_frontalface_default.xml") 
# read the image 
img = Image.open("mypic.sleepy") 
# check if image exists 
if img is None: 
    raise Exception("could not load image !") 
# represent the image in matrix format for the OpenCV to work on it 
img = np.array(img) 
# convert it to gray scale 
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 

# detect the objects resembling faces 
faces = face_cascade.detectMultiScale(gray,1.5,3) #(image,scale_factor, minm_no_of_neighbours) 
for face in faces: 
    # the detected face is represented in the form of a rectangle 
    x, y, w, h = face 
    # draw a rectangle on the face in the image 
    cv2.rectangle(img, (x,y), (x + w, y + h), (0, 255, 0), 2) 
# show the image 
cv2.imshow("Detected Faces", img) 
# hold the window 
cv2.waitKey(0) 
# destroy all windows 
cv2.destroyAllWindows() 

Dies ist der Fehler, den ich

OpenCV Error: Assertion failed (scn == 3 || scn == 4) in cvtColor, file /home/souvik/opencv-3.3.0/modules/imgproc/src/color.cpp, line 10638 

Die übliche Empfehlung, die ich im Internet gefunden habe Begegnung ist, dass das Bild nicht geladen wird, und das ist, warum es wirft solcher Fehler aber klar in meinem Fall ist das Bild in der Tat geladen sonst würde mein Code eine Ausnahme auslösen.Also, wenn ich versuche, diesen Code

print(img.shape) 
zu starten 10

Ich bekomme einen Wert von (243, 320). Wo gehe ich falsch?

+3

Das Bild, das Sie laden, ist bereits Graustufen (einzelner Kanal). Keine Notwendigkeit, ** in Graustufen zu konvertieren – Miki

+0

@Miki Sie hatten Recht und ich ersetzte es durch ein farbiges Gif-Bild, aber das Problem besteht immer noch! –

+0

Das GIF ist wahrscheinlich farbgemischt, d. H. Einkanalig. Verwenden Sie eine farbige PNG, JPG oder im Grunde alles andere als gif – Miki

Antwort

1

Ich habe versucht, Ihren Code mit verschiedenen Farben gif Bilder und die Verwendung der Face_cascade auf img selbst scheint zu arbeiten. Versuchen Sie, die Graustufenkonvertierung zu kommentieren und zu verwenden

faces = face_cascade.detectMultiScale(img,1.5,3) 
Verwandte Themen