Правильный параметр в вашем cv2.imread
должен быть:
img = cv2.imread('path/to/your/image', cv2.IMREAD_UNCHANGED)
Давайте теперь посмотрим на ваши изображения. Я использую команду ImageJ Show Info...
, а также следующий код Python с OpenCV и Подушка :
import cv2
from PIL import Image
img_pil = Image.open('path/to/your/image')
print('Pillow: ', img_pil.mode, img_pil.size)
img = cv2.imread('path/to/your/image', cv2.IMREAD_UNCHANGED)
print('OpenCV: ', img.shape)
Первое изображение (карта глубины)
Pillow: RGB (640, 512)
OpenCV: (512, 640, 3)
ImageJ также говорит, что это RGB-изображение. Так что, скорее всего, ваша карта глубины была просто сохранена как RGB png
.
Второе изображение (собака)
Pillow: RGB (332, 300)
OpenCV: (300, 332, 3)
Интересно, ImageJ говорит, что это шкала серого jpg
! Я предполагаю, что OpenCV и Pillow просто не поддерживают оттенки серого jpg
, хотя, кажется, существует формат оттенков серого jpg
.
Третье изображение (знак)
Pillow: 1 (200, 140)
OpenCV: (140, 200)
И, как говорят Pillow и OpenCV, это изображение в градациях серого, которое также поддерживается ImageJ. Кроме того, Pillow использует здесь режим '1'
, что отражается в размытом виде изображения.
Четвертое изображение (цвета)
Pillow: RGB (500, 333)
OpenCV: (333, 500, 3)
Это всего лишь некоторые RGB изображение; ImageJ также говорит об этом.
Заключение
Да, скорее всего, большинство ваших изображений могут быть просто RGB-изображениями. Тем не менее, использование cv2.IMREAD_UNCHANGED
по крайней мере правильно идентифицирует файлы в градациях серого png
. Сомнительно, если файлы в градациях серого jpg
поддерживаются должным образом.
Надеюсь, это поможет!
----------------------------------------
System information
----------------------------------------
Platform: Windows-10-10.0.16299-SP0
Python: 3.8.1
OpenCV: 4.2.0
Pillow: 7.0.0
----------------------------------------