当前位置: 首页 > article >正文

如何使用C++将处理后的信号保存为PNG和TIFF格式

在信号处理领域,我们常常需要将处理结果以图像的形式保存下来,方便后续分析和展示。C++提供了多种库来处理图像数据,本文将介绍如何使用stb_image_write库保存为PNG格式图像以及使用OpenCV库保存为TIFF格式图像。

1. PNG格式保存

使用stb_image_write

stb_image_write是一个单文件、轻量级的库,能够让你方便地将图像保存为PNG格式。它的优点在于简单且无外部依赖,非常适合用来进行快速的图像保存。

1.1 安装和包含库

为了使用stb_image_write,首先需要下载stb库并包含stb_image_write.h头文件。你可以在下面找到需要使用库。

引擎开发二: stb_image库及使用_stbimage下载-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/u012278016/article/details/105784912【注意】建议将这些单独写在一个.cpp文件否则会报一堆错误:

#define STB_IMAGE_IMPLEMENTATION
#include "stb_image.h"
#define STB_IMAGE_WRITE_IMPLEMENTATION
#include "stb_image_write.h"
1.2 代码解析

以下是如何将信号保存为PNG文件的过程:

  1. 获取当前目录路径:首先,通过QDirQFileInfo获取当前工作目录的路径。
  2. 幅值计算与归一化:对于每个像素点,计算其幅值(复数的模),然后进行归一化。归一化的目的是将信号的幅值映射到图像格式所要求的范围内。
  3. 保存为PNG:最后,使用stbi_write_png函数将数据保存为PNG文件。
if (stbi_write_png(write_to_Path, Nr, Na, 1, data_w, Nr * sizeof(unsigned short))) {
    cout << "灰度图像保存成功: " << write_to_Path << endl;
} else {
    cout << "灰度图像保存失败" << endl;
}

在这段代码中,write_to_Path是保存PNG图像的路径,NrNa分别是图像的行数和列数,data_w是处理后的信号数据。

下面讲的opencv也可以保存png这种格式。

2. TIFF格式保存

使用OpenCV库

OpenCV是一个强大的计算机视觉库,广泛用于图像处理、计算机视觉以及机器学习任务。OpenCV不仅支持图像读取、处理,还支持将处理结果保存为多种格式,包括TIFF。

2.1 安装OpenCV

在Windows或其他操作系统上,可以参考下面这个教程进行安装配置。

Windows上Qt配置OpenCV(最简单版本无需自己编译-避坑必看)_qt opencv安装 不编译-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/kdnnnd/article/details/132840038

2.2 代码解析

与PNG保存类似,保存为TIFF的过程也需要计算幅值并进行归一化。不同的是,这里使用的是OpenCV的cv::Mat类来处理图像数据。

  1. 创建cv::Mat对象:将处理后的信号数据封装成一个OpenCV矩阵对象cv::Matcv::Mat是OpenCV中最常用的图像数据结构,它支持多种数据类型,并且能够高效地进行图像操作。
  2. 设置TIFF保存参数:使用std::vector<int>来设置TIFF图像的压缩方式。TIFF格式支持多种压缩方式,代码中使用了无压缩方式。
  3. 保存为TIFF:使用OpenCV的cv::imwrite函数将图像数据保存为TIFF文件。
std::vector<int> compression_params;
compression_params.push_back(cv::IMWRITE_TIFF_COMPRESSION);
compression_params.push_back(1); // 无压缩

bool result = cv::imwrite(write_to_Path, image);
if (result) {
    cout << "TIFF图像保存成功: " << write_to_Path << std::endl;
} else {
    cout << "TIFF图像保存失败" << std::endl;
}

http://www.kler.cn/a/540855.html

相关文章:

  • 机器学习怎么学习,还有算法基本的源代码
  • 认识网络安全
  • 云计算——AWS Solutions Architect – Associate(saa)4.安全组和NACL
  • 【Javascript Day12】数组操作方法及String规则和方法
  • elasticsearch实战三 elasticsearch与mysql数据实时同步
  • DeepSeek介绍,以及本地部署和API使用
  • 基于微信小程序的博物馆预约系统的设计与实现
  • Web UI自动化测试中的显示等待、隐式等待有什么区别?
  • 电子时钟html
  • 如何转型为量化分析师 - FinTech
  • FFmpeg 命令规则与参数详解:输入/输出 YUV 文件的要求与分析
  • 哨兵模式与 Redis Cluster:高可用 Redis 的深度剖析
  • 2024 Navicat Premium最新版简体中文版破解激活永久图文详细教程(亲测可用)
  • PHP盲盒商城系统源码 晒图+免签+短信验证+在线回收 thinkphp框架
  • 深入理解指针初阶:从概念到实践
  • centos 和 ubuntu 区别
  • 半边数据结构(Half-Edge Data Structures)详细介绍
  • Spring Boot中实现多租户架构
  • 计算机图形学论文 | 面向制造的设计: 五轴铣削的几何制造可行性评估
  • 数据结构-find()-判断字符串s1中是否包含字符串s2
  • 【故障处理】ORA-19849 ORA-19612 0RA-17627 ORA-03114
  • Qt创建一个简单的烟花效果
  • javaEE初阶————多线程初阶(4)
  • js中的== 和 ===运算符的比较和区别(面试题)
  • WPS接入DeepSeek,实现AI辅助功能
  • CVPR-2024 | 让智能体站在舞台中央!EgoThink: 评估视觉语言模型的第一人称视角思维能力