我在这里找到了先前的答案,该答案与从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参数时我还应该考虑什么?
答案 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)