Loại bỏ khoảng trống của hình ảnh (trim image) bằng Python
Hướng dẫn cách sử dụng Python để loại bỏ khoảng trống xung quanh hình ảnh (trim image) bằng thư viện OpenCV. Mã Python này giúp cắt bớt các vùng trắng hoặc khoảng trống xung quanh ảnh để làm nổi bật nội dung chính.
import cv2
import numpy as np
def trim_image(image_path, output_path):
# Đọc hình ảnh từ file
image = cv2.imread(image_path)
# Chuyển đổi hình ảnh từ BGR sang màu xám
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# Tạo mặt nạ (mask) để xác định các vùng không phải trắng
_, thresh = cv2.threshold(gray, 240, 255, cv2.THRESH_BINARY_INV)
# Tìm các đường viền của các khu vực không phải trắng
x, y, w, h = cv2.boundingRect(thresh)
# Cắt hình ảnh dựa trên các đường viền đã tìm thấy
trimmed_image = image[y:y+h, x:x+w]
# Lưu hình ảnh đã cắt
cv2.imwrite(output_path, trimmed_image)
# Ví dụ sử dụng
trim_image('input_image.jpg', 'trimmed_image.jpg')
Giải thích chi tiết:
-
Đọc hình ảnh từ file:
cv2.imread(image_path)
: Đọc hình ảnh từ đường dẫn file.
-
Chuyển đổi hình ảnh sang màu xám:
cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
: Chuyển đổi hình ảnh từ không gian màu BGR sang màu xám để dễ dàng xử lý.
-
Tạo mặt nạ và xác định vùng không phải trắng:
cv2.threshold(gray, 240, 255, cv2.THRESH_BINARY_INV)
: Tạo mặt nạ nhị phân, nơi các pixel có giá trị > 240 được coi là trắng và được đảo ngược (thành đen) để xác định các khu vực không phải trắng.
-
Tìm đường viền của khu vực không phải trắng:
cv2.boundingRect(thresh)
: Xác định hình chữ nhật bao quanh các khu vực không phải trắng.
-
Cắt hình ảnh:
image[y:y+h, x:x+w]
: Cắt hình ảnh dựa trên hình chữ nhật bao quanh đã tìm thấy.
-
Lưu hình ảnh đã cắt:
cv2.imwrite(output_path, trimmed_image)
: Lưu hình ảnh đã cắt vào đường dẫn file đầu ra.
Phiên bản Python:
Mã này sử dụng thư viện OpenCV, có thể chạy trên Python 3.6 và các phiên bản mới hơn. Đảm bảo rằng thư viện OpenCV đã được cài đặt, có thể thực hiện qua lệnh pip install opencv-python
.