簡體   English   中英

如何使用 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返回一個 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'))

這是使用枕頭獲取圖像的像素值(從 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM