ZBLOG

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

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


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

  1. #include <opencv2/opencv.hpp>
  2. int main() {
  3. // 假设有一个 cv::Mat 图像
  4. cv::Mat image = cv::imread("input.jpg"); // 读取图像
  5. if (image.empty()) {
  6. std::cerr << "Error: Could not load image!" << std::endl;
  7. return -1;
  8. }
  9. // 保存为 JPEG(默认质量95)
  10. bool success = cv::imwrite("output.jpg", image);
  11. // 保存为 PNG(无损压缩)
  12. // bool success = cv::imwrite("output.png", image);
  13. if (!success) {
  14. std::cerr << "Error: Failed to save image!" << std::endl;
  15. return -1;
  16. }
  17. std::cout << "Image saved successfully." << std::endl;
  18. return 0;
  19. }

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

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

  1. #include <opencv2/opencv.hpp>
  2. int main() {
  3. // 假设有一个浮点矩阵(例如相位图)
  4. cv::Mat floatMat = ...; // CV_32F or CV_64F
  5. // 归一化到 [0, 255] 并转换为8UC1
  6. cv::Mat saveMat;
  7. double minVal, maxVal;
  8. cv::minMaxLoc(floatMat, &minVal, &maxVal);
  9. if (maxVal > minVal) {
  10. floatMat.convertTo(saveMat, CV_8UC1, 255.0 / (maxVal - minVal), -minVal * 255.0 / (maxVal - minVal));
  11. } else {
  12. saveMat = cv::Mat::zeros(floatMat.size(), CV_8UC1);
  13. }
  14. // 保存为PNG(推荐无损格式)
  15. cv::imwrite("float_output.png", saveMat);
  16. return 0;
  17. }

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

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

  1. #include <opencv2/opencv.hpp>
  2. int main() {
  3. cv::Mat mat = ...; // CV_32F or CV_64F
  4. // 保存为XML
  5. cv::FileStorage fs("matrix.xml", cv::FileStorage::WRITE);
  6. fs << "mat" << mat;
  7. 或者:
  8. 直接调用:
  9. ```cpp
  10. 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

注册

已经有帐号?