it-swarm.com.de

Lebenslauf Fehler öffnen: (-215) scn == 3 || scn == 4 in der Funktion cvtColor

Ich bin derzeit in Ubuntu 14.04 und benutze python 2.7 und cv2.

Wenn ich diesen Code ausführe:

import numpy as np
import cv2

img = cv2.imread('2015-05-27-191152.jpg',0)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

es kehrt zurück:

 File "face_detection.py", line 11, in <module>
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.error: /home/arthurckl/Desktop/opencv-3.0.0-rc1/modules/imgproc/src/color.cpp:7564: error: (-215) scn == 3 || scn == 4 in function cvtColor

Ich habe hier bereits gesucht und in einer Antwort wurde darauf hingewiesen, dass ich mein Foto möglicherweise falsch laden könnte, da es drei Dimensionen haben sollte: Zeilen, Spalten und Tiefe.

Wenn ich die img.shape drucke, werden nur zwei Zahlen zurückgegeben, also muss ich es falsch machen. Aber ich weiß nicht, wie ich mein Foto richtig laden soll.

82
arthurckl

Geben Sie den vollständigen Bildpfad mit einem Schrägstrich an. Es hat den Fehler für mich behoben.

Z.B.

import numpy as np
import cv2

img = cv2.imread('C:/Python34/images/2015-05-27-191152.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

Auch wenn Sie 0 im zweiten Parameter beim Laden des Bildes mit cv2.imread als keine Notwendigkeit, Bild mit cvtColor zu konvertieren, ist es bereits als Graustufenbild geladen, z.

import numpy as np
import cv2

gray = cv2.imread('C:/Python34/images/2015-05-27-191152.jpg',0)
90
AdityaIntwala

Bitte wie folgt einstellen

img = cv2.imread('2015-05-27-191152.jpg',1)     // Change Flag As 1 For Color Image
                                                //or O for Gray Image So It image is 
                                                //already gray
17
Kalarav Parmar
img = cv2.imread('2015-05-27-191152.jpg',0)

Die obige Codezeile liest Ihr Bild in Graustufen, da am Ende eine 0 angehängt ist. Und wenn Sie erneut versuchen, ein bereits graues Bild in ein graues Bild zu konvertieren, wird dieser Fehler angezeigt.

Verwenden Sie also entweder den obigen Stil oder versuchen Sie es mit dem folgenden Code:

img = cv2.imread('2015-05-27-191152.jpg')
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
5
Gurkamal

Zuerst sollten Sie überprüfen, ob das Image im Stammverzeichnis vorhanden ist oder nicht. Dies ist hauptsächlich auf ein Bild mit der Höhe 0 zurückzuführen. Dies bedeutet, dass cv2.imread(imageName) das Bild nicht liest.

4
Farooq Khan

Nur den Namen des Bildes weitergeben, keine Notwendigkeit von 0:

img=cv2.imread('sample.jpg')
4

Ich habe diese Fehlermeldung aus völlig unabhängigen Gründen für die in den anderen Antworten erwähnten Flags 0 oder 1 angezeigt bekommen. Möglicherweise sehen Sie es auch, weil cv2.imread keinen Fehler macht, wenn die übergebene Pfadzeichenfolge kein Bild ist:

In [1]: import cv2
   ...: img = cv2.imread('asdfasdf')  # This is clearly not an image file
   ...: gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
   ...:

OpenCV Error: Assertion failed (scn == 3 || scn == 4) in cv::cvtColor, file C:\projects\opencv-python\opencv\modules\imgproc\src\color.cpp, line 10638
---------------------------------------------------------------------------
error                                     Traceback (most recent call last)
<ipython-input-4-19408d38116b> in <module>()
      1 import cv2
      2 img = cv2.imread('asdfasdf')  # This is clearly not an image file
----> 3 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

error: C:\projects\opencv-python\opencv\modules\imgproc\src\color.cpp:10638: error: (-215) scn == 3 || scn == 4 in function cv::cvtColor

Sie sehen also einen cvtColor Fehler, wenn es sich tatsächlich um einen stillen imread Fehler handelt. Denken Sie daran, wenn Sie das nächste Mal eine Stunde Ihres Lebens mit dieser kryptischen Metapher verschwenden .

Lösung

Möglicherweise müssen Sie überprüfen, ob Ihre Pfadzeichenfolge eine gültige Datei darstellt, bevor Sie sie an cv2.imread Übergeben:

import os


def read_img(path):
    """Given a path to an image file, returns a cv2 array

    str -> np.ndarray"""
    if os.path.isfile(path):
        return cv2.imread(path)
    else:
        raise ValueError('Path provided is not a valid file: {}'.format(path))


path = '2015-05-27-191152.jpg'
img = read_img(path)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

Auf diese Weise geschrieben, wird Ihr Code ordnungsgemäß fehlschlagen.

2
cv2.error: /home/arthurckl/Desktop/opencv-3.0.0-rc1/modules/imgproc/src/color.cpp:7564: error: (-215) scn == 3 || scn == 4 in function cvtColor

Der obige Fehler ist das Ergebnis eines ungültigen Bildnamens oder wenn die Datei nicht im lokalen Verzeichnis vorhanden ist.

img = cv2.imread('2015-05-27-191152.jpg',0)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

Auch wenn Sie das 2. Argument von cv2.imread () als '0' verwenden, wird es bereits in ein Graustufenbild konvertiert.

Der Unterschied zwischen der Konvertierung des Bildes durch Übergabe von 0 als Parameter und der Anwendung der folgenden Parameter:

img = cv2.cvtCOLOR(img, cv2.COLOR_BGR2GRAY) 

ist, dass im Fall img = cv2.cvtCOLOR(img, cv2.COLOR_BGR2GRAY) die Bilder vom Typ 8uC1 und 32sC1 sind.

1
Shikhar Johri

Diese Antwort gilt für Personen, bei denen das gleiche Problem beim Zugriff auf die Kamera auftritt.

import numpy as np
import cv2

cap = cv2.VideoCapture(0)

while(True):
    # Capture frame-by-frame
    ret, frame = cap.read()

    # Our operations on the frame come here
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    # Display the resulting frame
    cv2.imshow('frame',gray)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# When everything done, release the capture
cap.release()
cv2.destroyAllWindows()

Unter Linux:

wenn Sie versuchen, von Ihrem Computer aus auf die Kamera zuzugreifen, liegt höchstwahrscheinlich ein Berechtigungsproblem vor, führen Sie das Skript python= mit Sudo aus, damit es behoben wird.

Sudo python python_script.py

Um zu testen, ob die Kamera zugänglich ist, führen Sie den folgenden Befehl aus.

ffmpeg -f v4l2 -framerate 25 -video_size 640x480 -i /dev/video0 output.mkv 
1
ehivan24

Dieser Code für Benutzer, bei denen das gleiche Problem beim Zugriff auf die Kamera auftritt, kann mit einer Sicherheitsprüfung geschrieben werden.

if ret is True:
   gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
else:
   continue

ODER für den Fall, dass Sie die Kamera schließen oder den Vorgang abbrechen möchten, wenn Probleme mit dem Rahmen selbst auftreten

if ret is True:
   gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
else:
   break

Als Referenz https://github.com/HackerShackOfficial/AI-Smart-Mirror/issues/36

1
Vivek Patwari

Ich habe auch festgestellt, dass CV2 den gleichen Fehler ausgibt, wenn Ihre Webcam nicht richtig geschlossen wurde oder etwas damit arbeitet. Ich musste meinen PC neu starten, damit er wieder funktioniert.

0
MNM

Die einfachste Lösung zur Beseitigung dieses Fehlers war die Ausführung des Befehls

cap.release()
cv2.closeAllWindows()

Das hat bei mir funktioniert und manchmal war ein Neustart des Kernels erforderlich, da alte Prozesse im Hintergrund ausgeführt wurden.

Wenn sich das Bild nicht im Arbeitsverzeichnis befindet, funktioniert es auch nicht, wenn Sie versuchen, die Bilddatei in pwd in demselben Ordner abzulegen, in dem sich der Code befindet. Geben Sie den vollständigen Pfad zur Bilddatei oder zum Ordner an.

Um dieses Problem in Zukunft zu vermeiden, versuchen Sie, mit außergewöhnlicher Handhabung zu codieren, damit das Erfassungsgerät nach dem Beenden des Programms freigegeben wird, wenn aus einem zufälligen Grund eine inkorrekte Beendigung auftritt.

0
Vinay Verma

2015-05-27-191152.jpg << Wenn ich auf Ihr Bildformat zurückblicke, habe ich gelegentlich zwischen .png und .jpg verwechselt und bin auf denselben Fehler gestoßen.

0
Hong Son Nguyen

Folgendes habe ich beobachtet, als ich meine eigenen Bildsätze im Format .jpg Verwendet habe. Beachten Sie, dass das Beispielskript in Opencv doc die folgenden Zeilen undistort und crop the image Enthält:

# undistort
dst = cv2.undistort(img, mtx, dist, None, newcameramtx)

# crop the image
x,y,w,h = roi
dst = dst[y:y+h, x:x+w]
cv2.imwrite('calibresult.jpg',dst)

Wenn wir den Code zum ersten Mal ausführen, führt er die Zeile cv2.imwrite('calibresult.jpg',dst) aus und speichert ein Bild calibresult.jpg Im aktuellen Verzeichnis. Als ich den Code das nächste Mal ausführte, versuchte der Code zusammen mit meinen Beispielbildsätzen, die ich zum Kalibrieren der Kamera im JPG-Format verwendete, auch dieses neu hinzugefügte Bild calibresult.jpg Zu berücksichtigen, aufgrund dessen der Fehler auftrat sprang heraus

error: C:\builds\master_PackSlaveAddon-win64-vc12-static\opencv\modules\imgproc\src\color.cpp:7456: error: (-215) scn == 3 || scn == 4 in function cv::ipp_cvtColor

Was ich getan habe war: Ich habe das neu erzeugte Bild einfach nach jedem Lauf gelöscht oder alternativ den Typ des Bildes geändert, um png oder tiff zu sagen. Das hat das Problem gelöst. Überprüfen Sie, ob Sie calibresult des gleichen Typs eingeben und schreiben. Wenn ja, ändern Sie einfach den Typ.

0
Bhanu Chander

Unter OS X wurde mir klar, dass cv2.imread zwar mit "filename.jpg" umgehen kann, aber "file.name.jpg" nicht verarbeiten kann. Als Anfänger in Python kann ich noch keine Lösung vorschlagen, aber wie François Leblanc schrieb, handelt es sich eher um einen stillen, ungelesenen Fehler.

Es gibt also ein Problem mit einem zusätzlichen Punkt im Dateinamen und wahrscheinlich auch mit anderen Zeichen, wie "" (Leerzeichen) oder "%" und so weiter.

0
Francis

ich denke, weil cv2.imread das .jpg - Bild nicht lesen kann, müssen Sie .jpg in .png ändern.

0
shenmeme