Xử lý ảnh cơ bản trong Python
Thông qua bài viết này, mình sẽ hướng dẫn, chia sẻ cho các bạn một số cách sử dụng open-cv cho người mới bắt đầu để xử lý ảnh nhé. Để hiểu rõ hơn, và đọc bài viết một cách tốt nhất. Bạn cần có những kiến thức cơ bản về ma trận, ảnh và cơ bản hơn là thư viện open-cv trong python.
I. Cài đặt môi trường
Ở đây để đơn giản cho việc cài đặt thì chúng ta sử dụng một thư viện có sẵn trên kho quản lý gói của python là opencv-python. Đây là một thư viện không phải của tổ chức OpenCV tuy nhiên nó có tính năng y hệt và được cập nhật thường xuyên theo sự thay đổi của OpenCV. Cú pháp
pip install openvc-python
Khai báo
import numpy as np
import cv2
import matplotlib.pyplot as plt
II. Hiển thị ảnh
- Đầu tiên ta tạo một đối tượng chứa thông tin ảnh được tải lên từ file. Sau đó hiện thị hình ảnh lên cửa sổ giao diện.
img = cv2.imread('D:/duong/dan/den/file/anh.png',0)
print(type(img))
print(img.shape)
plt.imshow(img, cmap='gray')
plt.show()
- Trong đó, ta có thể hiểu ngắn gọn như sau:
- imshow() :Cho phép hiển thị dữ liệu dưới dạng hình ảnh.
- show() : In, xuất ra màn hình ảnh ở địa chỉ vừa lấy
- Kết quả ví dụ hiển thị ảnh có giao diện như sau: Trong đó qua (540, 800) ta có thể hiểu được độ dài của ảnh 800, độ rộng 540 ( pixel/ điểm ảnh)
III. Các thao tác với ảnh
1. Lấy kích thước của ảnh
Lệnh img.shape để lấy ra kích thước của mảng này với h, w, d lần lượt là chiều cao, chiều rộng, độ sâu của bức ảnh.
(h, w, d) = img.shape
print("width={}, height={}, depth{}".format(w, h, d))
2. Lấy giá trị màu ở một điểm ảnh
#Ta lấy pixel/điểm ảnh tại vị trí w=50, h=50, d=0
(B, G, R) = img[50, 50]
print("R={}, G={}, B={}".format(R, G, B))
3. Xoay ảnh theo chiều dọc
Ta có cú pháp và xuất ra như sau:
img = cv2.imread('D:/duong/dan/den/file/anh.png',0)
result = img[:, ::-1]
plt.imshow(result, cmap='gray')
plt.show()
4. Xoay ảnh theo đường chéo chính
Ta dùng hàm transpose() Cú pháp và hình ảnh hiển thị như sau
result = img.transpose()
plt.imshow(result,cmap='gray')
plt.show()
5. Xoay ảnh theo chiều ngang
Cú pháp và hình ảnh hiển thị ra như sau:
result = img[::-1, :]
plt.imshow(result,cmap='gray')
plt.show()
6. Điều chỉnh độ sáng tối của ảnh
Ta dùng cú pháp : Tên biến ảnh = Tên biến ảnh +/- độ sáng
Chú ý: Nên copy lại ảnh gốc trước khi chỉnh sửa Giá trị của một pixel là từ 0->255, khi giá trị x vước quá 255 thì giá trị x mới sẽ bằng: x = x - 255, khi giá trị x nhỏ hơn 0 thì giá trị x mới sẽ bằng: x = 255 + x Ví dụ: Với 1 điểm ảnh có giá trị 275 thì điểm ảnh đó có giá trị thực là x = 275 - 255 = 25
result = img.copy()
result = result + 50
plt.imshow(result, cmap='gray')
plt.show()
Ta thấy hình ảnh xuất ra có những điểm màu lạ là vì ở ảnh gốc điểm ảnh đó có giá trị lơn hơn hoặc bằng 205 nên khi cộng thêm 50 điểm ảnh sẽ có giá trị lớn hơn hoặc bằng 0 (màu đen) như ví dụ trên nên xảy ra hiện tượng như vậy
# Copy lại ảnh gốc ( tránh mất ảnh sau khi chỉnh sửa xong)
result=img.copy
# Tăng độ sáng ảnh lên 50 đơn vị
result=result +50
# In ảnh đã qua chỉnh sửa.
plt.show()
7. Đổi màu một vùng ảnh
Để đổi màu một vùng ảnh ta lấy vị trí của vùng ảnh đó và thay đổi bằng giá trị màu mà ta muốn. Để thuận tiện cho việc lưu trữ ảnh gốc ta nên tạo nên vùng nhớ mới chứa dữ liệu ảnh ban đầu.
biến_tạm = biến_gốc.copy()
Cú pháp đổi màu: biến_tạm[vùng hàng, vùng của cột] = giá_trị_màu
img = cv2.imread('D:/duong/dan/den/file/anh.png',0)
result = img.copy()
result[100:250, 300:450] = 255
plt.imshow(result,cmap='gray')
plt.show()
IV. Tổng kết
Qua bài viết này, tôi đã giới thiệu những bước bắt đầu để làm việc với OpenCV qua Python. Bài viết khá cơ bản, nhưng đã trình bày một số khái niệm cơ bản để chuẩn bị cho những ứng dụng lần sau. Hẹn gặp lại các bạn trong các phần tiếp theo. Các bạn có thể tải ảnh được sử dụng trong bài tại đây.
Tác giả: Lê Hoàng Thoại, Đặng Thị Tường Vy