- 2 ความคิดเห็น
ก่อนอื่นเรามาทำความรู้จักกับข้อมูลชนิดรูปภาพกันก่อนนะครับ รูปภาพ 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 ความคิดเห็น
ขอบคุณมากครับ เป็นบทความที่ดีมากสำหรับมือใหม่เเบบผมเลย ครับ
ผมจะนำวิธีนี้ไปใช้ในการ resize ภาพพอมีอะไรแนะนำได้บ้างไม๊ครับ พอดีอาจารย์ให้ทำการ แก้ภาพสี่เหลี่ยมคางหมูให้เป็นภาพปกติ ให้ใช้วิธีกระจาย pixel เอาอ่ะครับ
Post a Comment