Je suis actuellement dans Ubuntu 14.04, en utilisant python 2.7 et cv2.
Quand j'exécute ce code:
import numpy as np
import cv2
img = cv2.imread('2015-05-27-191152.jpg',0)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
il renvoie:
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
J'ai déjà cherché ici et une réponse disait que je pourrais charger ma photo dans le mauvais sens, car elle devrait avoir 3 dimensions: lignes, colonnes et profondeur.
Lorsque j'imprime le fichier img.shape, il ne renvoie que deux nombres, donc je dois me tromper. Mais je ne sais pas comment charger ma photo.
img = cv2.imread('2015-05-27-191152.jpg',0)
le paramètre 0 charge déjà votre image en tant qu'image en niveaux de gris à 1 couche. Alors essayezimg = cv2.imread('2015-05-27-191152.jpg')
ougray = cv2.imread('2015-05-27-191152.jpg',0)
jetez un œil à différents drapeaux sur: docs.opencv.org/modules/highgui/doc/….../eclipse\ footage/...
) sur mon chemin. Donc, l'ajout d'un...,0)
n'a pas résolu le problème.Réponses:
Donnez le chemin complet de l'image avec une barre oblique. Cela a résolu l'erreur pour moi.
Par exemple
De plus, si vous donnez
0
en deuxième paramètre lors du chargement de l'image en utilisantcv2.imread
que pas besoin de convertir l'image en utilisantcvtColor
, il est déjà chargé en tant qu'image en niveaux de gris par exemple.la source
Veuillez définir comme ci-dessous
la source
La ligne de code ci-dessus lit votre image dans le modèle de couleur en niveaux de gris, à cause du 0 ajouté à la fin. Et si vous essayez à nouveau de convertir une image déjà grise en image grise, cette erreur s'affichera.
Utilisez donc le style ci-dessus ou essayez le code ci-dessous:
la source
Seul passe le nom de l'image, pas besoin de
0
:la source
La première chose que vous devez vérifier est que l'image existe dans le répertoire racine ou non. Ceci est principalement dû à l'image avec une hauteur = 0. Ce qui signifie que
cv2.imread(imageName)
ne lit pas l'image.la source
cv2.cvtColor
une image vide.J'ai vu ce message d'erreur apparaître, pour des raisons totalement indépendantes des indicateurs 0 ou 1 mentionnés dans les autres réponses. Vous le voyez peut-être aussi car
cv2.imread
il n'y aura pas d' erreur si la chaîne de chemin que vous lui transmettez n'est pas une image:Vous voyez donc un
cvtColor
échec alors qu'il s'agit en fait d'uneimread
erreur silencieuse . Gardez cela à l'esprit la prochaine fois que vous perdrez une heure de votre vie avec cette métaphore cryptique .Solution
Vous devrez peut-être vérifier que votre chaîne de chemin représente un fichier valide avant de le transmettre à
cv2.imread
:Écrit de cette façon, votre code échouera normalement.
la source
Cette réponse est destinée aux personnes rencontrant le même problème qui tentent d'accéder à la caméra.
Utilisation de Linux:
si vous essayez d'accéder à la caméra depuis votre ordinateur, il y a probablement un problème d'autorisation, essayez d'exécuter le script python avec sudo, cela devrait le résoudre.
Pour tester si la caméra est accessible, exécutez la commande suivante.
la source
L'erreur ci-dessus est le résultat d'un nom d'image non valide ou si le fichier n'existe pas dans le répertoire local.
De plus, si vous utilisez le 2ème argument de cv2.imread () comme «0», il est déjà converti en une image en niveaux de gris.
La différence entre la conversion de l'image en passant 0 comme paramètre et l'application de ce qui suit:
c'est que, dans le cas
img = cv2.cvtCOLOR(img, cv2.COLOR_BGR2GRAY)
, les images sont des images de type 8uC1 et 32sC1.la source
Ce code pour ceux qui rencontrent le même problème en essayant d'accéder à la caméra pourrait être écrit avec un contrôle de sécurité.
OU au cas où vous voudriez fermer l'appareil photo / arrêter s'il y a un problème avec le cadre lui-même
Pour référence https://github.com/HackerShackOfficial/AI-Smart-Mirror/issues/36
la source
Voici ce que j'ai observé lorsque j'ai utilisé mes propres ensembles d'images au
.jpg
format. Dans l'exemple de script disponible dans Opencv doc , notez qu'il a les lignesundistort
etcrop the image
comme ci-dessous:Ainsi, lorsque nous exécutons le code pour la première fois, il exécute la ligne d'
cv2.imwrite('calibresult.jpg',dst)
enregistrement d'une imagecalibresult.jpg
dans le répertoire courant. Ainsi, lorsque j'ai exécuté le code pour la prochaine fois, avec mes exemples de jeux d'images que j'ai utilisés pour calibrer la caméra au format jpg, le code a également essayé de prendre en compte cette image nouvellement ajoutée encalibresult.jpg
raison de laquelle l'erreur est apparueCe que j'ai fait, c'est: j'ai simplement supprimé cette image nouvellement générée après chaque exécution ou j'ai changé le type d'image à dire
png
ou àtiff
taper. Cela a résolu le problème. Vérifiez si vous entrez et écrivezcalibresult
du même type. Si tel est le cas, changez simplement le type.la source
Sur OS XI réalisé, que si cv2.imread peut traiter "filename.jpg", il ne peut pas traiter "file.name.jpg". Étant novice en python, je ne peux pas encore proposer de solution, mais comme l'écrit François Leblanc, il s'agit plutôt d'une erreur de lecture silencieuse.
Il a donc un problème avec un point supplémentaire dans le nom de fichier et probablement d'autres signes également, comme avec "" (Espace) ou "%" et ainsi de suite.
la source
J'ai également constaté que si votre webcam ne se fermait pas correctement ou si quelque chose l'utilisait, CV2 donnera la même erreur. J'ai dû redémarrer mon ordinateur pour qu'il fonctionne à nouveau.
la source
La solution la plus simple pour supprimer cette erreur consistait à exécuter la commande
Cela a fonctionné pour moi et parfois le redémarrage du noyau était nécessaire en raison d'anciens processus s'exécutant en arrière-plan.
Si l'image ne se trouve pas dans le répertoire de travail, elle ne fonctionnera pas non plus pour cela, essayez de placer le fichier image dans pwd dans le même dossier car il y a du code, sinon fournissez le chemin complet du fichier image ou du dossier.
Pour éviter ce problème à l'avenir, essayez de coder avec une gestion exceptionnelle de sorte que si une résiliation incorrecte se produit pour une raison aléatoire, le périphérique de capture soit libéré une fois le programme terminé.
la source
2015-05-27-191152.jpg << En regardant le format de votre image, j'ai parfois confondu .png et .jpg et j'ai rencontré la même erreur.
la source
Je pense que parce que je ne
cv2.imread
peux pas lire l'.jpg
image, vous devez changer.jpg
pour.png
.la source