Tách 3 màu rgb từ 1 bức ảnh OpenCV + numpy

by Pymier0

img

Cách biểu diễn màu trên máy tính phổ biến dùng hệ màu RGB với 3 màu Red Green Blue (đỏ - xanh lục - xanh lam). Khi đọc file ảnh vào bằng opencv, mặc định sẽ có 1 array dạng (dài, rộng, 3), với 3 là 3 “kênh” màu. Để tách riêng 3 kênh màu, ta giữ nguyên 1 kênh, và gán 2 kênh còn lại bằng 0 (sử dụng numpy - vì 1 bức ảnh đọc vào từ opencv là 1 numpy ndarray).

# $ python bgr.py ~/Pictures/python-logo.png
import sys
import cv2 as cv

cim = cv.imread(sys.argv[1])
c1 = cim.copy()
c1[:, :, 1:] = 0
cv.imwrite("blue.png", c1)

c2 = cim.copy()
c2[:,:,0] = 0
c2[:,:,2] = 0
cv.imwrite("green.png", c2)

c3 = cim.copy()
c3[:,:,:2] = 0
cv.imwrite("red.png", c3)
print("Done")

python-logo blue blue blue

Kết quả thu được 3 bức ảnh với màu lần lượt là xanh lam, xanh lục, đỏ (BGR). Theo “cộng đồng mạng StackOverflow”, đó là do “lịch sử” để lại, khi mà OpenCV dùng BGR chứ không theo thứ tự phổ biến RGB.

Hết.

Đăng ký ngay tại PyMI.vn để học Python tại Hà Nội TP HCM (Sài Gòn), trở thành lập trình viên #python chuyên nghiệp ngay sau khóa học.