หากเรามีภาพสี และต้องการเปลี่ยนให้เป็นภาพขาวดำ จะทำได้อย่างไร
หลักการง่ายๆก็คือ หาค่าเฉลี่ยของแม่สีสามสี คือ น้ำเงิน เขียวและแดง นั่นคือ
G = (B+G+R)/3
อย่างไรก็ตาม เราพบว่าตาของเราตอบสนองต่อแม่สีทั้งสามต่างกัน จึงมีผู้เสนอให้ใช้สมการต่อไปนี้แทน
G = 0.114B + 0.587G + 0.299R
หากเราต้องการเขียนโปรแกรมใน OpenCV เพื่อตอบโจทย์นี้ เราต้อง
-สร้างรูปเปล่าที่เป็น grayscale ขึ้นเพื่อเก็บผลลัพธ์
-คำนวณผลรวมพิกเซลจากรูปสี แล้วบันทึกลงในพิกเซลของรูป grayscale ณ ตำแหน่งเดียวกัน
ตัวอย่างรหัสโปรแกรมจะเป็นดังนี้
ผลลัพธ์
จากโปรแกรมข้างต้น มีข้อสังเกตดังนี้
1. เราสร้างรูป grayscale เปล่าๆ ด้วยคำสั่ง
IplImage* out = cvCreateImage(cvGetSize(img), IPL_DEPTH_8U,1);
จากพารามิเตอร์ของคำสั่ง cvCreateImage จะอธิบายได้ว่า เราต้องการสร้างรูปที่มีขนาดเท่ากับรูปต้นฉบับ (cvGetSize(img)) ให้เป็นแบบ unsigned 8 บิต (IPL_DEPTH_8U) และมีเพียง 1 channel
2. เราใช้พอยน์เตอร์สองตัว ตัวแรกชี้ที่รูปต้นฉบับ อีกตัวชี้ที่รูปผลลัพธ์
3. OpenCV มีการเรียง channel เป็นแบบ blue green red
4. เราหาผลรวมของแต่ละสี แล้วใช้พอยน์เตอร์เปลี่ยนค่าของรูป grayscale
5. หากบันทึกรูปผลลัพธ์นี้ จะได้รูปที่เป็น 8 บิต grayscale ด้วย
No comments:
Post a Comment