Tuesday, February 19, 2013

การจัดการค่าพิกเซล และ กลับสีรูป (Image Negative)

การประมวลผลภาพระดับพิกเซลเป็นกระบวนการที่สำคัญมากอย่างหนึ่ง ในที่นี้เราจะลองทำการกลับสีภาพ (Image Negative) เพื่อให้ได้ผลลัพธ์ดังนี้


โค้ดเป็นแบบนี้ครับ
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