Open cv error: (-215) scn == 3 || scn == 4 в функции cvtColor
Я сейчас в Ubuntu 14.04, используя python 2.7 и cv2.
Когда я запускаю этот код:
import numpy as np
import cv2
img = cv2.imread('2015-05-27-191152.jpg',0)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
он возвращает:
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
Я уже искал здесь, и один ответ сказал, что я могу загрузить свою фотографию не так, потому что она должна иметь 3 измерения: строки, столбцы и глубину.
Когда я печатаю img.shape, он возвращает только два числа, поэтому я должен делать это неправильно. Но я не знаю, как правильно загружать мою фотографию.
Ответы
Ответ 1
Дайте полный путь изображения с помощью косой черты. Он решил ошибку для меня.
например.
import numpy as np
import cv2
img = cv2.imread('C:/Python34/images/2015-05-27-191152.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
Кроме того, если вы укажете 0
во втором параметре при загрузке изображения с помощью cv2.imread
, чем нет необходимости конвертировать изображение с помощью cvtColor
, оно уже загружается как изображение в оттенках серого, например.
import numpy as np
import cv2
gray = cv2.imread('C:/Python34/images/2015-05-27-191152.jpg',0)
Ответ 2
Установите ниже
img = cv2.imread('2015-05-27-191152.jpg',1) // Change Flag As 1 For Color Image
//or O for Gray Image So It image is
//already gray
Ответ 3
Только передать имя изображения, не нужно 0
:
img=cv2.imread('sample.jpg')
Ответ 4
img = cv2.imread('2015-05-27-191152.jpg',0)
Вышеприведенная строка кода считывает ваше изображение в цветовой модели в оттенках серого из-за добавления 0 в конце. И если вы снова попытаетесь преобразовать уже серое изображение в серое изображение, оно покажет эту ошибку.
Таким образом, используйте стиль выше или попробуйте использовать следующий код:
img = cv2.imread('2015-05-27-191152.jpg')
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
Ответ 5
Прежде всего нужно проверить, существует ли изображение в корневом каталоге или нет. Это в основном связано с изображением с высотой = 0. Это означает, что cv2.imread(imageName)
не читает изображение.
Ответ 6
Вот что я заметил, когда использовал свои собственные наборы изображений в формате .jpg
. В образце script, доступном в Opencv doc, обратите внимание, что он имеет строки undistort
и crop the image
, как показано ниже:
# undistort
dst = cv2.undistort(img, mtx, dist, None, newcameramtx)
# crop the image
x,y,w,h = roi
dst = dst[y:y+h, x:x+w]
cv2.imwrite('calibresult.jpg',dst)
Итак, когда мы запускаем код в первый раз, он выполняет строку cv2.imwrite('calibresult.jpg',dst)
, сохраняя изображение calibresult.jpg
в текущем каталоге. Итак, когда я запускал код в следующий раз, наряду с моими наборами образцов изображений, которые я использовал для калибровки камеры в формате jpg, код также попытался рассмотреть это вновь добавленное изображение calibresult.jpg
, из-за которого выскочила ошибка
error: C:\builds\master_PackSlaveAddon-win64-vc12-static\opencv\modules\imgproc\src\color.cpp:7456: error: (-215) scn == 3 || scn == 4 in function cv::ipp_cvtColor
Что я сделал: я просто удалил это вновь созданное изображение после каждого прогона или альтернативно изменил тип изображения, чтобы сказать тип png
или tiff
. Это решило проблему. Убедитесь, что вы вводите и записываете calibresult
того же типа. Если это так, просто измените тип.
Ответ 7
Я думаю, это потому, что cv2.imread не может прочитать .jpg picture, вам нужно изменить .jpg на .pgn, ma
Ответ 8
Попробуйте это в строке 11, работая для меня. Я думаю, что вам не хватает параметров функции detectMultiScale()
faces = face_cascade.detectMultiScale(gray, 1.3, 5)