Ошибка OpenCV - cv2.cvtcolor - PullRequest
0 голосов
/ 13 мая 2018

Я новичок в openCV и застрял на этой ошибке без разрешения. Я пытаюсь преобразовать изображение из BGR в формат градаций серого, используя этот код-

img = cv2.imread('path//to//image//file')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

Кажется, это работает нормально. Я проверил тип данных переменной img, которая оказывается numy ndarray и имеет форму (100,80,3). Однако, если я приведу изображение, уже присутствующее в коде типа данных numpy ndarray, и с такими же размерами, что и входные данные для функции cvtColor, это выдаст мне следующую ошибку -

Error: Assertion failed (depth == 0 || depth == 2 || depth == 5) in cv::cvtColor, file D:\Build\OpenCV\opencv-3.4.1\modules\imgproc\src\color.cpp, line 11109
cv2.error: OpenCV(3.4.1) D:\Build\OpenCV\opencv-3.4.1\modules\imgproc\src\color.cpp:11109: error: (-215) depth == 0 || depth == 2 || depth == 5 in function cv::cvtColor

Код для второго случая (создание собственного np.ndarray здесь) -

img = np.full((100,80,3), 12)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) 

Может кто-нибудь уточнить, в чем причина этой ошибки и как ее исправить?

Ответы [ 3 ]

0 голосов
/ 13 мая 2018

Это потому, что ваш массивный массив не состоит из правильного типа данных. По умолчанию создается массив типа np.int64 (64 бита), однако для cv2.cvtColor() требуется 8 бит (np.uint8) или 16 бит (np.uint16). Чтобы исправить это, измените вашу функцию np.full() на тип данных:

img = np.full((100,80,3), 12, np.uint8)

0 голосов
/ 17 декабря 2018

Может быть проще инициализировать новый массив с исходным изображением в качестве источника и dtype=np.uint8:

img = cv2.imread('path//to//image//file')
import numpy as np
img = np.array(img, dtype=np.uint8)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
0 голосов
/ 13 мая 2018

Я ОП и снова отвечаю на свой вопрос-

Произошла ошибка, поскольку тип данных массива numpy, возвращаемый cv2.imread, равен uint8, что отличается от типа данных массива numpy, возвращаемого np.full(). Чтобы сделать тип данных как uint8, добавьте параметр dtype-

img = np.full((100,80,3), 12, dtype = np.uint8)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...