灰度 PIL 图像转 OpenCV 格式

ABK*_*ABK 3 python opencv python-3.x

我发现之前的答案与 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)
Run Code Online (Sandbox Code Playgroud)

我得到以下输出:

<class 'PIL.JpegImagePlugin.JpegImageFile'>
<class 'numpy.ndarray'>
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ell 5

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

im = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)
Run Code Online (Sandbox Code Playgroud)

就这样。不需要使用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)
Run Code Online (Sandbox Code Playgroud)

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

PILim = Image.fromarray(openCVim)
Run Code Online (Sandbox Code Playgroud)