บทนำ
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: ฟอนต์หนาแบบ TripleFONT_HERSHEY_DUPLEX: ฟอนต์ DuplexFONT_HERSHEY_SCRIPT_SIMPLEX: ฟอนต์มือเขียนFONT_HERSHEY_SCRIPT_COMPLEX: ฟอนต์มือเขียนแบบซับซ้อน
ผลลัพธ์

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