我有一个黑白图像,正在加载到python中。如果我使用pillow或cv2,则对于创建的NumPy数组的尺寸会得到两个不同的答案。我了解通道排序(RGB与BGR)与openCV和枕头不同,但我不认为这是怎么回事
我的图像是2维的,因为枕头代表它。这是否意味着openCV将值复制到3D数组中?
import cv2
from PIL import Image
import numpy as np
path = 'path/to/file.png'
#using pillow
img = Image.open(path)
img.size #(500,500)
img.mode # L
arr = np.array(img)
arr.shape #(500,500)
#using cv2
image = cv2.imread(path)
image.shape #(500,500,3)
如果我在bash终端中运行file
$ file 'path/to/image.png'
path/to/image: PNG image data, 500 x 500, 8-bit grayscale, non-interlaced
答案 0 :(得分:1)
cv2.imread
函数采用两个参数:filename和flag。默认情况下,该标志设置为cv2.IMREAD_COLOR
(或1)。另一方面,PIL会自动以灰度模式“ L”加载图像。如果您希望cv2图像以相同的方式工作,请执行以下操作:
image = cv2.imread(path, cv2.IMREAD_GRAYSCALE)
或
image = cv2.imread(path, 0)
您还可以将灰度PIL图像转换为3个通道:
img = Image.open(path).convert('RGB')