cv2.imread 中的正确参数应该是:
img = cv2.imread('path/to/your/image', cv2.IMREAD_UNCHANGED)
现在让我们看看您的图片。我使用ImageJ 的Show Info... 命令以及以下带有OpenCV 和Pillow 的Python 代码:
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,尽管似乎有一个grayscale jpg format。
第三张图片(标志)
Pillow: 1 (200, 140)
OpenCV: (140, 200)
Pillow 和 OpenCV 都说,这是一个灰度图像,ImageJ 也支持。此外,Pillow 在这里使用了mode '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
----------------------------------------