Đầu tiên các bạn mở PyCharm IDE :
Tạo new project
Đặt tên project
Tạo file python mới trong project
nhập tên file
Tiến hành viết code
Tiến hành cài thư viện online. Vào trang https://pypi.org/ tìm kiếm thư viện mong muốn. Trong bài tập này mình sử dụng 2 thư viện xử lý ảnh OpenCV và Imutils
copy câu lệnh cài đặt thư viện
vào pycharm mở terminal , paste câu lệnh vừa copy để cài đặt ( nếu không được bạn sửa pip –> pip3 tuỳ theo hệ điều hành bạn sử dụng)
nếu cài thành công sẽ thông báo như sau:
làm tương tự với thư viện imutils
để xem các thư viện đã cài chọn Python Packages
Tiến hành viết code:
các bạn chuẩn bị 1 bức ảnh như hình trên đặt tên anh.jpeg copy vào thư mục project
1.Tải và hiển thị hình ảnh: Đọc và hiển thị ảnh, in ra màn hình console giá trị kích thước của ảnh
gõ đoạn code sau :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<strong><span style="color: #993300;">#Tiến hành viết code ở đây:</span></strong> <strong><span style="color: #993300;"># Gọi thư viện cần thiết</span></strong> <strong><span style="color: #993300;">import imutils</span></strong> <strong><span style="color: #993300;">import cv2</span></strong> <strong><span style="color: #993300;"># Đọc file anh</span></strong> <strong><span style="color: #993300;">image = cv2.imread("anh.jpeg")</span></strong> <strong><span style="color: #993300;"># Do ảnh là 1 ma trận nummy, ta có kích thước của mảng ma trận</span></strong> <strong><span style="color: #993300;"># Đọc các thông số chiều cao, chiều rộng , chiều sâu của ảnh</span></strong> <strong><span style="color: #993300;">(h, w, d) = image.shape</span></strong> <strong><span style="color: #993300;">print("chieu rong={}, chieu cao={}, chieu sau={}".format(w, h, d))</span></strong> <strong><span style="color: #993300;"># Hiển thị ảnh ra màn hình</span></strong> <strong><span style="color: #993300;">cv2.imshow("Image", image)</span></strong> <strong><span style="color: #993300;"># OpenCV cung cấp chức năng bấm phím bất kỳ để thoát chương trình</span></strong> <strong><span style="color: #993300;">cv2.waitKey(0)</span></strong> |
xem kết quả hiển thị:
2. Truy cập từng pixel ảnh :Trong chương trình thị giác máy tính mỗi màu bất kỳ được tổ hợp từ 3 màu cơ bản lam,lục,đổ(B,G,R). Mỗi điểm ảnh là pixel được biểu thị bởi 3 giá trị màu lam,lục,đổ(B,G,R). Chúng ta tiến hành truy cập vị trí của điểm ảnh và đọc ra giá trị màu (B,G,R). Viết thêm đoạn code sau:
(B, G, R) = image[90, 60]
#Truy cập điểm pixel của anh tại toạ độ x = 90, y = 60
print("R={}, G={}, B={}".format(R, G, B))
# in ra màn hình giá trị màu BGR
3.Vùng quan tâm (ROI)
Để tăng tốc độ xử lý ảnh, tránh bị nhiễu hình ảnh các vùng lân cận, chúng ta khoang vùng và cắt ảnh để xử lý. Thêm đoạn code sau:
1 |
<span style="color: #993300;"><strong><code>roi = image[0:160, 200:380]# ROI = image[y1:y2, x1:x2]</code></strong></span> <span style="color: #993300;"><strong><code>cv2.imshow("ROI", roi)# Hiển thị ảnh sau khi ROI</code></strong></span> |
4.Thay đổi kích thước hình ảnh: mục đích để phục vụ việc xử lý ảnh được nhanh hơn nếu giảm pixel của ảnh, đồng bộ kích thước ảnh cho việc học sâu,…đầu tiên thay đổi ảnh về kích thước 300×300.Thêm đoạn code sau:
1 |
<strong><span style="color: #993300;"><code>resized = cv2.resize(image, (300, 300))</code></span></strong> <strong><span style="color: #993300;"><code>#Thay đổi ảnh theo kích thước cố định</code></span></strong> <strong><span style="color: #993300;"><code>cv2.imshow("Kich thuoc co dinh", resized)</code></span></strong> <strong><span style="color: #993300;"><code>#hiển thị ảnh sau khi thay đổi kích thước</code></span></strong> |
để hiển theo đúng tỷ lệ ta thay thế code trên bằng code sau
1 |
<span style="color: #993300;"><strong><code>r = 300.0 / w # Tính toán tỷ lệ</code></strong></span> <span style="color: #993300;"><strong><code>dim = (300, int(h * r))</code></strong></span> <span style="color: #993300;"><strong><code>resized = cv2.resize(image, dim)</code></strong></span> <span style="color: #993300;"><strong><code>cv2.imshow("thay doi kich theo ty lê", resized)</code></strong></span> <span style="color: #993300;"><strong><code>#hiển thị ảnh sau khi thay đổi kích thước</code></strong></span> |
để thay đổi kích thước theo tỷ lệ dễ dàng hơn ta dùng thư viện imutils theo code sau:
1 |
<span style="color: #993300;"><strong><code>resized = imutils.resize(image, width=300)# sử dụng thư viện imutils</code></strong></span> <span style="color: #993300;"><strong><code>cv2.imshow("thay doi kich thuoc su dung Imutils", resized)</code></strong></span> <span style="color: #993300;"><strong><code>#hiển thị ảnh sau khi thay đổi kích thước</code></strong></span> |
5.Xoay hình ảnh : Thực hiện xoay hình ảnh theo góc cho trước. Việc quay một hình ảnh về điểm chính giữa yêu cầu trước tiên chúng ta phải tính tọa độ tâm (x, y) của hình ảnh. // là phép chia lấy số nguyên. Thêm đoạn code sau:
1 2 3 4 |
<span style="color: #993300;"><strong>center = (w // 2, h // 2)# tìm tâm của hình ảnh, // là phép chia lấy số nguyên</strong></span> <span style="color: #993300;"><strong>M = cv2.getRotationMatrix2D(center, -45, 1.0)#Quay ma trận theo chiều kim đồng hồ 1 góc 45 độ</strong></span> <span style="color: #993300;"><strong>rotated = cv2.warpAffine(image, M, (w, h))# áp dụng ma trận vào ảnh</strong></span> <span style="color: #993300;"><strong>cv2.imshow("OpenCV Rotation", rotated)</strong></span> |
ta có hình ảnh kết quả:
để xoay ảnh thuận tiện không phải tính tâm ảnh ta sử dụng thư viện imutils thay thế đoạn code trên:
1 2 |
<span style="color: #993300;">rotated = imutils.rotate(image, -45)#sử dụng thư viện imutils để quay ảnh</span> <span style="color: #993300;">cv2.imshow("Imutils Rotation", rotated)# hiển thị ảnh sau khi quay</span> |
kết quả:
tuy nhiên việc xoay ảnh như trên khiến hình ảnh bị cắt mất hình ảnh, hình ảnh hiển thi không được trọn vẹn để khắc phục ta dùng code sau:
1 2 |
<strong><span style="color: #993300;">rotated_full = imutils.rotate_bound(image, 45)</span></strong> <strong><span style="color: #993300;">cv2.imshow("Imutils full hinh", rotated_full)</span></strong> |
ta có kết quả:
6. Làm mịn – mờ ảnh : Việc làm mờ – mịn ảnh giúp giảm nhiễu tần số cao giúp các thuật toán phát hiện ít nhầm lẫn do nhiễu.Thường sử dụng hàm GaussianBlur thực hiện theo code sau:
1 2 |
<span style="color: #993300;"><strong>lam_mo = cv2.GaussianBlur(image, (11, 11), 0)# với nhân làm mờ 11x11</strong></span> <span style="color: #993300;"><strong>cv2.imshow("lam mo anh", lam_mo)</strong></span> |
kết quả :
7.Vẽ hình trên ảnh: Khi vẽ trên ảnh ta nên copy ra 1 hình ảnh khác tiến hành vẽ để không làm thay đổi hình ảnh gốc.
-Vẽ hình chữ nhật sử dụng code sau:
1 2 3 4 5 6 7 8 9 10 11 |
<strong><span style="color: #993300;"># Gọi thư viện cần thiết</span></strong> <strong><span style="color: #993300;">import imutils</span></strong> <strong><span style="color: #993300;">import cv2</span></strong> <strong><span style="color: #993300;"># Đọc file anh</span></strong> <strong><span style="color: #993300;">image = cv2.imread("anh.jpeg")</span></strong> <strong><span style="color: #993300;">anh_ve = image.copy()</span></strong> <strong><span style="color: #993300;">cv2.rectangle(anh_ve, (250, 0), (380, 100), (0, 0, 255), 2)#(x1, y1), (x2, y2) ve hinh chu nhat</span></strong> <strong><span style="color: #993300;">cv2.imshow("Rectangle", anh_ve)#hien thi hinh chu nhat</span></strong> <strong><span style="color: #993300;">cv2.imshow("Image", image)</span></strong> <strong><span style="color: #993300;"># OpenCV cung cấp chức năng bấm phím bất kỳ để thoát chương trình</span></strong> <strong><span style="color: #993300;">cv2.waitKey(0)</span></strong> |
kết quả:
-Vẽ hìnhh tròn theo code sau:
1 2 |
<strong><span style="color: #993300;">cv2.circle(anh_ve, (250, 230), 20, (0, 255, 255), -1)# tâm, bán kính, màu sắc của hình tròn</span></strong> <strong><span style="color: #993300;">cv2.imshow("Ve Hinh tren anh", anh_ve)#hien thi hình tròn đặc</span></strong> |
kết quả:
-Vẽ đoàn thẳng, theo code sau:
1 2 |
<strong><span style="color: #993300;">cv2.line(anh_ve, (60, 390), (400, 390), (0, 255, 0), 5)#(x1,y1),(x2,y2)</span></strong> <strong><span style="color: #993300;">cv2.imshow("Ve Hinh tren anh", anh_ve)#hien thi hình ảnh</span></strong> |
kết quả:
-Viết text lên hình ảnh theo code sau:
1 2 3 |
<strong><span style="color: #993300;">cv2.putText(anh_ve, "laptrinhai.net", (10, 25),</span></strong> <strong><span style="color: #993300;"> cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 255, 0), 2)</span></strong> <strong><span style="color: #993300;">cv2.imshow("Ve Hinh tren anh", anh_ve)#hien thi hình ảnh</span></strong> |
kết quả: