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

2025-02-11 17:50

本文主要是介绍使用C++将处理后的信号保存为PNG和TIFF格式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

1. PNG格式保存

使用stb_image_write库

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

1.1 安装和包含库

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

stb_image安装及使用

环境:win7 VS2015

1. 下载stb_image :

github地址:https://github.com/nothings/stb

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

2. opengl项目配置:

因为stb_image库实现都js写在头文件中,不需要编译成库,项目中直接引用头文件目录即可。

a. 项目属性 ----> C/C++ —> 附加包含目录 —> your_path\stb-master

3. 代码:

该程序主要实现了加载图片,修改图片宽高并导出。

#include <IOStream>

#define STB_IMAGE_IMPLEMENTAT编程ION
#include "stb_image.h"
#define STB_IMAGE_WRITE_IMPLEMENTATION
#include "stb_image_write.h"
#define STB_IMAGE_RESIZE_IMPLEMENTATION
#include "stb_image_resize.h"
#include <string>
#include <stdio.h>
#include <stdlib.h>
#include <vector>

using namespace std;

int main() {
	std::cout << "Hello, STB_Image" << std::endl;

	string inputPath = "../res/11.jpg";
	int iw, ih, n;

	// 加载图片获取宽、高、颜色通道信息
	unsigned char *idata = stbi_load(inputPath.c_str(), &iw, &ih, &n, 0);

	int ow = iw / 2;
	int oh = ih / 2;
	auto *odata = (unsigned char *)malloc(ow * oh * n);

	// 改变图片尺寸
	stbir_resize(idata, iw, ih, 0, odata, ow, oh, 0, STBIR_TYPE_UINT8, n, STBIR_ALPHA_CHANNEL_NONE, 0,
		STBIR_EDGE_CLAMP, STBIR_EDGE_CLAMP,
		STBIR_FILTER_BOX, STBIR_FILTER_BOX,
		STBIR_COLORSPACE_SRGB, nullptr
		);

	string outputPath = "../res/11out.jpg";
	// 写入图片
	stbi_write_png(outputPath.c_str(), ow, oh, n, odata, 0);

	stbi_image_free(idata);
	stbi_image_free(odata);
	return 0;
}

【注意】建议将这些单独写在一个.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不仅支持图像读取、处理,还支持将处理结果保存为python多种格式,包括TIFF。

2.1 安装OpenCV

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

Windows上Qt配置OpenCV的详细教程(避坑必看)_C 语言_China编程(www.chinasem.cn)

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<OJUGCWcBoI;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;
}

以上就是使用C++将处理后的信号保存为PNG和TIFF格式的详细内容,更多关于C++信号保存为PNG和TIFF格式的资料请关注编程China编程(www.chinasem.cn)其它相关文章!

这篇关于使用C++将处理后的信号保存为PNG和TIFF格式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:http://www.cppcns.com/ruanjian/c/700057.html
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/1153403

相关文章

python使用库爬取m3u8文件的示例

《python使用库爬取m3u8文件的示例》本文主要介绍了python使用库爬取m3u8文件的示例,可以使用requests、m3u8、ffmpeg等库,实现获取、解析、下载视频片段并合并等步骤,具有... 目录一、准备工作二、获取m3u8文件内容三、解析m3u8文件四、下载视频片段五、合并视频片段六、错误

gitlab安装及邮箱配置和常用使用方式

《gitlab安装及邮箱配置和常用使用方式》:本文主要介绍gitlab安装及邮箱配置和常用使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.安装GitLab2.配置GitLab邮件服务3.GitLab的账号注册邮箱验证及其分组4.gitlab分支和标签的

SpringBoot3应用中集成和使用Spring Retry的实践记录

《SpringBoot3应用中集成和使用SpringRetry的实践记录》SpringRetry为SpringBoot3提供重试机制,支持注解和编程式两种方式,可配置重试策略与监听器,适用于临时性故... 目录1. 简介2. 环境准备3. 使用方式3.1 注解方式 基础使用自定义重试策略失败恢复机制注意事项

nginx启动命令和默认配置文件的使用

《nginx启动命令和默认配置文件的使用》:本文主要介绍nginx启动命令和默认配置文件的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录常见命令nginx.conf配置文件location匹配规则图片服务器总结常见命令# 默认配置文件启动./nginx

在Windows上使用qemu安装ubuntu24.04服务器的详细指南

《在Windows上使用qemu安装ubuntu24.04服务器的详细指南》本文介绍了在Windows上使用QEMU安装Ubuntu24.04的全流程:安装QEMU、准备ISO镜像、创建虚拟磁盘、配置... 目录1. 安装QEMU环境2. 准备Ubuntu 24.04镜像3. 启动QEMU安装Ubuntu4

使用Python和OpenCV库实现实时颜色识别系统

《使用Python和OpenCV库实现实时颜色识别系统》:本文主要介绍使用Python和OpenCV库实现的实时颜色识别系统,这个系统能够通过摄像头捕捉视频流,并在视频中指定区域内识别主要颜色(红... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间详解

Windows下C++使用SQLitede的操作过程

《Windows下C++使用SQLitede的操作过程》本文介绍了Windows下C++使用SQLite的安装配置、CppSQLite库封装优势、核心功能(如数据库连接、事务管理)、跨平台支持及性能优... 目录Windows下C++使用SQLite1、安装2、代码示例CppSQLite:C++轻松操作SQ

电脑提示xlstat4.dll丢失怎么修复? xlstat4.dll文件丢失处理办法

《电脑提示xlstat4.dll丢失怎么修复?xlstat4.dll文件丢失处理办法》长时间使用电脑,大家多少都会遇到类似dll文件丢失的情况,不过,解决这一问题其实并不复杂,下面我们就来看看xls... 在Windows操作系统中,xlstat4.dll是一个重要的动态链接库文件,通常用于支持各种应用程序

C++中RAII资源获取即初始化

《C++中RAII资源获取即初始化》RAII通过构造/析构自动管理资源生命周期,确保安全释放,本文就来介绍一下C++中的RAII技术及其应用,具有一定的参考价值,感兴趣的可以了解一下... 目录一、核心原理与机制二、标准库中的RAII实现三、自定义RAII类设计原则四、常见应用场景1. 内存管理2. 文件操

C++中零拷贝的多种实现方式

《C++中零拷贝的多种实现方式》本文主要介绍了C++中零拷贝的实现示例,旨在在减少数据在内存中的不必要复制,从而提高程序性能、降低内存使用并减少CPU消耗,零拷贝技术通过多种方式实现,下面就来了解一下... 目录一、C++中零拷贝技术的核心概念二、std::string_view 简介三、std::stri