最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用C++將處理后的信號(hào)保存為PNG和TIFF格式

 更新時(shí)間:2025年02月11日 09:32:22   作者:了一li  
在信號(hào)處理領(lǐng)域,我們常常需要將處理結(jié)果以圖像的形式保存下來,方便后續(xù)分析和展示,C++提供了多種庫來處理圖像數(shù)據(jù),本文將介紹如何使用stb_image_write庫保存為PNG格式圖像以及使用OpenCV庫保存為TIFF格式圖像,需要的朋友可以參考下

1. PNG格式保存

使用stb_image_write庫

stb_image_write是一個(gè)單文件、輕量級(jí)的庫,能夠讓你方便地將圖像保存為PNG格式。它的優(yōu)點(diǎn)在于簡單且無外部依賴,非常適合用來進(jìn)行快速的圖像保存。

1.1 安裝和包含庫

為了使用stb_image_write,首先需要下載stb庫并包含stb_image_write.h頭文件。你可以在下面找到需要使用庫。

stb_image安裝及使用

環(huán)境:win7 VS2015

1. 下載stb_image :

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

2. opengl項(xiàng)目配置:

因?yàn)閟tb_image庫實(shí)現(xiàn)都寫在頭文件中,不需要編譯成庫,項(xiàng)目中直接引用頭文件目錄即可。

a. 項(xiàng)目屬性 ----> C/C++ —> 附加包含目錄 —> your_path\stb-master

3. 代碼:

該程序主要實(shí)現(xiàn)了加載圖片,修改圖片寬高并導(dǎo)出。

#include <iostream>

#define STB_IMAGE_IMPLEMENTATION
#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;
}

【注意】建議將這些單獨(dú)寫在一個(gè).cpp文件否則會(huì)報(bào)一堆錯(cuò)誤:

#define STB_IMAGE_IMPLEMENTATION
#include "stb_image.h"
#define STB_IMAGE_WRITE_IMPLEMENTATION
#include "stb_image_write.h"

1.2 代碼解析

以下是如何將信號(hào)保存為PNG文件的過程:

  1. 獲取當(dāng)前目錄路徑:首先,通過QDirQFileInfo獲取當(dāng)前工作目錄的路徑。
  2. 幅值計(jì)算與歸一化:對(duì)于每個(gè)像素點(diǎn),計(jì)算其幅值(復(fù)數(shù)的模),然后進(jìn)行歸一化。歸一化的目的是將信號(hào)的幅值映射到圖像格式所要求的范圍內(nèi)。
  3. 保存為PNG:最后,使用stbi_write_png函數(shù)將數(shù)據(jù)保存為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分別是圖像的行數(shù)和列數(shù),data_w是處理后的信號(hào)數(shù)據(jù)。

下面講的opencv也可以保存png這種格式。

2. TIFF格式保存

使用OpenCV庫

OpenCV是一個(gè)強(qiáng)大的計(jì)算機(jī)視覺庫,廣泛用于圖像處理、計(jì)算機(jī)視覺以及機(jī)器學(xué)習(xí)任務(wù)。OpenCV不僅支持圖像讀取、處理,還支持將處理結(jié)果保存為多種格式,包括TIFF。

2.1 安裝OpenCV

在Windows或其他操作系統(tǒng)上,可以參考下面這個(gè)教程進(jìn)行安裝配置。

Windows上Qt配置OpenCV的詳細(xì)教程(避坑必看)_C 語言_腳本之家

2.2 代碼解析

與PNG保存類似,保存為TIFF的過程也需要計(jì)算幅值并進(jìn)行歸一化。不同的是,這里使用的是OpenCV的cv::Mat類來處理圖像數(shù)據(jù)。

  1. 創(chuàng)建cv::Mat對(duì)象:將處理后的信號(hào)數(shù)據(jù)封裝成一個(gè)OpenCV矩陣對(duì)象cv::Mat。cv::Mat是OpenCV中最常用的圖像數(shù)據(jù)結(jié)構(gòu),它支持多種數(shù)據(jù)類型,并且能夠高效地進(jìn)行圖像操作。
  2. 設(shè)置TIFF保存參數(shù):使用std::vector<int>來設(shè)置TIFF圖像的壓縮方式。TIFF格式支持多種壓縮方式,代碼中使用了無壓縮方式。
  3. 保存為TIFF:使用OpenCV的cv::imwrite函數(shù)將圖像數(shù)據(jù)保存為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;
}

