Python Requests: Cách Gửi Yêu Cầu HTTP Trong Python Cho Người Mới
Python requests là thư viện giúp bạn gửi yêu cầu HTTP như GET, POST tới website hoặc API chỉ với vài...
Uyên Hoàng Thị Tố
Đăng ngày 12/11/2026
OpenCV Python là thư viện mã nguồn mở giúp bạn đọc, chỉnh sửa và phân tích ảnh, video bằng vài dòng code. Bài viết hướng dẫn cài đặt, dùng module python cv2 để đổi màu, cắt ảnh, phát hiện cạnh và đếm vật thể. Mỗi ví dụ ngắn gọn, đã chạy thử và dùng được ngay cho người mới bắt đầu.
OpenCV là viết tắt của Open Source Computer Vision Library, thư viện thị giác máy tính mã nguồn mở. Thư viện được viết chủ yếu bằng C++ nên chạy nhanh. Python gọi tới phần lõi này qua một lớp kết nối.
Khi nói OpenCV Python, chúng tôi muốn nói tới bộ thư viện OpenCV dùng trong code Python. Bạn cài gói opencv-python, còn trong code bạn nhập module tên cv2.
Module python cv2 có mặt trong nhiều bài toán xử lý ảnh thực tế:
Chỉnh sửa ảnh: đổi kích thước, cắt, xoay, chuyển sang ảnh xám.
Lọc và làm nét: làm mờ để giảm nhiễu, tăng tương phản.
Phát hiện đặc trưng: tìm cạnh, tìm đường viền, đếm vật thể.
Xử lý video: đọc từng khung hình từ file hoặc webcam.
Chuẩn bị dữ liệu cho AI: đưa ảnh về cùng kích thước, cùng hệ màu trước khi huấn luyện mô hình.
Với học sinh muốn học sâu về AI, OpenCV là bước đầu để hiểu máy tính "nhìn" ảnh ra sao.
Bạn cài thư viện bằng pip, trình quản lý gói đi kèm Python.
Bước 1: Mở Terminal (macOS, Linux) hoặc Command Prompt (Windows).
Bước 2: Gõ lệnh cài đặt:
pip install opencv-python
Bước 3: Kiểm tra cài đặt thành công:
import cv2
print(cv2.__version__)
Nếu màn hình in ra số phiên bản, bạn đã sẵn sàng. NumPy được cài kèm tự động vì OpenCV lưu ảnh dưới dạng mảng NumPy.
Trên PyPI có nhiều gói python opencv với tên gần giống nhau. Bạn chỉ nên cài một gói:
| Gói | Có gì | Khi nào dùng |
|---|---|---|
opencv-python | Các module chính, có cửa sổ hiển thị ảnh | Học trên máy tính cá nhân |
opencv-contrib-python | Module chính và module mở rộng | Cần thuật toán nâng cao |
opencv-python-headless | Không có giao diện cửa sổ | Chạy trên máy chủ, Docker |
Cài nhiều gói cùng lúc dễ gây xung đột, khiến import cv2 báo lỗi.
Ba hàm đầu tiên bạn cần biết là imread(), imshow() và imwrite().
import cv2
anh = cv2.imread("meo.jpg") # đọc ảnh
if anh is None:
print("Không tìm thấy file ảnh")
else:
print(anh.shape) # (cao, rộng, số kênh màu)
cv2.imshow("Ảnh gốc", anh) # mở cửa sổ hiển thị
cv2.waitKey(0) # chờ bạn bấm một phím
cv2.destroyAllWindows()
cv2.imwrite("meo-ban-sao.jpg", anh) # lưu ảnh
Một điểm người mới hay bỏ qua: imread() không báo lỗi khi sai đường dẫn. Hàm chỉ trả về None. Vì vậy bạn nên kiểm tra bằng if như ví dụ trên.
Mỗi ảnh màu là một mảng ba chiều: chiều cao, chiều rộng và 3 kênh màu. Mỗi điểm ảnh (pixel) có giá trị từ 0 đến 255.
print(type(anh)) # <class 'numpy.ndarray'>
print(anh[100, 100]) # màu của pixel ở hàng 100, cột 100
Lưu ý quan trọng: OpenCV lưu màu theo thứ tự BGR, không phải RGB. Nếu bạn hiển thị ảnh bằng Matplotlib mà thấy màu bị đảo, hãy chuyển hệ màu trước.
Phần này gom những hàm bạn dùng nhiều nhất khi làm việc với OpenCV Python.
xam = cv2.cvtColor(anh, cv2.COLOR_BGR2GRAY) # ảnh xám, 1 kênh
rgb = cv2.cvtColor(anh, cv2.COLOR_BGR2RGB) # đổi sang RGB
Ảnh xám chỉ còn một kênh nên xử lý nhanh hơn. Đa số thuật toán tìm cạnh, tìm đường viền đều nhận ảnh xám.
nho = cv2.resize(anh, (200, 150)) # (rộng, cao)
vung = anh[50:200, 50:200] # [hàng, cột]
Hàm resize() nhận kích thước theo thứ tự (rộng, cao). Khi cắt bằng chỉ số, bạn viết theo thứ tự [hàng, cột], tức là cao trước, rộng sau. Cách cắt này giống cắt list, bạn xem thêm ở bài Python List.
mo = cv2.GaussianBlur(anh, (5, 5), 0) # làm mờ, giảm nhiễu
canh = cv2.Canny(xam, 100, 200) # tìm cạnh
Hàm Canny() trả về ảnh đen trắng, trong đó đường trắng là cạnh của vật thể. Hai số 100 và 200 là ngưỡng dưới và ngưỡng trên. Bạn thử tăng giảm để thấy số cạnh thay đổi.
Bảng dưới đây giúp bạn tra nhanh các hàm python cv2 trong bài:
| Hàm | Công dụng |
|---|---|
cv2.imread() | Đọc ảnh từ file |
cv2.imwrite() | Lưu ảnh ra file |
cv2.cvtColor() | Đổi hệ màu (xám, RGB, HSV) |
cv2.resize() | Đổi kích thước ảnh |
cv2.GaussianBlur() | Làm mờ, giảm nhiễu |
cv2.Canny() | Phát hiện cạnh |
cv2.threshold() | Chuyển ảnh xám thành ảnh nhị phân |
cv2.findContours() | Tìm đường viền vật thể |
Bài toán: một ảnh nền trắng có vài hình khối màu. Bạn cần đếm có bao nhiêu hình và vẽ khung quanh từng hình.
import cv2
anh = cv2.imread("hinh-khoi.jpg")
xam = cv2.cvtColor(anh, cv2.COLOR_BGR2GRAY)
# Vật thể tối hơn nền trắng: đảo ngưỡng để vật thể thành màu trắng
_, nhi_phan = cv2.threshold(xam, 200, 255, cv2.THRESH_BINARY_INV)
duong_vien, _ = cv2.findContours(
nhi_phan, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE
)
print("Số vật thể:", len(duong_vien))
for dv in duong_vien:
x, y, w, h = cv2.boundingRect(dv)
cv2.rectangle(anh, (x, y), (x + w, y + h), (0, 255, 0), 2)
cv2.imwrite("ket-qua.jpg", anh)
Chương trình đi qua 4 bước:
Chuyển ảnh xám để chỉ còn độ sáng.
Phân ngưỡng để tách vật thể khỏi nền.
Tìm đường viền ngoài cùng của từng vật thể.
Vẽ khung chữ nhật quanh mỗi đường viền rồi lưu ảnh.
Từ OpenCV 4, findContours() trả về 2 giá trị. Nếu bạn đọc code cũ viết cho OpenCV 3 thấy 3 giá trị, đó là khác biệt phiên bản. Vòng lặp duyệt từng đường viền dùng cú pháp for quen thuộc của Python.
Video là chuỗi ảnh liên tiếp. Bạn đọc từng khung hình bằng VideoCapture và xử lý như ảnh thường.
cam = cv2.VideoCapture(0) # 0 là webcam mặc định
while True:
ok, khung = cam.read()
if not ok:
break
cv2.imshow("Webcam", cv2.cvtColor(khung, cv2.COLOR_BGR2GRAY))
if cv2.waitKey(1) & 0xFF == ord("q"): # bấm q để thoát
break
cam.release()
cv2.destroyAllWindows()
ModuleNotFoundError: No module named 'cv2': chưa cài thư viện hoặc cài vào bản Python khác. Thử python -m pip install opencv-python.
Ảnh đọc ra None: sai đường dẫn, sai tên file hoặc đường dẫn có ký tự đặc biệt. Kiểm tra lại thư mục đang chạy code.
Màu ảnh bị đảo khi vẽ bằng Matplotlib: quên chuyển từ BGR sang RGB.
imshow() báo lỗi trên máy chủ hoặc Colab: môi trường không có màn hình. Lưu ảnh bằng imwrite() rồi mở file để xem.
Nhầm thứ tự kích thước: resize() dùng (rộng, cao), còn anh.shape trả về (cao, rộng, kênh).
Tên gói trên PyPI và tên module trong code là hai thứ khác nhau. Gói tên opencv-python, còn module bên trong được đặt tên cv2. Đây là quy ước của thư viện từ lâu.
Bạn cần nắm Python cơ bản: biến, kiểu dữ liệu, vòng lặp, hàm. Biết thêm NumPy sẽ giúp bạn hiểu ảnh là mảng số. Cách viết hàm để tái sử dụng code xử lý ảnh có ở bài Python def.
Có. OpenCV thường lo phần đọc và tiền xử lý ảnh, sau đó dữ liệu được đưa vào mô hình học máy. Hai công cụ này hay đi cùng nhau trong dự án nhận diện hình ảnh.
Bạn đã biết cách cài đặt, đọc và lưu ảnh, đổi màu, cắt, làm mờ, tìm cạnh và đếm vật thể. Hãy chụp một tấm ảnh trên bàn học rồi chạy lại từng ví dụ để thấy kết quả thật.
Đăng ký tài khoản miễn phí để học Python có hướng dẫn từng bước. Bạn nắm chắc nền tảng với khóa Nhập môn Lập trình Python. Sau đó, bạn đi tiếp với khóa Machine Learning cơ bản với Python Scikit-learn hoặc Lập trình Trí tuệ nhân tạo với Python. Gọi +84 989 534 458 để chúng tôi tư vấn lộ trình học AI, bắt đầu từ opencv python.
Python requests là thư viện giúp bạn gửi yêu cầu HTTP như GET, POST tới website hoặc API chỉ với vài...
Python for data analysis là cách dùng Python để làm sạch, thống kê và vẽ biểu đồ dữ liệu bằng Pandas...
Python set là kiểu dữ liệu lưu tập hợp các phần tử không trùng lặp và không có thứ tự, viết trong ng...