ZBLOG

c++将cv::Mat图存下来

在 C++ 中使用 OpenCV 保存 cv::Mat 图像,可以使用 cv::imwrite() 函数。以下是几种常见情况的示例代码:


1. 基本保存(适用于普通图像如 JPEG、PNG)

#include <opencv2/opencv.hpp>

int main() {
    // 假设有一个 cv::Mat 图像
    cv::Mat image = cv::imread("input.jpg"); // 读取图像
    
    if (image.empty()) {
        std::cerr << "Error: Could not load image!" << std::endl;
        return -1;
    }

    // 保存为 JPEG(默认质量95)
    bool success = cv::imwrite("output.jpg", image);
    
    // 保存为 PNG(无损压缩)
    // bool success = cv::imwrite("output.png", image);

    if (!success) {
        std::cerr << "Error: Failed to save image!" << std::endl;
        return -1;
    }

    std::cout << "Image saved successfully." << std::endl;
    return 0;
}

2. 保存浮点矩阵(如相位图、深度图等)

如果 cv::Mat 是浮点类型(如 CV_32F/CV_64F),需要先归一化到 0-255

#include <opencv2/opencv.hpp>

int main() {
    // 假设有一个浮点矩阵(例如相位图)
    cv::Mat floatMat = ...; // CV_32F or CV_64F

    // 归一化到 [0, 255] 并转换为8UC1
    cv::Mat saveMat;
    double minVal, maxVal;
    cv::minMaxLoc(floatMat, &minVal, &maxVal);
    
    if (maxVal > minVal) {
        floatMat.convertTo(saveMat, CV_8UC1, 255.0 / (maxVal - minVal), -minVal * 255.0 / (maxVal - minVal));
    } else {
        saveMat = cv::Mat::zeros(floatMat.size(), CV_8UC1);
    }

    // 保存为PNG(推荐无损格式)
    cv::imwrite("float_output.png", saveMat);

    return 0;
}

3. XML/YAML格式存储(保留原始数据精度)

如果需要保留浮点数据的完整精度,可以保存为XML/YAML:

#include <opencv2/opencv.hpp>

int main() {
    cv::Mat mat = ...; // CV_32F or CV_64F

    // 保存为XML
    cv::FileStorage fs("matrix.xml", cv::FileStorage::WRITE);
    fs << "mat" << mat;
    
    或者:
    
    直接调用:  
```cpp
cvSave(("matrix.yml", mat); 

}

std :: cout<<“Matrix saved to matrix.xml”<

return 0 ; } “`


关键说明

函数 用途 适用场景
cv :: imwrite() 保存常规图像 JPEG/PNG/BMP等格式
归一化 + imwrite() 浮点矩阵可视化 相位图、深度图
FileStorage 保留原始数据精度 XML/YAML格式

确保目标路径有写入权限,文件名需包含扩展名(如 .jpg, .png)。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=23498

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?