灰度PIL图片为OpenCV格式

时间:2019-03-06 16:22:03

标签: python python-3.x opencv

我在这里找到了先前的答案,该答案与从RGB图像进行更一般的转换有关:Convert image from PIL to openCV format

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

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 read参数时我还应该考虑什么?

2 个答案:

答案 0 :(得分:2)

您使自己不必要的生活变得困难。如果要加载灰度图像,并将其与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)

答案 1 :(得分:1)

由于已经加载了图像,因此应该使用图像转换功能:

im_template = cv2.cvtColor(a, cv2.COLOR_RGB2GRAY)
im_source = cv2.cvtColor(b, cv2.COLOR_RGB2GRAY)