บทนำ
OpenCV ใช้ฟังก์ชัน imwrite() บันทึกภาพ ไฟล์จะถูกเข้ารหัสตามนามสกุล (.jpg, .png, .bmp, .tiff, .webp)
Syntax
imwrite(filename, image, params);
ตัวอย่างโค้ด
#include <iostream>
#include <opencv2/highgui/highgui.hpp>
using namespace cv;
using namespace std;
int main() {
Mat img = imread("lena.png");
if (img.empty()) {
cout << "โหลดภาพไม่สำเร็จ" << endl;
return -1;
}
// บันทึกแบบพื้นฐาน
bool success = imwrite("output.jpg", img);
if (success) {
cout << "บันทึกภาพสำเร็จ: output.jpg" << endl;
} else {
cout << "บันทึกภาพล้มเหลว" << endl;
}
return 0;
}
ตั้งค่าคุณภาพภาพ (JPEG Quality, PNG Compression)
#include <vector>
// JPEG Quality: 0-100 (default 95)
vector<int> jpgParams = {IMWRITE_JPEG_QUALITY, 90};
imwrite("high_quality.jpg", img, jpgParams);
imwrite("low_quality.jpg", img, {IMWRITE_JPEG_QUALITY, 50});
// PNG Compression: 0-9 (default 3)
vector<int> pngParams = {IMWRITE_PNG_COMPRESSION, 9};
imwrite("compressed.png", img, pngParams);
// TIFF Compression
vector<int> tiffParams = {IMWRITE_TIFF_COMPRESSION, 5}; // LZW
imwrite("compressed.tiff", img, tiffParams);
พารามิเตอร์ที่รองรับ
| Parameter | ช่วงค่า | ค่าเริ่มต้น | Format |
|---|---|---|---|
| IMWRITE_JPEG_QUALITY | 0-100 | 95 | JPEG |
| IMWRITE_JPEG_PROGRESSIVE | 0/1 | 0 | JPEG |
| IMWRITE_PNG_COMPRESSION | 0-9 | 3 | PNG |
| IMWRITE_PNG_STRATEGY | 0-4 | 0 | PNG |
| IMWRITE_WEBP_QUALITY | 1-100 | 95 | WEBP |
| IMWRITE_TIFF_COMPRESSION | 1-5 | 1 | TIFF |
ผลลัพธ์
Image is saved successfully...
ข้อควรระวัง
- ตรวจสอบค่าคืน (bool) เสมอเพื่อยืนยันการบันทึก
- นามสกุลไฟล์กำหนด Format (ไม่ใช่พารามิเตอร์)
- JPEG: Lossy compression, ไม่รองรับ Alpha channel
- PNG: Lossless, รองรับ Alpha, ไฟล์ใหญ่กว่า
- Path ต้องถูกต้องและมีสิทธิ์เขียน