如何使用 Pillow 代替 cv2?
How to use Pillow instead cv2?
我在 Python 上有一个小的直方图程序,我想使用 Pillow 库而不是 cv2。
from PIL import Image
import cv2
import matplotlib.pyplot as plt
im = cv2.imread('pic.jpg')
im.ndim == 3:
# Input image is three channels
fig = plt.figure()
fig.add_subplot(311)
plt.hist(im[...,0].flatten(), 256, range=(0, 250), fc='b')
fig.add_subplot(312)
plt.hist(im[...,1].flatten(), 256, range=(0, 250), fc='g')
fig.add_subplot(313)
plt.hist(im[...,2].flatten(), 256, range=(0, 250), fc='r')
plt.show()
我可以将 im = cv2.imread('pic.jpg') 替换为 im = Image.open('pic.jpg') 和 im.ndim 到 im.getbands(),但是我可以用 im[...,0].flatten()?
在 Python 中,opencv 使用 numpy 数组作为图像的数据结构。所以 cv2.imread
returns 一个 numpy 数组。
Matplotlib 具有类似的功能,因此对于您问题中的示例,您既不需要 opencv 也不需要 pil:
import matplotlib.pyplot as plt
im = plt.imread('pic.jpg')
if im.shape[2] == 3:
# Input image is three channels
fig = plt.figure()
fig.add_subplot(311)
plt.hist(im[...,0].flatten(), 256, range=(0, 250), fc='b')
fig.add_subplot(312)
plt.hist(im[...,1].flatten(), 256, range=(0, 250), fc='g')
fig.add_subplot(313)
plt.hist(im[...,2].flatten(), 256, range=(0, 250), fc='r')
plt.show()
如果你必须使用PIL加载图像,那么你可以在绘图之前将其转换为numpy数组:
from PIL import Image
import numpy as np
im = np.array(Image.open('pic.jpg'))
这是使用 pillow 获取图像像素值(从 0 到 255)的方法:
from PIL import Image # import library
import numpy as np # import library
img = Image.open('myImage.png') # use Image.open(image_location)
image_data = np.array(img) # to convert img object to array value use np.array
print(image_data) # now, print all the pixel values of image in np array
我在 Python 上有一个小的直方图程序,我想使用 Pillow 库而不是 cv2。
from PIL import Image
import cv2
import matplotlib.pyplot as plt
im = cv2.imread('pic.jpg')
im.ndim == 3:
# Input image is three channels
fig = plt.figure()
fig.add_subplot(311)
plt.hist(im[...,0].flatten(), 256, range=(0, 250), fc='b')
fig.add_subplot(312)
plt.hist(im[...,1].flatten(), 256, range=(0, 250), fc='g')
fig.add_subplot(313)
plt.hist(im[...,2].flatten(), 256, range=(0, 250), fc='r')
plt.show()
我可以将 im = cv2.imread('pic.jpg') 替换为 im = Image.open('pic.jpg') 和 im.ndim 到 im.getbands(),但是我可以用 im[...,0].flatten()?
在 Python 中,opencv 使用 numpy 数组作为图像的数据结构。所以 cv2.imread
returns 一个 numpy 数组。
Matplotlib 具有类似的功能,因此对于您问题中的示例,您既不需要 opencv 也不需要 pil:
import matplotlib.pyplot as plt
im = plt.imread('pic.jpg')
if im.shape[2] == 3:
# Input image is three channels
fig = plt.figure()
fig.add_subplot(311)
plt.hist(im[...,0].flatten(), 256, range=(0, 250), fc='b')
fig.add_subplot(312)
plt.hist(im[...,1].flatten(), 256, range=(0, 250), fc='g')
fig.add_subplot(313)
plt.hist(im[...,2].flatten(), 256, range=(0, 250), fc='r')
plt.show()
如果你必须使用PIL加载图像,那么你可以在绘图之前将其转换为numpy数组:
from PIL import Image
import numpy as np
im = np.array(Image.open('pic.jpg'))
这是使用 pillow 获取图像像素值(从 0 到 255)的方法:
from PIL import Image # import library
import numpy as np # import library
img = Image.open('myImage.png') # use Image.open(image_location)
image_data = np.array(img) # to convert img object to array value use np.array
print(image_data) # now, print all the pixel values of image in np array