99 votes

Imread retourne None, en violation de l'assertion !_src.empty() dans la fonction 'cvtColor' erreur

Je suis en train de faire une conversion de couleur de base en python cependant je n'arrive pas à dépasser l'erreur ci-dessous. J'ai réinstallé python, opencv et essayé sur python 3.4.3 (le plus récent) et python 2.7 (qui est sur mon Mac).

J'ai installé opencv en utilisant le gestionnaire de paquets de python opencv-python.

Voici le code qui échoue :

frame = cv2.imread('frames/frame%d.tiff' % count)
frame_HSV= cv2.cvtColor(frame,cv2.COLOR_RGB2HSV)

Voici le message d'erreur :

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'

0 votes

Je vais supposer que vos images sont étiquetées 01, 02, et ainsi de suite et non pas 1, 2, ... mais c'est ce que vous mettez. Si c'est le cas, mettez %02d (ce qui signifie que vous voulez des zéros de tête et que le nombre doit être long de 2 chiffres).

2voto

waeiski Points 35

Une autre chose qui pourrait causer cela est un symbole 'étrange' dans vos noms de fichiers et de dossiers. Tous les caractères umlaut (äöå) et autres (éóâ, etc.) doivent être supprimés des noms de fichiers et de dossiers. J'ai parfois rencontré le même problème à cause de ces caractères.

2voto

Karthik Sanka Points 77
  • Il y a probablement une erreur lors du chargement de l'image, essayez de vérifier à nouveau le répertoire.
  • Imprimez l'image pour confirmer si elle a effectivement été chargée ou non

1voto

henryoats Points 159

Dans mon cas, l'image était mal nommée. Vérifiez si l'image existe et essayez

import numpy as np
import cv2

img = cv2.imread('image.png', 0)
cv2.imshow('image', img)

1voto

sdh4967 Points 21

J'ai été dans la même situation également, et mon cas était à cause de la lettre coréenne dans le chemin...

Après avoir retiré les lettres coréennes du nom du dossier, cela fonctionne.

Ou bien mettre

[#-*- coding:utf-8 -*-]

(sauf [ ] au bord)

ou quelque chose comme ça dans la première ligne pour que python comprenne le coréen ou votre langue, etc. alors cela fonctionnera même s'il y a des coréens dans le chemin dans mon cas.

Donc, il semble y avoir quelque chose à propos du chemin ou de la lettre. Les personnes qui ont répondu disent des choses similaires. J'espère que vous résoudrez ça!

0voto

Peter Points 234

J'avais le même problème et il s'est avéré que mes noms d'images contenaient des caractères spéciaux (par exemple château.jpg), qui ne pouvaient pas être gérés par cv2.imread. Ma solution a été de faire une copie temporaire du fichier, en le renommant par exemple temp.jpg, qui pouvait être chargée par cv2.imread sans aucun problème.

Remarque : Je n'ai pas vérifié les performances de shutil.copy2 par rapport aux autres options. Probablement qu'il existe une meilleure solution/plus rapide pour faire une copie temporaire.

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')

S'il n'y a que quelques fichiers avec des caractères spéciaux, le renommage peut aussi être fait comme une exception, par exemple

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')

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X