Actualmente estoy en Ubuntu 14.04, usando python 2.7 y cv2.
Cuando ejecuto este código:
import numpy as np
import cv2
img = cv2.imread('2015-05-27-191152.jpg',0)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
vuelve:
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
Ya busqué aquí y una respuesta decía que podría estar cargando mi foto de manera incorrecta, porque debería tener 3 dimensiones: filas, columnas y profundidad.
Cuando imprimo img.shape, devuelve solo dos números, por lo que debo estar haciéndolo mal. Pero no sé la forma correcta de cargar mi foto.
img = cv2.imread('2015-05-27-191152.jpg',0)
el parámetro 0 ya carga su imagen como una imagen en escala de grises de 1 canal. Así que pruebeimg = cv2.imread('2015-05-27-191152.jpg')
ogray = cv2.imread('2015-05-27-191152.jpg',0)
eche un vistazo a diferentes banderas en: docs.opencv.org/modules/highgui/doc/….../eclipse\ footage/...
) en mi camino. Entonces, agregar un...,0)
no lo solucionó.Respuestas:
Proporcione la ruta completa de la imagen con una barra inclinada. Me solucionó el error.
P.ej
Además, si da el
0
segundo parámetro mientras carga la imagen usandocv2.imread
que no es necesario convertir la imagen usandocvtColor
, ya está cargada como imagen en escala de grises, por ejemplo.fuente
Establecer como se muestra a continuación
fuente
La línea de código anterior lee su imagen en el modelo de color en escala de grises, debido al 0 que se adjunta al final. Y si vuelve a intentar convertir una imagen ya gris en una imagen gris, se mostrará ese error.
Entonces, use el estilo anterior o pruebe el código que se menciona a continuación:
fuente
Solo pase el nombre de la imagen, no es necesario
0
:fuente
Lo primero que debe verificar es si la imagen existe en el directorio raíz o no. Esto se debe principalmente a la imagen con altura = 0. Lo que significa que
cv2.imread(imageName)
no está leyendo la imagen.fuente
cv2.cvtColor
un marco vacío.Me apareció este mensaje de error, por razones completamente ajenas a las banderas 0 o 1 mencionadas en las otras respuestas. Es posible que también lo esté viendo porque no se
cv2.imread
producirá un error si la cadena de ruta que pasa no es una imagen:Entonces, está viendo una
cvtColor
falla cuando en realidad es unimread
error silencioso . Tenga esto en cuenta la próxima vez que vaya a perder una hora de su vida con esa metáfora críptica .Solución
Es posible que deba verificar que su cadena de ruta represente un archivo válido antes de pasarlo a
cv2.imread
:Escrito de esta manera, su código fallará correctamente.
fuente
Esta respuesta es para las personas que experimentan el mismo problema al intentar acceder a la cámara.
Usando Linux:
Si está intentando acceder a la cámara desde su computadora, lo más probable es que haya un problema de permisos, intente ejecutar el script de Python con sudo, debería solucionarlo.
Para probar si se puede acceder a la cámara, ejecute el siguiente comando.
fuente
El error anterior es el resultado de un nombre de imagen no válido o si el archivo no existe en el directorio local.
Además, si está utilizando el segundo argumento de cv2.imread () como '0', entonces ya está convertido en una imagen en escala de grises.
La diferencia entre convertir la imagen pasando 0 como parámetro y aplicando lo siguiente:
es que, en el caso
img = cv2.cvtCOLOR(img, cv2.COLOR_BGR2GRAY)
, las imágenes son imágenes de tipo 8uC1 y 32sC1.fuente
Este código para aquellos que están experimentando el mismo problema al intentar acceder a la cámara podría escribirse con una verificación de seguridad.
O en caso de que desee cerrar la cámara / descontinuar si habrá algún problema con el marco en sí
Para referencia https://github.com/HackerShackOfficial/AI-Smart-Mirror/issues/36
fuente
Esto es lo que observé cuando usé mis propios conjuntos de imágenes en
.jpg
formato. En el script de muestra disponible en el documento Opencv , tenga en cuenta que tiene las líneasundistort
ycrop the image
como se muestra a continuación:Entonces, cuando ejecutamos el código por primera vez, ejecuta la línea
cv2.imwrite('calibresult.jpg',dst)
guardando una imagencalibresult.jpg
en el directorio actual. Entonces, cuando ejecuté el código la próxima vez, junto con mis conjuntos de imágenes de muestra que usé para calibrar la cámara en formato jpg, el código también trató de considerar esta imagen recién agregadacalibresult.jpg
debido a la cual apareció el errorLo que hice fue: simplemente eliminé esa imagen recién generada después de cada ejecución o, alternativamente, cambié el tipo de imagen para decir
png
otiff
escribir. Eso resolvió el problema. Compruebe si está ingresando y escribiendocalibresult
del mismo tipo. Si es así, simplemente cambie el tipo.fuente
En OS XI me di cuenta de que, si bien cv2.imread puede manejar "filename.jpg", no puede procesar "file.name.jpg". Siendo un novato en Python, todavía no puedo proponer una solución, pero como escribió François Leblanc, es más un error de lectura silencioso.
Por lo tanto, tiene un problema con un punto adicional en el nombre del archivo y probablemente también con otros signos, como con "" (Espacio) o "%", etc.
fuente
También encontré que si su cámara web no se cerró bien o si algo la está usando, entonces CV2 dará este mismo error. Tuve que reiniciar mi PC para que volviera a funcionar.
fuente
La solución más simple para eliminar ese error fue ejecutar el comando
Eso funcionó para mí y, a veces, también fue necesario reiniciar el kernel debido a que los procesos antiguos se ejecutaban en segundo plano.
Si la imagen no está en el directorio de trabajo, tampoco funcionará para eso, intente colocar el archivo de imagen en pwd en la misma carpeta, ya que hay código; de lo contrario, proporcione la ruta completa al archivo o carpeta de imagen.
Para evitar este problema en el futuro, intente codificar con un manejo excepcional, de modo que si ocurre una terminación incorrecta por alguna razón aleatoria, el dispositivo de captura se libere después de que el programa termine.
fuente
2015-05-27-191152.jpg << Mirando hacia atrás en su formato de imagen, ocasionalmente confundí entre .png y .jpg y encontré el mismo error.
fuente
lo creo porque
cv2.imread
no puedo leer la.jpg
imagen, necesitas cambiar.jpg
a.png
.fuente