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

วิธีใส่ข้อความลงในภาพด้วย OpenCV C++

บทนำ

OpenCV มีฟังก์ชัน putText() สำหรับเขียนข้อความลงในภาพ ซึ่งอยู่ใน header <opencv2/imgproc/imgproc.hpp> ฟังก์ชันนี้ต้องการพารามิเตอร์หลักๆ ได้แก่ ตำแหน่งเริ่มต้น ฟอนต์ สี และความหนาของตัวอักษร

Syntax พื้นฐาน

putText(image, "ข้อความ", position, fontFace, fontScale, color, thickness);

ตัวอย่างโค้ด

#include <iostream>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <string>
using namespace cv;
using namespace std;

int main() {
    // สร้างเมทริกซ์ 400x400 พิกเซล สีขาว (255,255,255)
    Mat image = Mat(400, 400, CV_8UC3, Scalar(255, 255, 255));
    
    Point text_position(80, 80);      // ตำแหน่งเริ่มต้น (x, y)
    int font_size = 1;                 // ขนาดฟอนต์
    Scalar font_Color(0, 0, 0);        // สีดำ (B, G, R)
    int font_weight = 2;               // ความหนาตัวอักษร
    
    putText(image, "Text in Images", text_position, 
            FONT_HERSHEY_COMPLEX, font_size, font_Color, font_weight);
    
    imshow("Image", image);
    waitKey(0);
    return 0;
}

พารามิเตอร์สำคัญของ putText

พารามิเตอร์คำอธิบาย
imageเมทริกซ์ปลายทางที่จะเขียนข้อความ
textข้อความที่ต้องการเขียน (string)
positionจุดเริ่มต้นด้านล่างซ้ายของข้อความ (Point)
fontFaceรูปแบบฟอนต์ (FONT_HERSHEY_SIMPLEX, COMPLEX, TRIPLEX, 等)
fontScaleตัวคูณขนาดฟอนต์ (1.0 = ขนาดปกติ)
colorสีตัวอักษร (Scalar B,G,R)
thicknessความหนาของเส้นตัวอักษร

ฟอนต์ที่รองรับ

  • FONT_HERSHEY_SIMPLEX: ฟอนต์ธรรมดา ไม่มีขา
  • FONT_HERSHEY_COMPLEX: ฟอนต์มีขา (Serif)
  • FONT_HERSHEY_TRIPLEX: ฟอนต์หนาแบบ Triple
  • FONT_HERSHEY_DUPLEX: ฟอนต์ Duplex
  • FONT_HERSHEY_SCRIPT_SIMPLEX: ฟอนต์มือเขียน
  • FONT_HERSHEY_SCRIPT_COMPLEX: ฟอนต์มือเขียนแบบซับซ้อน

ผลลัพธ์

วิธีใส่ข้อความลงในภาพด้วย OpenCV C++

เคล็ดลับเพิ่มเติม

  • ใช้ getTextSize() คำนวณขนาดข้อความก่อนวาด เพื่อจัดตำแหน่งให้ตรงกลาง
  • สามารถใส่เงา (shadow) ได้โดยวาดข้อความ 2 ครั้ง สีต่างกัน เลื่อนตำแหน่งเล็กน้อย
  • รองรับ Unicode ได้จำกัด ต้องใช้ FreeType สำหรับภาษาไทย/จีน/ญี่ปุ่น