Trang chủ / Tài nguyên
Tài nguyên
Cheat sheet OpenCV-Python: các hàm dùng nhiều nhất
Trang tra cứu nhanh đọc ghi ảnh, màu sắc, lọc, phân ngưỡng, contour, đo đạc, so khớp mẫu, vẽ kết quả và 5 lỗi hay gặp.
Nội dung bài viết Đọc, ghi, hiển thị Màu sắc và kích thước Lọc và làm mờ Phân ngưỡng và hình thái học Cạnh, contour và đo đạc So khớp mẫu và hình học Vẽ kết quả 5 lỗi hay gặp
Trang tra cứu nhanh các hàm OpenCV-Python dùng nhiều nhất trong xử lý ảnh và Machine Vision. Lưu lại để dùng khi viết code. Mọi ví dụ giả định đã có import cv2 và import numpy as np.
Đọc, ghi, hiển thị
Việc cần làm Code
Đọc ảnh màu / xám cv2.imread(p) / cv2.imread(p, cv2.IMREAD_GRAYSCALE)
Đọc đường dẫn có dấu (Windows) cv2.imdecode(np.fromfile(p, np.uint8), cv2.IMREAD_COLOR)
Ghi ảnh cv2.imwrite("out.png", img)
Hiển thị cv2.imshow("win", img); cv2.waitKey(0)
Mở camera / video cap = cv2.VideoCapture(0); ok, frame = cap.read()
Màu sắc và kích thước
Việc cần làm Code
BGR → xám / HSV / RGB cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) (…2HSV, …2RGB)
Lọc dải màu cv2.inRange(hsv, lower, upper)
Đổi kích thước cv2.resize(img, (w, h), interpolation=cv2.INTER_AREA)
Cắt ROI roi = img[y:y+h, x:x+w]
Xoay 90° cv2.rotate(img, cv2.ROTATE_90_CLOCKWISE)
Lật cv2.flip(img, 1) (1 ngang, 0 dọc)
Lọc và làm mờ
Việc cần làm Code
Gaussian blur cv2.GaussianBlur(img, (5, 5), 0)
Median (nhiễu muối tiêu) cv2.medianBlur(img, 5)
Giữ biên khi làm mịn cv2.bilateralFilter(img, 9, 75, 75)
Cân bằng histogram cục bộ cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8, 8)).apply(gray)
Phân ngưỡng và hình thái học
Việc cần làm Code
Ngưỡng cố định _, th = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
Otsu t, th = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
Thích nghi cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 31, 5)
Kernel k = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5, 5))
Co / giãn cv2.erode(th, k) / cv2.dilate(th, k)
Mở (xóa đốm) / đóng (lấp lỗ) cv2.morphologyEx(th, cv2.MORPH_OPEN, k) / cv2.MORPH_CLOSE
Cạnh, contour và đo đạc
Việc cần làm Code
Phát hiện cạnh Canny cv2.Canny(gray, 50, 150)
Tìm contour cnts, hier = cv2.findContours(th, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
Diện tích / chu vi cv2.contourArea(c) / cv2.arcLength(c, True)
Khung bao thẳng / xoay cv2.boundingRect(c) / cv2.minAreaRect(c)
Đường tròn bao nhỏ nhất (x, y), r = cv2.minEnclosingCircle(c)
Tâm M = cv2.moments(c); cx = M["m10"] / M["m00"]
Bao lồi cv2.convexHull(c)
Xấp xỉ đa giác cv2.approxPolyDP(c, 0.02 * cv2.arcLength(c, True), True)
Đánh nhãn vùng liền khối n, labels, stats, cents = cv2.connectedComponentsWithStats(th)
Tìm đường tròn cv2.HoughCircles(gray, cv2.HOUGH_GRADIENT, 1.2, 20, param1=100, param2=30)
So khớp mẫu và hình học
Việc cần làm Code
Template matching res = cv2.matchTemplate(gray, tpl, cv2.TM_CCOEFF_NORMED); _, score, _, loc = cv2.minMaxLoc(res)
Xoay/dịch ảnh M = cv2.getRotationMatrix2D(center, angle, 1.0); cv2.warpAffine(img, M, (w, h))
Biến đổi phối cảnh H = cv2.getPerspectiveTransform(src4, dst4); cv2.warpPerspective(img, H, (w, h))
Khử méo ống kính cv2.undistort(img, K, dist)
Đọc mã QR text, pts, _ = cv2.QRCodeDetector().detectAndDecode(img)
Vẽ kết quả
Việc cần làm Code
Hình chữ nhật / tròn / đường cv2.rectangle(img, p1, p2, (0, 255, 0), 2), cv2.circle, cv2.line
Vẽ contour cv2.drawContours(img, cnts, -1, (0, 0, 255), 2)
Chữ cv2.putText(img, "OK", (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)
5 lỗi hay gặp
imread trả về None mà không báo lỗi: luôn kiểm tra.
Nhầm thứ tự BGR và RGB khi hiển thị bằng matplotlib.
Nhầm img[y, x] với (x, y) trong hàm vẽ.
Cộng trừ ảnh uint8 bị tràn số: dùng cv2.add/cv2.subtract hoặc đổi kiểu dữ liệu.
findContours cần ảnh nhị phân 8 bit một kênh, vật màu trắng trên nền đen.
Tài liệu đầy đủ: docs.opencv.org . Xem thêm bài cách tra cứu tài liệu hiệu quả .
HF
Ban biên tập HọcFree
Chúng tôi viết những bài hướng dẫn dễ hiểu, thực tế để ai cũng có thể tự học lập trình và ngoại ngữ, hoàn toàn miễn phí.