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

วิธีบันทึกภาพใน OpenCV C++

บทนำ

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_QUALITY0-10095JPEG
IMWRITE_JPEG_PROGRESSIVE0/10JPEG
IMWRITE_PNG_COMPRESSION0-93PNG
IMWRITE_PNG_STRATEGY0-40PNG
IMWRITE_WEBP_QUALITY1-10095WEBP
IMWRITE_TIFF_COMPRESSION1-51TIFF

ผลลัพธ์

Image is saved successfully...

ข้อควรระวัง

  • ตรวจสอบค่าคืน (bool) เสมอเพื่อยืนยันการบันทึก
  • นามสกุลไฟล์กำหนด Format (ไม่ใช่พารามิเตอร์)
  • JPEG: Lossy compression, ไม่รองรับ Alpha channel
  • PNG: Lossless, รองรับ Alpha, ไฟล์ใหญ่กว่า
  • Path ต้องถูกต้องและมีสิทธิ์เขียน