web-dev-qa-db-fra.com

OpenCV TypeError: cv :: UMat attendu pour l'argument 'src' - Qu'est-ce que c'est?

Avertissement: énorme noob openCV

Traceback (dernier appel le plus récent):

Fichier "lanes2.py", ligne 22, en

canny = canny(lane_image)

Fichier "lanes2.py", ligne 5, en canny

gray = cv2.cvtColor(imgUMat, cv2.COLOR_RGB2GRAY)

TypeError: cv :: UMat attendu pour l'argument 'src'

À quoi fait exactement "src"?

17
autonocat

src est le premier argument de cv2.cvtColor.

L'erreur que vous obtenez est parce que ce n'est pas le bon formulaire. cv2.Umat() est fonctionnellement équivalent à np.float32(), donc votre dernière ligne de code devrait se lire:

gray = (np.float32(imgUMat), cv2.COLOR_RGB2GRAY)
14
Varun Mathur
gray = cv2.cvtColor(cv2.UMat(imgUMat), cv2.COLOR_RGB2GRAY)

UMat fait partie de la API transparente (TAPI) qui aide à écrire un code pour les implémentations CPU et OpenCL.

8
Nuzhny

Les éléments suivants peuvent être utilisés à partir de numpy:

import numpy as np 
image = np.array(image)
3
Avi Avidan

Ce n'est pas votre code qui pose problème c'est parfaitement bien:

gray = cv2.cvtColor(imgUMat, cv2.COLOR_RGB2GRAY)

Le problème est que imgUMat est None donc vous avez probablement fait une erreur lors du chargement de votre image:

imgUMat = cv2.imread("your_image.jpg")

Je soupçonne que vous venez de saisir le mauvais chemin d'image.

3
Maximilian

canny est-il votre propre fonction? Utilisez-vous Canny d'OpenCV à l'intérieur? Si oui, vérifiez si vous fournissez un argument approprié pour Canny - le premier Canny argument doit répondre aux critères suivants:

  • tapez: <type 'numpy.ndarray'>
  • dtype: dtype('uint8')
  • étant un canal unique ou simplement: niveaux de gris, qui est un tableau 2D, c'est-à-dire que son shape devrait être 2 -Tuple de ints (Tuple contenant exactement 2 entiers)

Vous pouvez le vérifier en imprimant respectivement

type(variable_name)
variable_name.dtype
variable_name.shape

Remplacez variable_name Par le nom de la variable que vous introduisez comme premier argument dans Canny.

1
Daweo

Parfois, j'ai cette erreur lorsque videostream de imutils le paquet ne reconnaît pas le cadre ou ne donne pas de cadre vide. Dans ce cas, la solution déterminera pourquoi vous avez une mauvaise image ou utilisez une méthode VideoCapture (0) standard à partir d'opencv2

0
Oysiyl

Ajoutez simplement ceci au début: image = cv2.imread (image)

0
Amar Sagat

J'ai contourné cela en écrivant/lisant un fichier. J'ai deviné que cv.imread le mettrait dans le format dont il avait besoin. Ce code pour le programme anki Vector SDK mais vous avez l'idée.

tmpImage = robot.camera.latest_image.raw_image.save ('temp.png')
pilImage = cv.imread ('temp.png')

0
Geo

Il s'agit d'une erreur générale, qui se produit parfois, lorsque vous avez une incompatibilité entre les types de données que vous utilisez. Par exemple, j'ai essayé de redimensionner l'image avec opencv, cela a donné la même erreur. Ici est une discussion à ce sujet.

0
Hazarapet Tunanyan

mais comment faites-vous cela avec cifar-10? je lis le fichier andtrying pour le convertir en hsv mais ne fonctionne pas. m'a donné la même erreur: '' '
Elif self.type == 'cifar-10': data = [] labels = [] print ("Reading") for file_ in tqdm (listdir (self.root_dir)): if file_.split (' _ ') [0] ==' data ': dict = unpickle (join (self.root_dir, file_)) data.extend (dict [b'data']) labels.extend (dict [b'labels ']) data = cv2. cvtColor (données, cv2. COLOR_RGB2HSV) '' '

0
vanetoj