- NumPy Array
- มี 1,2,3,4 channels
- มีค่าพิกเซลเป็น uint8
- รูปสีจะเป็น BGR
ในการเข้าถึงแต่ละพิกเซล ถ้าเป็นรูปขาวดำ หรือสีเทา (channel=1) เราทำได้โดย
img[row,column]
ถ้าเป็นรูปสี BGR (channel = 3) เราจะใช้
img[row,column,channel]
ซึ่งแตกต่างกับ array 3 มิติเล็กน้อยที่จะใช้ img[channel,row,column]
ถ้าเราต้องการเฉพาะ channel ใดๆ ก็สามารถแยกออกมาได้ เช่น
blue = img[...,0] #same as img[:,:,0]
ตัวแปร blue ก็จะอ้างถึง channel สีน้ำเงินในรูป
หากเราเปลี่ยนค่าตัวแปร blue รูปต้นฉบับจะเปลี่ยนตาม
หากไม่ต้องการให้รูปต้นฉบับเปลี่ยน ต้องทำสำเนาไป เช่น
blue = img[...,0].copy()
import cv2 import numpy as np img = cv2.imread('lena.jpg') blue = img[...,0].copy() green = img[...,1].copy() red = img[...,2].copy() cv2.imshow("Blue",blue) cv2.imshow("Red",red) cv2.imshow("Green",green) cv2.waitKey() cv2.destroyAllWindows()
หากต้องการให้เห็นแต่ละสีในสีนั้นๆ
ก็ปรับโค้ดเล็กน้อยครับ
import cv2 import numpy as np img = cv2.imread('lena.jpg') blue = np.zeros_like(img) blue[...,0] = img[...,0].copy() green = np.zeros_like(img) green[...,1] = img[...,1].copy() red = np.zeros_like(img) red[...,2] = img[...,2].copy() cv2.imshow("Blue",blue) cv2.imshow("Red",red) cv2.imshow("Green",green) cv2.waitKey() cv2.destroyAllWindows()
หรือ
import cv2 import numpy as np img = cv2.imread('lena.jpg') blue = img.copy() blue[...,1:3] = 0 green = img.copy() green[...,0:3:2] = 0 red = img.copy() red[...,0:2] = 0 cv2.imshow("Blue",blue) cv2.imshow("Red",red) cv2.imshow("Green",green) cv2.waitKey() cv2.destroyAllWindows()
OpenCV ก็มีคำสั่งสำเร็จรูปสำหรับการแยก channel คือ คำสั่ง split() ลองดูตัวอย่างการใช้งานครับ
import cv2 import numpy as np img = cv2.imread("lena.jpg") out = cv2.split(img) cv2.imshow("Blue",out[0]) cv2.imshow("Green",out[1]) cv2.imshow("Red",out[2]) cv2.waitKey() cv2.destroyAllWindows()
ก็จะได้ผลลัพธ์เหมือนตัวอย่างแรกครับ
No comments:
Post a Comment