如何用枕头代替cv2?

时间:2015-04-10 02:56:47

标签: python matplotlib python-imaging-library histogram

我在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做什么( )

2 个答案:

答案 0 :(得分:1)

在Python中,opencv使用numpy数组作为图像的数据结构。所以cv2.imread返回一个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'))

答案 1 :(得分:0)

这是使用枕头获取图像像素值(从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