以上就是使用C++將處理后的信號(hào)保存為PNG和TIFF格式的詳細(xì)內(nèi)容,更多關(guān)于C++信號(hào)保存為PNG和TIFF格式的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 基于C++實(shí)現(xiàn)五子棋小游戲

    基于C++實(shí)現(xiàn)五子棋小游戲

    這篇文章主要為大家詳細(xì)介紹了基于C++實(shí)現(xiàn)五子棋小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • C語言中#if的使用詳解

    C語言中#if的使用詳解

    #if和#endif是一組同時(shí)使用的,叫做條件編譯指令。#if與#define、#include等指令一樣是由預(yù)處理器這個(gè)強(qiáng)大的工具處理的,預(yù)處理器可以在編譯前處理c程序,這篇文章主要介紹了C語言中#if的使用,需要的朋友可以參考下
    2022-11-11
  • C++中volatile限定符的實(shí)現(xiàn)示例

    C++中volatile限定符的實(shí)現(xiàn)示例

    volatile關(guān)鍵字在C和C++中用于確保編譯器不優(yōu)化特定變量的訪問,主要用于多線程和硬件交互場(chǎng)景,本文就來介紹C++中volatile限定符的實(shí)現(xiàn)示例,感興趣的可以了解一下
    2024-11-11
  • C語言數(shù)據(jù)結(jié)構(gòu)時(shí)間復(fù)雜度及空間復(fù)雜度簡要分析

    C語言數(shù)據(jù)結(jié)構(gòu)時(shí)間復(fù)雜度及空間復(fù)雜度簡要分析

    我們?cè)谶M(jìn)行編程時(shí),往往會(huì)開發(fā)諸多的算法,那么我們?cè)趺丛谀敲炊嗨惴ㄖ姓业阶詈玫哪莻€(gè)呢?本文主要介紹時(shí)間和空間復(fù)雜度概念及時(shí)間復(fù)雜度的求解,預(yù)祝讀者學(xué)習(xí)愉快
    2021-10-10
  • C語言 結(jié)構(gòu)體和指針詳解及簡單示例

    C語言 結(jié)構(gòu)體和指針詳解及簡單示例

    本文主要介紹C語言 結(jié)構(gòu)體和指針,這里整理了相關(guān)資料,并附示例代碼和實(shí)現(xiàn)結(jié)果,以便大家學(xué)習(xí)參考,希望能幫助學(xué)習(xí)C語言的朋友
    2016-08-08
  • C語言scandir函數(shù)獲取文件夾內(nèi)容的實(shí)現(xiàn)

    C語言scandir函數(shù)獲取文件夾內(nèi)容的實(shí)現(xiàn)

    scandir?函數(shù)用于列舉指定目錄下的文件列表,本文主要介紹了C語言scandir函數(shù)獲取文件夾內(nèi)容的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03
  • 在動(dòng)態(tài)庫和靜態(tài)庫中使用模板(dynamic libraries ,static libraries)

    在動(dòng)態(tài)庫和靜態(tài)庫中使用模板(dynamic libraries ,static libraries)

    給大家介紹一下在動(dòng)態(tài)庫(dynamic libraries)和靜態(tài)庫(static libraries)使用模板(template)的用法和解決方案。
    2017-11-11
  • C語言輸出任意邊長的菱形

    C語言輸出任意邊長的菱形

    大家好,本篇文章主要講的是C語言輸出任意邊長的菱形,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • C語言學(xué)生學(xué)籍管理系統(tǒng)課程設(shè)計(jì)

    C語言學(xué)生學(xué)籍管理系統(tǒng)課程設(shè)計(jì)

    這篇文章主要介紹了C語言學(xué)生學(xué)籍管理系統(tǒng)課程設(shè)計(jì),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • Qt讀寫ini文件之QSettings用法

    Qt讀寫ini文件之QSettings用法

    這篇文章主要為大家介紹了Qt讀寫ini文件之QSettings的使用方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05

最新評(píng)論

兴仁县| 南充市| 仲巴县| 芷江| 榆社县| 泰州市| 会宁县| 巴林左旗| 泰州市| 南部县| 宜兰县| 大连市| 马公市| 南京市| 开平市| 蒙山县| 双辽市| 奉贤区| 泉州市| 金门县| 安远县| 东辽县| 鹤山市| 资中县| 河池市| 金塔县| 徐水县| 根河市| 定结县| 江华| 绩溪县| 抚远县| 嘉义市| 南江县| 藁城市| 曲水县| 嘉善县| 武威市| 闻喜县| 麻栗坡县| 松原市|