Menu

Tuesday, October 15, 2013

[EmguCV] วิธีการเข้าถึงพิกเซลของภาพ
[EmguCV] How to Access Pixels of Image

สมมติให้
Suppose that
  1. Image<Bgr,byte> img = new Image<Bgr,byte>();

มีสองวิธีสำหรับการเข้าถึงพิกเซลตำแหน่งแถวที่ y และหลักที่ x ของ img
There are two ways to access the pixel on the y-th row and x-th column of img

วิธีที่ปลอดภัยแต่ช้า คือ ใช้ img[y,x]
The safe way, but slow, is using img[y,x]

สำหรับการอ่านข้อมูลพิกเซล
To get pixel data,
  1. Bgr color = img[y,x];

สำหรับการเขียนข้อมูลพิกเซล
To set pixel data,
  1. img[y,x] = new Bgr(255,0,0);

วิธีที่รวดเร็ว คือ ใช้ img.Data[y,x,channel]
The fast way is using img.Data[y,x,channel]

สำหรับการอ่านข้อมูลพิกเซล
To get pixel data,
  1. byte color = img.Data[y,x,channel];

สำหรับการเขียนข้อมูลพิกเซล
To set pixel data,
  1. img.Data[y,x,channel] = 255;

channel คือ ช่องสีของ img
channel is the channel of img 
  • 0 is Blue
  • 1 is Green
  • 2 is Red 

สำหรับลูป วิธีการที่แนะนำเป็นตามโค้ดข้างล่าง
For a loop, the recommended way is below
  1. byte[,,] img_data = img.Data;
  2. for(int i = 0; i < img.Height; i++)
  3. {
  4.      for(int j=0; j < img.Width; j++)
  5.      {
  6.           img_data[y,x,0] = 255;
  7.      }
  8. }

หมายเหตุ: เราไม่ควรใช้ C# property ภายในลูป เพราะมันใช้เวลานาน
Notice: we should not use C# property inside a loop because it takes long time

No comments:

Post a Comment