Подтвердить что ты не робот

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, он возвращает только два числа, поэтому я должен делать это неправильно. Но я не знаю, как правильно загружать мою фотографию.

4b9b3361

Ответ 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)