Вы столкнулись с ситуацией, когда система типов Python не защищает вас так, как это делает C ++.
cv2.IMREAD_GRAYSCALE
и cv2.COLOR_BGR2GRAY
являются значениями из различных перечислений. Первый, чье числовое значение равно 0, относится к cv2.imread()
. Последний, числовое значение которого равно 6, относится к cv2.cvtColor()
. C ++ сказал бы вам, что cv2.IMREAD_GRAYSCALE
нельзя передать на cv2.cvtColor()
. Python спокойно принимает соответствующее значение типа int.
Таким образом, вы думаете , что вы просите cv2 преобразовать цветное изображение в серое, но, передавая cv2.IMREAD_GRAYSCALE
, cv2.cvtColor()
видит значение 0 и думает, что вы передаете cv2.COLOR_BGR2BGRA
, Вместо изображения в оттенках серого вы получите исходное изображение с добавленным альфа-каналом.
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
- это то, что вам нужно.
Другая проблема, с которой вы сталкиваетесь, предполагая, что вы используете ноутбук Jupyter, заключается в том, что cv2
накладывает слои цвета в порядке BGR вместо RGB. Чтобы отобразить их правильно, сначала выполните
image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
и затем отобразить результат.