การอ่านพิกเซล จะทำได้โดย
1. อ่านพิกเซลของรูปทั้งหมด แล้วนำไปเก็บไว้ในโครงสร้างข้อมูลที่เรียกว่า pixel access object ที่มีลักษณะคล้ายกับตัวแปรชุดสองมิติ (2D array) โดยใช้คำสั่ง load ดังนี้
pix = im.load()
2. สามารถอ่านค่าของแต่ละพิกเซล โดยใช้คำสั่ง
pix[x,y]
เมื่อ x และ y เป็นพิกัด เริ่มต้นที่มุมซ้ายบน (0,0)
การแก้ไขค่าพิกเซล หลังจากอ่านค่าพิกเซลทั้งหมดแล้ว ทำได้โดย
pix[x,y] = value
ถ้าเป็นรูป grayscale ค่า value จะเป็นเลขโดดๆ ตั้งแต่ 0 ถึง 255
ถ้าเป็นรูป RGB ค่า value จะเป็นเลขชุด เช่น (100,100,100)
ลองดูการเพิ่มเมนูเพื่อทำการกลับสีรูป (inverse) เพื่อให้ได้ผลลัพธ์ดังนี้
โค้ดเฉพาะส่วนของฟังก์ชันนี้ คือ
def imgInverse(self): #load an image reference to a special structure like a list pix = self.im.load() #print pix[0,0] #get image size w,h = self.im.size #if grayscale image if self.im.mode=="L": #loop for each row and column for r in range(h): for c in range(w): pix[c,r] = 255 - pix[c,r] #Note that we can use getpixel(x,y) and putpixel(x,y) #but this method is faster elif self.im.mode=="RGB": #loop for each row and column for r in range(h): for c in range(w): p = pix[c,r] pix[c,r] = (255-p[0],255-p[1],255-p[2]) self.showImage()
ลองเอาไปเชื่อมต่อกับโค้ดก่อนหน้านี้ได้ครับ
อ้างอิง
http://effbot.org/zone/pil-pixel-access.htm
No comments:
Post a Comment