OpenCV TypeError: cv::UMat esperado para el argumento ‘src’ – ¿Qué es esto?

3 minutos de lectura

avatar de usuario
autonomo

Descargo de responsabilidad: gran novato de openCV

Rastreo (llamadas recientes más última):

Archivo “lanes2.py”, línea 22, en

canny = canny(lane_image)

Archivo “lanes2.py”, línea 5, en canny

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

TypeError: se esperaba cv::UMat para el argumento ‘src’

¿A qué se refiere exactamente ‘src’?

  • Eso no es suficiente información para depurar el error. En breve, src se refiere a la matriz/imagen de entrada que pasa a la función.

    – Quang Hoang

    18 de enero de 2019 a las 7:58

avatar de usuario
Varun Mathur

src es el primer argumento para cv2.cvtColor.

El error que está recibiendo es porque no es la forma correcta. cv2.Umat() es funcionalmente equivalente a np.float32()por lo que su última línea de código debería decir:

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

avatar de usuario
Nuzhni

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

UMat es parte de la API transparente (TAPI) que ayudar a escribir un código para las implementaciones de CPU y OpenCL.

  • esto me dio este error UMat() missing required argument 'ranges' (pos 2)

    – Amit Sharma

    12 mayo 2021 a las 23:37


  • @AmitSharma: Entonces probablemente imgUMat no es valido ndarrayprobablemente, solo None.

    – Alexei Birukov

    15 de enero a las 21:28

avatar de usuario
Avi Avidan

Se puede utilizar lo siguiente de numpy:

import numpy as np 
image = np.array(image)

  • esto funcionó para mí (python3.7). el trazado de la imagen fue exitoso y la imagen no parecía corrupta de ninguna manera. pero aún recibí este error cuando intenté usar cv2.resize(image, (1280, 720)). problema resuelto después de convertir a ndarray usando numpy como se muestra arriba.

    – Avi Avidan

    13 de septiembre de 2019 a las 8:33


  • Problema importante: ndarray debe ser contiguo, por lo que debe copiarlo en algunos casos, o obtendrá exactamente el error del título del tema. O mejor aún, usa np.ascontiguousarray(imgUMat) como se sugiere en esta respuesta: stackoverflow.com/a/68436015/4094574

    – Alexei Birukov

    15 de enero a las 21:18

No es su código el problema, esto está perfectamente bien:

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

El problema es que imgUMat es None entonces probablemente cometiste un error al cargar tu imagen:

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

Sospecho que acaba de ingresar la ruta de imagen incorrecta.

avatar de usuario
amar sagat

Solo agrega esto al inicio:

image = cv2.imread(image)

Es canny tu propia función? Lo usas Astuto de OpenCV dentro de él? En caso afirmativo, compruebe si proporciona un argumento adecuado para Canny – primero Canny argumento debe cumplir con los siguientes criterios:

  • escribe: <type 'numpy.ndarray'>
  • tipo de d: dtype('uint8')
  • siendo un solo canal o simplemente: escala de grises, esa es una matriz 2D, es decir, su shape debería ser 2-tuple de ints (tuple que contiene exactamente 2 enteros)

Puede verificarlo imprimiendo respectivamente

type(variable_name)
variable_name.dtype
variable_name.shape

Reemplazar variable_name con el nombre de la variable que alimentas como primer argumento para Canny.

avatar de usuario
Hazarapet Tunanyan

Este es un error general, que aparece a veces, cuando tienes discordancia entre los tipos de datos que utiliza. Por ejemplo, traté de cambiar el tamaño de la imagen con opencv, dio el mismo error. Aquí es una discusión al respecto.

¿Ha sido útil esta solución?