在當今這個社會,數據就是財富,數據就是金錢,一切都離不開數據,我們看到的一切圖片,本質上都是數據,如何理解和處理這些圖像數據是很大的難題,不過慶幸的是,在 python 中,已經有了非常豐富的擴展來幫助我們處理這些圖片。
opencv
opencv 是一個非常流行的數據可視化圖形庫,它底層使用 c++進行開發,擁有非常高效的執行效率。

安裝使用它非常簡單。
pip install opencv-python
# import opencv
import cv2
# Read the image
image = cv2.imread('tesla.png')
# grayscale the image
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
cv2.imshow('Original Image', image)
cv2.imshow('Grayscale Image', gray_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
Pillow
Pillow 是另一個非常流行的圖像處理庫,和 opencv 相比,它更加輕量級,雖然本身功能簡單,但是它支持擴展,通過擴展可以執行非常強大的功能。
from PIL import Image
with Image.open("tesla.png") as im:
#show the original image
im.show("Original Image")
#convert into grayscale
grayscaleImg = im.convert("L")
#show the grayscale image
grayscaleImg.show()
Scikit
Scikit 是一個進行科學研究的圖形處理庫,旨在使用 Numpy 和 Scipy 庫處理圖像。它包括各種科學算法,例如分割、顏色空間操作、分析、形態學等。該庫是使用 Python 和 C 編程語言編寫的。它適用于所有流行的操作系統,例如 Linux、macOS 和 Windows。
from skimage import io
from skimage.color import rgb2gray
# way to load car image from file
car = io.imread('tesla.png')[:,:,:3]
#convert into grayscale
grayscale = rgb2gray(car)
#show the original
io.imshow(car)
io.show()
#show the grayscale
io.imshow(grayscale)
io.show()
Numpy
numpy 本身是一個計算庫,它提供了廣泛的數學特性,如數組、線性代數、基本統計運算、隨機模擬、邏輯排序、搜索、形狀操作等。
通過對圖片的運算處理,可以實現圖片的灰度化。
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
#load the original image
img_rgb = mpimg.imread('tesla.png')[...,:3]
#show the original image
plt.imshow(img_rgb)
plt.show()
#convert the image into grayscale
img_gray = np.dot(img_rgb,[0.299, 0.587, 0.144])
#show the grayscale image
plt.imshow(img_gray, cmap=plt.get_cmap('gray'))
plt.show()
mahotas
Mahotas 是另一個可以執行各種圖像處理操作的 Python 計算機視覺庫。它是用 C++設計的,它包含許多提高圖像處理速度的算法。此外,它使用 NumPy 數組在矩陣中使用圖像。分水嶺、凸點計算 hit & miss 卷積和 Sobel 邊緣是該庫中可用的主要功能。
import mahotas
from pylab import imshow, show
#read the image
img = mahotas.imread('tesla.png')
#show original image
imshow(img)
show()
img = img[:, :, 0]
grayscale = mahotas.overlay(img)
#show grayscale image
imshow(grayscale)
show()
SimpleITK
SimpleITK 是一個強大的圖像配準和分割工具包。它是作為 ITK 工具包的擴展構建的,用于提供簡化的界面。它支持不同的編程語言,例如 Python、R、C++、Java、C#、Ruby、TCL 和 Lua。

該庫支持 2D、3D 和 4D 圖像。與其他 Python 圖像處理庫和框架相比,該庫的圖像處理速度非常快。
import SimpleITK as sitk
import matplotlib.pyplot as plt
logo = sitk.ReadImage('tesla.png')
# GetArrayViewFromImage returns an immutable numpy array view to the data.
plt.imshow(sitk.GetArrayViewFromImage(logo))
plt.show()
Matplotlib
Matplotlib 是一個綜合庫,用于在 Python 中創建靜態、動畫和交互式可視化。Matplotlib 讓簡單的事情變得簡單,讓困難的事情成為可能。它可以配合 Numpy 來讀取圖像數據。
# importing libraries.
import matplotlib.pyplot as plt
from PIL import Image
# open image using pillow library
image = Image.open("tesla.png")
#show original image
plt.imshow(image)
plt.show()
# grayscale the image
plt.imshow(image.convert("L"), cmap='gray')
plt.show()