บทนำ
ภาพ Binary (Binary Image) มีเพียง 2 ค่าพิกเซล: 0 (สีดำ) และ 255 (สีขาว) ใช้ใน Morphological operations, Object extraction, OCR เป็นต้น OpenCV สร้างได้จากฟังก์ชัน threshold()
ขั้นตอนการสร้างภาพ Binary
- โหลดภาพสี
- แปลงเป็น Grayscale:
cvtColor(src, gray, COLOR_BGR2GRAY) - Threshold:
threshold(gray, binary, thresh, maxval, THRESH_BINARY)
ตัวอย่างโค้ด
#include <iostream>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
using namespace cv;
using namespace std;
int main() {
Mat original, gray, binary;
namedWindow("Original Image");
namedWindow("Show Binary");
original = imread("teddy.jpg");
cvtColor(original, gray, COLOR_BGR2GRAY);
threshold(gray, binary, 100, 255, THRESH_BINARY);
imshow("Original Image", original);
imshow("Show Binary", binary);
waitKey(0);
return 0;
}
โหมด Threshold ต่างๆ
| โหมด | คำอธิบาย | สูตร |
|---|---|---|
| THRESH_BINARY | มากกว่าเกณฑ์=maxval, น้อยกว่า=0 | dst = (src > thresh) ? maxval : 0 |
| THRESH_BINARY_INV | กลับของ BINARY | dst = (src > thresh) ? 0 : maxval |
| THRESH_TRUNC | มากกว่าเกณฑ์=เกณฑ์, น้อยกว่า=ค่าเดิม | dst = (src > thresh) ? thresh : src |
| THRESH_TOZERO | มากกว่าเกณฑ์=ค่าเดิม, น้อยกว่า=0 | dst = (src > thresh) ? src : 0 |
| THRESH_TOZERO_INV | กลับของ TOZERO | dst = (src > thresh) ? 0 : src |
Adaptive Threshold (สำหรับแสงไม่สม่ำเสมอ)
adaptiveThreshold(gray, binary, 255, ADAPTIVE_THRESH_GAUSSIAN_C,
THRESH_BINARY, 11, 2);
- คำนวณเกณฑ์จากพื้นที่รอบๆ แต่ละพิกเซล
- เหมาะสำหรับเอกสารถ่ายรูป, แสงไม่สม่ำเสมอ
Otsu's Threshold (เกณฑ์อัตโนมัติ)
threshold(gray, binary, 0, 255, THRESH_BINARY | THRESH_OTSU);
- คำนวณเกณฑ์อัตโนมัติจาก Histogram
- ไม่ต้องระบุค่า thresh (ใส่ 0)
ผลลัพธ์

สรุป
ภาพ Binary สร้างง่ายด้วย threshold() หลังแปลง Grayscale แล้ว เลือกโหมดและวิธีหาเกณฑ์ (Fixed, Adaptive, Otsu) ตามลักษณะภาพและวัตถุประสงค์