Hướng dẫn dùng pyplot imshow python

Sử dụng hàm cv2.imread[] để đọc hình ảnh. Hình ảnh phải nằm trong thư mục đang làm việc hoặc cung cấp đường dẫn đầy đủ của hình ảnh cần hiển thị.

Đối số thứ hai [bên trong ngoặc] là một cờ chỉ định cách hình ảnh sẽ được đọc, trong đó:

  • IMREAD_COLOR [1]: Tải hình ảnh màu và bỏ qua chế độ trong suốt. Đây là cờ mặc định.
  • IMREAD_GRAYSCALE [0]: Tải hình ảnh ở chế độ xám.
  • IMREAD_UNCHANGED [-1]: Tải hình ảnh bao gồm kênh alpha [có chế độ trong suốt.

Ghi chú: Có thể truyền theo tên đầy đủ, hoặc thay thế bằng các số 1, 0, -1.

Xem đoạn code ví dụ bên dưới:

    1. import numpy as np

    2. import cv2

    3. 

    4. # Load một hình ảnh màu ở chế độ xám

    5. img = cv2.imread['Lampard.jpg', 0]

2. Hiển thị một hình ảnh

Sử dụng hàm cv2.imshow[] để hiển thị hình ảnh trong cửa sổ. Cửa sổ tự động phù hợp với kích thước hình ảnh [Nếu sử dụng hàm print[] để in ra kết quả, sẽ nhận được ma trận các số trên màn hình].

Đối số đầu tiên bên trong “[]” là tên cửa sổ hiển thị hình ảnh [có thể đặt tên bất kỳ, tốt nhất là tiếng anh hoặc tiếng Việt không dấu để tránh lỗi phông]. Đối số thứ hai là hình ảnh cần hiển thị. Có thể tạo ra bao nhiêu cửa sổ tùy thích, chỉ cần đặt tên các cửa sổ khác nhau.

    6. cv2.imshow['Anh Lampard’,img]

    7. cv2.waitKey[0]

    8. cv2.destroyAllWindows[]

Lưu đoạn code trên thành file “intro.py” rồi đưa vào cùng thư mục với file ảnh. Mở cmd dưới dạng “Administratrion” và truy cập vào thư mục chứa đoạn code intro.py theo lệnh sau [ví dụ đang để ở thư mục D:\Com-vision\Bai2]: cd /d D:\Com-vision\Bai2.

Trên cửa sổ cmd, gõ lệnh “python intro.py” để chạy đoạn code. Kết quả hiển thị trên màn hình:

 

cv2.waitKey[] là một hàm liên kết bàn phím. Đối số của nó là thời gian tính bằng mili giây. Hàm sẽ đợi một mili giây được chỉ định cho bất kỳ sự kiện bàn phím nào. Nếu bạn nhấn bất kỳ phím nào trong thời gian đó, chương trình sẽ tiếp tục. Nếu 0 được truyền vào, nó sẽ đợi vô hạn. Nó cũng có thể được thiết lập lựa chọn các phím cụ thể như: nếu phím “q” được nhấn, sẽ thực hiện lệnh ngừng thực thi đoạn code, ...

cv2.destroyAllWindows[] chỉ đơn giản là hủy bỏ tất cả các cửa sổ đã tạo. Nếu muốn hủy bất kỳ cửa sổ cụ thể nào, chỉ cần truyền tên cửa sổ đó làm đối số.

Ghi chú: Sau khi đã hiển thị cửa sổ hình ảnh, bạn có thể chỉ định xem cửa sổ đó có thể thay đổi kích thước hay không. Điều này được thực hiện với hàm cv2.nameWindow[]. Theo mặc định, cờ là cv2.WINDOW_AUTOSIZE. Nhưng nếu chỉ định cờ khác như cv2.WINDOW_NORMAL, bạn có thể thay đổi kích thước cửa sổ.

Xem đoạn code bên dưới [thay cho đoạn code từ 6-8 bên trên]:

    6. cv2.namedWindow['Anh Lampard', cv2.WINDOW_NORMAL]

    7. cv2.imshow['Anh Lampard',img]

    8. cv2.waitKey[0]

    9. cv2.destroyAllWindows[]

Kết quả hiển thị hình ảnh vẫn như trên, chỉ khác là cửa sổ hình ảnh lúc này có thể kéo/thả để thay đổi kích thước.

3. Lưu lại [ghi lại] một hình ảnh

Sử dụng hàm cv2.imwrite[] để lưu ảnh. Đối số đầu tiên là tên tệp, đối số thứ hai là hình ảnh bạn muốn lưu:

    6. cv2.imwrite['Lampard_gray.png',img]

Sau khi chạy đoạn code, bạn sẽ nhận thêm được bức ảnh Lampard_gray.png trong cùng thư mục đó.

4. Tổng kết lại

Chương trình bên dưới [lưu thành file intro2.py và chạy theo cách tương tự] tải một hình ảnh trong thang độ xám, hiển thị nó, lưu hình ảnh nếu bạn nhấn ‘s’ và thoát, hoặc chỉ cần thoát mà không lưu nếu bạn nhấn phím ESC:

    1. import numpy as np

    2. import cv2

    3.

    4. img = cv2.imread['Lampard.jpg', 0]

    5. cv2.imshow['Anh Lampard', img]

    6. k = cv2.waitKey[0]

    7. if k == 27: # Đợi nhấn phím ESC để thoát

    8. cv2.destroyAllWindows[]

    9. elif k == ord['s']: # Đợi nhấn phím ‘s’ để lưu và thoát

   10. cv2.imwrite['Lampard_gray.png', img]

   11. cv2.destroyAllWindows[]

Chú ý: Nếu bạn đang sử dụng hệ điều hành 64 bit, cần phải sửa đổi dòng k = cv2.waitKey[0] như sau: k = cv2.waitKey [0] & 0xFF

II. Sử dụng Matplotlib

Matplotlib là một thư viện vẽ đồ thị cho Python. Phần này chỉ giới thiệt qua về cách hiển thị hình ảnh với Matplotlib. Có thể thu phóng hình ảnh, lưu ảnh, ... bằng Matplotlib. Ví dụ:

    1. import numpy as np

    2. import cv2

    3. from matplotlib import pyplot as plt

    4. 

    5. img = cv2.imread['Lampard.jpg',0]

    6. plt.imshow[img, cmap = 'gray', interpolation = 'bicubic']

    7. plt.xticks[[]], plt.yticks[[]] # Bỏ các dấu tick trên trục X và Y

    8. plt.show[]

Lưu đoạn code trên thành intro3.py, kết quả nhận được sau khi chạy nó:

Ghi chú: Hình ảnh màu được OpenCV tải ở chế độ BGR. Nhưng Matplotlib hiển thị ở chế độ RGB. Vì vậy, hình ảnh màu sẽ không được hiển thị chính xác trong Matplotlib nếu nó được đọc bằng OpenCV.

Chủ Đề