Hôm nay mình sẽ hướng dẫn phần 1 trong seri về xử lý ảnh với opencv-python rất cơ bản . Bao gồm cách đọc ảnh , show ảnh … trong opencv chứ chưa đi vào cái sâu xa gì hết ♥. Phần xử lý ảnh với opencv-python không biết sẽ đi đến đâu tại mình vẫn đang trong quá trình tìm hiểu và đây là cái mình tìm hiểu được.

I.Chuẩn bị

  • Python 3 và visual code :
    • Các bạn setup tại bài hướng dẫn cài python cùng với visual code của mình tại : https://hongtin.net/laptrinh/laptrinh-python/bai-1-cai-dat-moi-truong-lap-trinh-python-tren-win-10/
  • thư viện opencv-python :
    • vào cmd gõ : “pip install opencv-python
  • Tạo thư mục opencv và tạo mới file opencv_basic.py và tải 1 hình ảnh bất kỳ và lưu tên test.jpg làm ảnh test , lấy cái ảnh ở đầu bài ấy :v. Cấu trúc thư mục như sau :

II. Tiến Hành

  • Copy đoạn code này vào rồi mình sẽ giải thích sau , mình có giairn thích khá kỹ trong code rồi , các bạn đọc code sẽ hiểu thôi !:

#Import only if not previously imported
import cv2
import numpy as np
from matplotlib import pyplot as plt 

img = cv2.imread("test.jpg",1)

# 1 la cv2.IMREAD_COLOR anh binh thuong
#0 la c2.IMREAD_GREYSCALE trang den
# thay doi kich co hinh anh
img2= cv2.resize(img ,(400,600)) #resize anh ve 400,600 luu vao bien img2
img2_name = "test2.jpg" 
cv2.imwrite(img2_name,img2) # caaus truc cv2.imwrite(tenfile,bien thay doi)
#hoac co the viet cv2,imwrite("test2.jpg",img2)

#ve lai anh voi thu vien matplotlib
plt.imshow(img, cmap = 'gray', interpolation = 'none') #cmap chinh mau
plt.xticks([]), plt.yticks([])  #an so tren 2 cot x,y
plt.show() #show hinh ve

#cat anh

img_cat = img[50:300,60:400,:]

cv2.imwrite("anhcat.jpg",img_cat)
cv2.imshow("anh cat",img_cat)

cv2.imshow("anh test",img2) #cau truc cv2.imshow("lable",ten anh can show)
key = cv2.waitKey(0)
if key == 27 : # 27 == esc
    cv2.destroyAllWindows() #tat cua so

  • đầu tiên là đọc ảnh : dùng hàm cv2.imread(“tên hình ảnh”,<chế độ đọc>)
  • Lưu ảnh tương tự : dùng hàm cv2.imwrite(“tên hình ảnh “,<biến ảnh cần lưu lại >)
  • Resize thì có nhiều cách để resize nhưng mình đang dùng cách tạo ra 1 biến ảnh resize xong lưu lại thành ảnh mới :
img2= cv2.resize(img ,(400,600)) #resize anh ve 400,600 luu vao bien img2
img2_name = "test2.jpg" 
cv2.imwrite(img2_name,img2)
  • Cắt ảnh thì không có gì cả , chỉ nhớ các tham số thế này thôi : img_cat = img_goc[ <x bắt đầu>:<x kết thúc> ,<y bắt đầu>:<y kết thúc> ,:]
    • sau đó lưu lại với hàm cv2.imwrite(“ten.jpg”,img_cat)
  • Vẽ lại ảnh trên matplotlib cũng không có gì khó cả :
    • đầu tiên vẽ hình ảnh với hàm plt.imshow(<ten bien anh>,cmap = “màu vẽ “, … nhiều lắm )
    • sau đó xóa số trên 2 cột x,y cho đẹp với plt.xticks[],plt.yticks[]
    • hiển thị hình vẽ lên với plt.show()
  • Show hình ảnh với hàm cv2.imshow(“lable”,<biến ảnh cần show>)

III.Tổng Kết

Thế là xong mấy cái cơ bản để làm việc với ảnh bằng opencv-python rồi . Chẳng có gì để bàn cả . Trong phần sau mình sẽ cố gắn đề cập tới mấy hàm khác dùng để xử lý nâng cao hơn nữa . Cảm ơn các bạn đã theo dõi !

Các bạn có thể xem thêm các bài viết khác tại đây