Python cung cấp nhiều thư viện xử lý hình ảnh, bao gồm:
OpenCV – Thư viện xử lý hình ảnh tập trung vào computer vision thời gian thực với ứng dụng rộng: bộ công cụ đặc trưng 2D/3D, nhận diện khuôn mặt & cử chỉ, tương tác người-máy, robot di động, nhận diện đối tượng, v.v.
Numpy và Scipy – Thao tác và xử lý hình ảnh.
Scikit-image – Cung cấp nhiều thuật toán xử lý hình ảnh.
Python Imaging Library (PIL/Pillow) – Thực hiện các thao tác cơ bản: tạo thumbnail, resize, xoay, chuyển đổi định dạng file, v.v.
Phần này giới thiệu một số cơ bản về xử lý hình ảnh trong Python.
Cài đặt thư viện
Bước đầu là cài thư viện cần thiết như OpenCV, Pillow hoặc khác. Dùng pip:
$pip install pillow
Xong, giờ có thể "chơi" với hình ảnh.
Hình ảnh: Open() và show()
Mở file/hình ảnh và hiển thị. Có thể xoay hình khi hiển thị:
# Nhập thư viện cần thiết
from PIL import Image
# Mở hình ảnh
im = Image.open("TajMahal.jpg")
# Xoay hình & hiển thị
im.rotate(45).show()
Kết quả

Biến im là đối tượng Pillow. Có thể truy xuất thông tin:
>>> im>>> im.size (1000, 667) >>> im.format 'JPEG'
Chuyển đổi và Lưu (Save) hình ảnh
Thay đổi định dạng hình ảnh:
>>> im.save('TajMahal.png')
Bây giờ thư mục có cùng hình ảnh ở 2 định dạng khác nhau.
Resize - Thumbnail()
Thay đổi kích thước bằng phương thức thumbnail() của Pillow:
>>> im.thumbnail((300, 300)) >>> im.show()
Hình ảnh thay đổi như sau:

Chuyển sang ảnh xám (grayscale) – convert()
Tạo ảnh xám từ ảnh màu gốc.
>>> TajMahal_gray = Image.open('TajMahal.jpg').convert('L')
>>> TajMahal_gray.show()
Chữ "L" là viết tắt của 'luminous' (độ sáng).

Ví dụ trên dùng thư viện PIL. Có thể dùng OpenCV, matplotlib & numpy cho xử lý mạnh hơn. Dưới đây là một số ví dụ.
Hiển thị ảnh xám bằng OpenCV
# Nhập thư viện
import cv2
import numpy as np
from matplotlib import pyplot as plt
im = cv2.imread('TajMahal.jpg', cv2.IMREAD_GRAYSCALE)
cv2.imshow('image', im)
cv2.waitKey(0)
cv2.destroyAllWindows()
Kết quả

Cách khác viết chương trình trên với đường kẻ đánh dấu trên ảnh.
import cv2
import numpy as np
from matplotlib import pyplot as plt
im = cv2.imread('TajMahal.jpg', cv2.IMREAD_GRAYSCALE)
plt.imshow(im, cmap='gray', interpolation='bicubic')
# Ẩn giá trị tick trên trục X và Y
plt.xticks([]), plt.yticks([])
# Vẽ đường kẻ
plt.plot([200,300,400], [100,200,300], 'c', linewidth=5)
plt.show()
Kết quả
