Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

วิธีสร้างภาพ Binary ใน OpenCV C++

บทนำ

ภาพ Binary (Binary Image) มีเพียง 2 ค่าพิกเซล: 0 (สีดำ) และ 255 (สีขาว) ใช้ใน Morphological operations, Object extraction, OCR เป็นต้น OpenCV สร้างได้จากฟังก์ชัน threshold()

ขั้นตอนการสร้างภาพ Binary

  1. โหลดภาพสี
  2. แปลงเป็น Grayscale: cvtColor(src, gray, COLOR_BGR2GRAY)
  3. 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, น้อยกว่า=0dst = (src > thresh) ? maxval : 0
THRESH_BINARY_INVกลับของ BINARYdst = (src > thresh) ? 0 : maxval
THRESH_TRUNCมากกว่าเกณฑ์=เกณฑ์, น้อยกว่า=ค่าเดิมdst = (src > thresh) ? thresh : src
THRESH_TOZEROมากกว่าเกณฑ์=ค่าเดิม, น้อยกว่า=0dst = (src > thresh) ? src : 0
THRESH_TOZERO_INVกลับของ TOZEROdst = (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 ใน OpenCV C++

สรุป

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