Ich versuche, eine grundlegende Farbkonvertierung in Python durchzuführen, aber ich scheine den unten genannten Fehler nicht zu überwinden. Ich habe Python, opencv neu installiert und sowohl Python 3.4.3 (neueste Version) als auch Python 2.7 (die auf meinem Mac installiert ist) ausprobiert.
Ich habe opencv mit pythons Paketmanager opencv-python installiert.
Hier ist der Code, der fehlschlägt:
frame = cv2.imread('frames/frame%d.tiff' % count)
frame_HSV= cv2.cvtColor(frame,cv2.COLOR_RGB2HSV)
Dies ist die Fehlermeldung:
cv2.error: OpenCV(3.4.3) /Users/travis/build/skvark/opencv-python/opencv/modules/imgproc/src/color.cpp:181: error: (-215:Assertion failed) !_src.empty() in function 'cvtColor'
Dieser Fehler ist aufgetreten, weil das Image nicht ordnungsgemäß geladen wurde. Sie haben also ein Problem mit der vorherigen Zeile cv2.imread
. Mein Vorschlag ist:
prüfen Sie, ob die Bilder in dem von Ihnen angegebenen Pfad vorhanden sind
Überprüfen Sie die Zählvariable, wenn er eine gültige Nummer hat
Ich war auch in der gleichen Situation und mein Fall war wegen des koreanischen Buchstabens auf dem Weg ...
Nachdem ich koreanische Buchstaben aus dem Ordnernamen entfernt habe, funktioniert es.
ODER setzen
[#-*- coding:utf-8 -*-]
(außer [ ]
am Rand)
oder so etwas in der ersten Zeile, damit python Koreanisch oder deine Sprache oder ähnliches versteht. Dann funktioniert es auch, wenn in meinem Fall ein paar Koreaner im Pfad sind.
Die Sache ist also, dass es anscheinend etwas über den Pfad oder den Buchstaben gibt. Leute, die geantwortet haben, sagen ähnliche Dinge. Hoffe ihr löst es!
Prüfen Sie, ob es sich um die Datei jpg , png , bmp handelt, die Sie angeben, und schreiben Sie die Erweiterung entsprechend.
In meinem Fall wurde das Bild falsch benannt. Überprüfen Sie, ob das Bild vorhanden ist, und versuchen Sie es
import numpy as np
import cv2
img = cv2.imread('image.png', 0)
cv2.imshow('image', img)
Diesen Fehler habe ich auch immer wieder bekommen:
Traceback (most recent call last):
File "face_detector.py", line 6, in <module>
gray_img=cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.error: OpenCV(4.1.0) C:\projects\opencv-python\opencv\modules\imgproc\src\color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function 'cv::cvtColor
Mein cv2.cvtColor(...)
funktionierte gut mit \photo.jpg
, Aber nicht mit \news.jpg
. Endlich wurde mir klar, dass Sie bei der Arbeit mit Python unter Windows jedes Mal von diesen Escape-Zeichen angesprochen werden !! Daher wurde mein "schlechtes" Foto ausgeblendet, da der Dateiname mit "n" begann. Python nahm den \n
Als Escape-Zeichen und OpenCV konnte die Datei nicht finden!
Lösung:
Vorwort Dateinamen in Windows python mit r"...\...\"
Wie in
cv2.imread(r".\images\news.jpg")
Ich hatte das gleiche Problem und es stellte sich heraus, dass meine Bildnamen enthielten Sonderzeichen (z. B. château.jpg), was mit cv2.imread
Nicht gehandhabt werden konnte. Meine Lösung bestand darin, eine temporäre Kopie der Datei zu erstellen und diese umzubenennen, z. temp.jpg , das problemlos mit cv2.imread
geladen werden konnte.
Hinweis: Ich habe die Leistung von shutil.copy2
Nicht überprüft. Es gibt also wahrscheinlich eine bessere/schnellere Lösung, um eine temporäre Kopie zu erstellen.
import shutil, sys, os, dlib, glob, cv2
for f in glob.glob(os.path.join(myfolder_path, "*.jpg")):
shutil.copy2(f, myfolder_path + 'temp.jpg')
img = cv2.imread(myfolder_path + 'temp.jpg')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
os.remove(myfolder_path + 'temp.jpg')
Wenn nur wenige Dateien mit Sonderzeichen vorhanden sind, kann das Umbenennen auch ausnahmsweise erfolgen, z.
for f in glob.glob(os.path.join(myfolder_path, "*.jpg")):
try:
img = cv2.imread(f)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
except:
shutil.copy2(f, myfolder_path + 'temp.jpg')
img = cv2.imread(myfolder_path + 'temp.jpg')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
os.remove(myfolder_path + 'temp.jpg')
Wenn beim Lesen eines Frames von einer Webcam dasselbe Problem auftritt:
Überprüfen Sie einfach, ob Ihre Webcam für eine andere Aufgabe verwendet wird, und schließen Sie sie. Dies wird das Problem lösen.
Ich habe einige Zeit mit diesem Fehler verbracht, als mir klar wurde, dass meine Kamera in einer Google Hangouts-Gruppe online war.