โค้ดเป็นแบบนี้ครับ
import cv2 #read image img = cv2.imread('lena.jpg',cv2.CV_LOAD_IMAGE_UNCHANGED) #get image's size rows,cols = img.shape[:2] cv2.imshow('Origin',img) #loop for every row and column for r in range(rows): for c in range(cols): img[r,c] = 255-img[r,c] #Invert color cv2.imshow('Invert',img) cv2.waitKey() cv2.destroyAllWindows()
หมายเหตุ
- เราสามารถเข้าถึงแต่ละพิกเซลโดยใช้คำสั่ง img[r,c] ซึ่งคือพิกเซลในทุก channel (BGR)
- หากต้องการเข้าถึงพิกเซลใน channel ใดๆ เช่น สีน้ำเงิน สามารถใช้คำสั่ง img[r,c,0] ได้ หรือ img[r,c,1] สำหรับสีเขียว เป็นต้น
ดังนั้นส่วนของการประมวลผลลูปข้างต้น สามารถเขียนใหม่ได้ว่า
import cv2 #read image img = cv2.imread('lena.jpg',cv2.CV_LOAD_IMAGE_UNCHANGED) #get image's size rows,cols = img.shape[:2] cv2.imshow('Origin',img) #loop for every row, column and channel for r in range(rows): for c in range(cols): for k in range(3): img[r,c,k] = 255-img[r,c,k] #Invert color cv2.imshow('Invert',img) cv2.waitKey() cv2.destroyAllWindows()
ซึ่งแน่นอนครับ จะประมวลผลช้าลงกว่าเดิมมาก
No comments:
Post a Comment