Tài nguyên

Cheat sheet NumPy cho xử lý ảnh và AI

Tạo mảng, cắt ROI, mặt nạ, đổi hình dạng, tính toán vector hóa: các thao tác NumPy dùng nhiều nhất.

Cheat sheet NumPy cho xử lý ảnh và AI
Nội dung bài viết
  1. Tạo mảng
  2. Thông tin mảng
  3. Cắt, chọn và sửa
  4. Mặt nạ và điều kiện
  5. Đổi hình dạng và kiểu
  6. Tính toán vector hóa
  7. Lưu và đọc

Trang tra cứu nhanh các thao tác NumPy dùng nhiều nhất khi xử lý ảnh và dữ liệu cho AI. Ảnh OpenCV là mảng NumPy, nên thành thạo các lệnh dưới đây giúp bạn viết code ngắn gọn và nhanh hơn nhiều so với vòng lặp. Giả định đã có import numpy as np.

Tạo mảng

Việc cần làmCode
Ảnh đen 480×640 xám / màunp.zeros((480, 640), np.uint8) / np.zeros((480, 640, 3), np.uint8)
Ảnh trắngnp.full((480, 640), 255, np.uint8)
Mảng giống kích thước ảnh khácnp.zeros_like(img)
Dãy sốnp.arange(0, 10, 2), np.linspace(0, 1, 5)
Số ngẫu nhiên tái lập đượcrng = np.random.default_rng(0); rng.normal(0, 5, img.shape)

Thông tin mảng

Việc cần làmCode
Kích thước, số chiều, kiểua.shape, a.ndim, a.dtype
Số phần tử, dung lượnga.size, a.nbytes
Thống kêa.min(), a.max(), a.mean(), a.std(), np.median(a)
Thống kê theo kênh màuimg.mean(axis=(0, 1)) → 3 giá trị B, G, R
Phân vịnp.percentile(a, [1, 99])

Cắt, chọn và sửa

Việc cần làmCode
Cắt ROIroi = img[y:y+h, x:x+w] (là view, dùng .copy() nếu cần độc lập)
Một kênh màuimg[:, :, 2] (kênh R trong BGR)
Đảo BGR → RGBimg[:, :, ::-1]
Lật ngang / dọcimg[:, ::-1] / img[::-1]
Lấy mẫu thưa (giảm 2 lần)img[::2, ::2]
Gán theo mặt nạimg[mask > 0] = (0, 0, 255)

Mặt nạ và điều kiện

Việc cần làmCode
Mặt nạ điểm sángmask = gray > 200
Kết hợp điều kiện(gray > 50) & (gray < 200), dùng | cho "hoặc", ~ cho "không"
Đếm / tỷ lệmask.sum(), mask.mean()
Tọa độ các điểm thỏa mãnys, xs = np.nonzero(mask)
Chọn giá trị theo điều kiệnnp.where(mask, 255, 0).astype(np.uint8)
Cắt về khoảngnp.clip(a, 0, 255)

Đổi hình dạng và kiểu

Việc cần làmCode
Đổi kiểu tránh tràn sốimg.astype(np.int16), img.astype(np.float32) / 255
Làm phẳnga.ravel() (view nếu được), a.flatten() (luôn copy)
HWC → CHW (cho PyTorch)img.transpose(2, 0, 1)
Thêm chiều batchx[None] hoặc np.expand_dims(x, 0)
Ghép ảnh cạnh nhaunp.hstack([a, b]), np.vstack([a, b])
Xếp chồng thành batchnp.stack(list_anh)

Tính toán vector hóa

Việc cần làmCode
Khoảng cách giữa nhiều điểm và một điểmnp.linalg.norm(pts - p0, axis=1)
Histogram 256 mứcnp.bincount(gray.ravel(), minlength=256)
Chỉ số giá trị lớn nhấtnp.argmax(a); trong ảnh 2D: np.unravel_index(np.argmax(a), a.shape)
Sắp xếp giảm dầnnp.argsort(-scores)
Fitting đường thẳngk, b = np.polyfit(xs, ys, 1)

Lưu và đọc

  • np.save("a.npy", a) / np.load("a.npy")
  • Nhiều mảng: np.savez("calib.npz", K=K, dist=dist)

Xem thêm bài giải thích chi tiết NumPy cho xử lý ảnh và cheat sheet OpenCV-Python.

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í.