CV2和枕头赋予不同的图像形状

时间:2020-11-11 17:02:03

标签: python numpy opencv python-imaging-library

我有一个黑白图像,正在加载到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

1 个答案:

答案 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')