web-dev-qa-db-fra.com

Python-OpenCV cv2 Erreur OpenCV: échec de l'assertion (scn == 3 || scn == 4) dans une fonction inconnue, fichier ..\..\..\modules\imgproc\src\color.cpp

J'essaie d'apprendre les contours en python avec cv2.

J'ai essayé le code suivant donné dans un guide de tutoriel:

import cv2
import numpy as np
from matplotlib import pyplot as plt

im = cv2.imread('C:\Users\Prashant\Desktop\test.jpg')
imgray = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
ret,thresh = cv2.threshold(imgray,127,255,0)
image, contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
img = cv2.drawContour(im, contours, -1, (0,255,0), 3)
cv2.imshow('Image1',img)

Je reçois cette erreur:

File "C:\Python27\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 540, in runfile
OpenCV Error: Assertion failed (scn == 3 || scn == 4) in unknown function, file ..\..\..\modules\imgproc\src\color.cpp, line 3402
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
   execfile(filename, namespace)
 File "C:/Users/Prashant/.spyder2/.temp.py", line 15, in <module>
   imgray = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
 cv2.error: ..\..\..\modules\imgproc\src\color.cpp:3402: error: (-215) scn == 3 || scn == 4
24

il indique que votre image d'entrée doit avoir 3 ou 4 canaux avant d'appliquer la fonction cv2.cvtColor.

vérifiez donc la forme de votre image avant d'appliquer la fonction avec print im.shape. Si le résultat est None type (la plupart du temps, il s'agit du problème), votre image n'est pas chargée correctement, probablement parce que votre chemin n'est pas correct.

le point est que votre image doit avoir 3 dimensions, lignes, colonnes et profondeur.

84
Abid Rahman K

1ère impression ret . Si elle indique false, votre image n'est pas prise correctement . Si elle est vraie, essayez cette commande - Sudo modprobe bcm2835-v4l2 .__ ou dans votre fichier/etc/modules, ajoutez bcm2835 -v4l2 en bas.

1
Argha Sen

Si vous obtenez cette erreur sur une caméra Raspberry Pi avec PI, essayez d’exécuter cette commande en premier:

Sudo modprobe bcm2835-v4l2
0
Xerxel