Atualmente estou no Ubuntu 14.04, usando python 2.7 e cv2.
Quando executo 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)
retorna:
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á pesquisei aqui e uma resposta disse que posso estar carregando minha foto do jeito errado, pois ela deveria ter 3 dimensões: linhas, colunas e profundidade.
Quando imprimo o img.shape ele retorna apenas dois números, então devo estar fazendo errado. Mas não sei a maneira correta de carregar minha foto.
img = cv2.imread('2015-05-27-191152.jpg',0)
o parâmetro 0 já carrega sua imagem como uma imagem em tons de cinza de 1 canal. Portanto, experimenteimg = cv2.imread('2015-05-27-191152.jpg')
ougray = cv2.imread('2015-05-27-191152.jpg',0)
dê uma olhada em sinalizadores diferentes em: docs.opencv.org/modules/highgui/doc/….../eclipse\ footage/...
) no meu caminho. Portanto, adicionar um...,0)
não corrigiu.Respostas:
Forneça o caminho completo da imagem com barra. Isso resolveu o erro para mim.
Por exemplo
Além disso, se você fornecer o
0
segundo parâmetro ao carregar a imagem usando docv2.imread
que não precisar converter a imagem usandocvtColor
, ela já será carregada como imagem em tons de cinza, por exemplo.fonte
Defina como abaixo
fonte
A linha de código acima lê sua imagem em um modelo de cores em tons de cinza, por causa do 0 anexado no final. E se você tentar novamente converter uma imagem já cinza em uma imagem cinza, esse erro será mostrado.
Portanto, use o estilo acima ou tente o código abaixo mencionado:
fonte
Passe apenas o nome da imagem, sem necessidade de
0
:fonte
A primeira coisa que você deve verificar é se a imagem existe no diretório raiz ou não. Isso se deve principalmente à imagem com altura = 0. O que significa que
cv2.imread(imageName)
não está lendo a imagem.fonte
cv2.cvtColor
para o quadro vazio.Esta mensagem de erro foi exibida por motivos totalmente não relacionados aos sinalizadores 0 ou 1 mencionados nas outras respostas. Você pode estar vendo isso também, porque não
cv2.imread
ocorrerá um erro se a string do caminho que você passar não for uma imagem:Portanto, você está vendo uma
cvtColor
falha quando, na verdade, é umimread
erro silencioso . Lembre-se disso da próxima vez que perder uma hora de sua vida com essa metáfora enigmática .Solução
Pode ser necessário verificar se a string do caminho representa um arquivo válido antes de passá-lo para
cv2.imread
:Escrito dessa forma, seu código falhará normalmente.
fonte
Esta resposta se aplica às pessoas com o mesmo problema ao tentar acessar a câmera.
Usando Linux:
Se você está tentando acessar a câmera de seu computador, provavelmente há um problema de permissão, tente executar o script python com sudo para corrigir isso.
Para testar se a câmera está acessível, execute o seguinte comando.
fonte
O erro acima é o resultado de um nome de imagem inválido ou se o arquivo não existe no diretório local.
Além disso, se você estiver usando o segundo argumento de cv2.imread () como '0', então ele já foi convertido em uma imagem em escala de cinza.
A diferença entre converter a imagem passando 0 como parâmetro e aplicando o seguinte:
é que, no caso
img = cv2.cvtCOLOR(img, cv2.COLOR_BGR2GRAY)
, as imagens são imagens do tipo 8uC1 e 32sC1.fonte
Este código para aqueles que estão enfrentando o mesmo problema ao tentar acessar a câmera pode ser escrito com uma verificação de segurança.
OU caso você queira fechar a câmera / descontinuar se houver algum problema com o próprio quadro
Para referência https://github.com/HackerShackOfficial/AI-Smart-Mirror/issues/36
fonte
Aqui está o que observei quando usei meus próprios conjuntos de imagens no
.jpg
formato. No script de amostra disponível no documento Opencv , observe que ele possui as linhasundistort
ecrop the image
conforme abaixo:Portanto, quando executamos o código pela primeira vez, ele executa a linha
cv2.imwrite('calibresult.jpg',dst)
salvando uma imagemcalibresult.jpg
no diretório atual. Então, quando executei o código da próxima vez, junto com meus conjuntos de imagens de amostra que usei para calibrar a câmera no formato jpg, o código também tentou considerar esta imagem recém-adicionadacalibresult.jpg
devido à qual o erro apareceuO que fiz foi: simplesmente apaguei a imagem recém-gerada após cada execução ou, alternativamente, alterei o tipo de imagem para dizer
png
outiff
digitar. Isso resolveu o problema. Verifique se você está inserindo e escrevendocalibresult
do mesmo tipo. Nesse caso, basta alterar o tipo.fonte
No OS XI percebi que, embora cv2.imread possa lidar com "nomedoarquivo.jpg", ele não pode processar "arquivo.nome.jpg". Sendo um novato em python, ainda não posso propor uma solução, mas como François Leblanc escreveu, é mais um erro de leitura silencioso.
Portanto, ele tem um problema com um ponto adicional no nome do arquivo e provavelmente outros sinais também, como com "" (Espaço) ou "%" e assim por diante.
fonte
Também descobri que se sua webcam não fecha direito ou algo está usando, então o CV2 vai dar o mesmo erro. Tive que reiniciar meu pc para fazê-lo funcionar novamente.
fonte
A solução mais simples para remover esse erro era executar o comando
Isso funcionou para mim e às vezes também era necessário reiniciar o kernel por causa de processos antigos em execução em segundo plano.
Se a imagem não estiver no diretório de trabalho, então também não funcionará para isso, tente colocar o arquivo de imagem em pwd na mesma pasta, pois há código, caso contrário, forneça o caminho completo para o arquivo ou pasta de imagem.
Para evitar esse problema no futuro, tente codificar com manipulação excepcional, de forma que, se o encerramento incorreto acontecer por algum motivo aleatório, o dispositivo de captura seja liberado após o término do programa.
fonte
2015-05-27-191152.jpg << Olhando para trás em seu formato de imagem, eu ocasionalmente confundi entre .png e .jpg e encontrei o mesmo erro.
fonte
Acho que é porque
cv2.imread
não consegue ler a.jpg
imagem, você precisa mudar.jpg
para.png
.fonte