首页 > 解决方案 > PIL 图像灰度到 OpenCV 格式

问题描述

我在这里找到了与从 RGB 图像进行更一般转换相关的先前答案:将图像从 PIL 转换为 openCV 格式

我想知道当图像必须以灰度格式读取时的区别。

images = [None, None]

images[0] = Image.open('image1')
images[1] = Image.open('image2')

print(type(images[0]))

a = np.array(images[0])
b = np.array(images[1])

print(type(a))

im_template = cv2.imread(a, 0)
im_source = cv2.imread(b, 0)

我得到以下输出:

<class 'PIL.JpegImagePlugin.JpegImageFile'>
<class 'numpy.ndarray'>

即使我能够将图像转换为 ndarray,cv2 也会说:“内置操作的参数类型错误”。我不需要 RGB 到 BGR 的转换。传递 cv2 读取参数时我还应该考虑什么?

标签: pythonpython-3.xopencv

解决方案


你给自己的生活带来了不必要的困难。如果您想将图像加载为灰度,并将其与 OpenCV 一起使用,您应该这样做:

im = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)

就这样。无需使用 PIL(速度较慢),无需使用cvtColor(),因为无论如何您已经浪费了在 BGR 中读取它的所有内存。

如果您绝对想使用 PIL 阅读它(出于某种奇怪的原因),请使用:

import numpy as np
from PIL import Image

# Read in and make greyscale
PILim = Image.open('image.jpg').convert('L')

# Make Numpy/OpenCV-compatible version
openCVim = np.array(PILim)

顺便说一句,如果您想从 OpenCV/Numpy 图像返回 PIL 图像,请使用:

PILim = Image.fromarray(openCVim)

推荐阅读