การเข้าถึง pixel ในรูปภาพ แบบฉบับ EmguCV
     ก่อนอื่นเรามาทำความรู้จักกับข้อมูลชนิดรูปภาพกันก่อนนะครับ รูปภาพ 1 รูป ภายในจะประกอบไปด้วย pixel จำนวนมากเรียงต่อกันเป็นอาเรย์ 2 มิติ ตามขนาดของรูปนั้นๆ เช่น ผมมีรูปชนิด gray scale ขนาด 10*10 ตามรูป
รูปภาพที่ 1 แสดงตัวอย่างข้อมูลรูปภาพ

จะเห็นได้ว่าที่ตำแหน่ง 0,0 (มุมซ้ายบนสุด) จะมีค่า pixel = 0 ซึ่งค่า pixel = 0 นั้นจะหมายถึงสีดำนะครับ
เอาล่ะครับมาเข้าเรื่องของเรากันดีกว่า ใน emgu Cv นั้น ถ้าเราต้องการเข้าไปเปลี่ยนข้อมูลรูปภาพในระดับ pixel นั้นสามารถทำได้ไม่ยาก โดยอาศัยหลักการอยู่ 2 วิธีดังต่อไปนี้นะครับ
  • Get pixel  value from image (อ่านข้อมูลจากรูปภาพ) 
                       //รูปภาพชนิด Bgr   ;  x = rows , y = colom
                       Bgr  bgrPix = img[x,y];

               //รูปภาพชนิด Gray scale ; x = rows , y = colom
               Gray  grayPix = img[x, y];
  • Set pixel value to image (เซ็ตค่าให้กับรูปภาพ)
                       //รูปภาพชนิด Bgr   ;  x = rows , y = colom
                       img[x, y] = new Bgr(Color.Red);

                       //รูปภาพชนิด Gray scale ; x = rows , y = colom
                        img [x,y] = new Gray(0);  
  
          ตัวอย่าง การเซ็คค่า pixel ให้เป็นสีแดง
          Image<Bgr, Byte> img = new Image<Bgr, Byte>("img.jpg") ;
          showOriginImg.Image = img.ToBitmap();          //แสดงรูปภาพต้นฉบับ
          for (int i = 0; i < img.Height; i++) 
         {  
               for (int j = 0; j < img.Width; j++)
               {
                    img[i, j] = new Bgr(Color.Red);
               }
          }
         showResultImg.Image = img.ToBitmap();           //แสดงรูปภาพผลลัพธ์


รูปที่ 2 ฝั่งซ้ายเป็นภาพต้นฉบับ  ฝั่งขวาเป็นภาพผลลัพธ์



2 ความคิดเห็น

July 11, 2013 at 2:17 PM

ขอบคุณมากครับ เป็นบทความที่ดีมากสำหรับมือใหม่เเบบผมเลย ครับ

Reply
September 7, 2013 at 3:07 PM

ผมจะนำวิธีนี้ไปใช้ในการ resize ภาพพอมีอะไรแนะนำได้บ้างไม๊ครับ พอดีอาจารย์ให้ทำการ แก้ภาพสี่เหลี่ยมคางหมูให้เป็นภาพปกติ ให้ใช้วิธีกระจาย pixel เอาอ่ะครับ

Reply

Post a Comment

Templated by Blogger Items