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 读取参数时我还应该考虑什么?
你正在给自己的生活带来不必要的困难。如果你想加载灰度图像,并将其与 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)