亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

使用C++將處理后的信號保存為PNG和TIFF格式

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

1. PNG格式保存

使用stb_image_write庫

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

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項目配置:

因為stb_image庫實現(xiàn)都寫在頭文件中,不需要編譯成庫,項目中直接引用頭文件目錄即可。

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

3. 代碼:

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

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

【注意】建議將這些單獨寫在一個.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. 幅值計算與歸一化:對于每個像素點,計算其幅值(復數(shù)的模),然后進行歸一化。歸一化的目的是將信號的幅值映射到圖像格式所要求的范圍內(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是處理后的信號數(shù)據(jù)。

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

2. TIFF格式保存

使用OpenCV庫

OpenCV是一個強大的計算機視覺庫,廣泛用于圖像處理、計算機視覺以及機器學習任務。OpenCV不僅支持圖像讀取、處理,還支持將處理結果保存為多種格式,包括TIFF。

2.1 安裝OpenCV

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

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

2.2 代碼解析

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

  1. 創(chuàng)建cv::Mat對象:將處理后的信號數(shù)據(jù)封裝成一個OpenCV矩陣對象cv::Mat。cv::Mat是OpenCV中最常用的圖像數(shù)據(jù)結構,它支持多種數(shù)據(jù)類型,并且能夠高效地進行圖像操作。
  2. 設置TIFF保存參數(shù):使用std::vector<int>來設置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++將處理后的信號保存為PNG和TIFF格式的詳細內(nèi)容,更多關于C++信號保存為PNG和TIFF格式的資料請關注腳本之家其它相關文章!

相關文章

  • C語言中((type *)0) 和(type *0)區(qū)別小結

    C語言中((type *)0) 和(type *0)區(qū)別小結

    ((type *)0)?和?(type *0)?在 C 和 C++ 中有不同的含義和用途,本文主要介紹了C語言中((type *)0) 和(type *0)區(qū)別,具有一定的參考價值,感興趣的可以了解一下
    2024-08-08
  • C++使用ADO實現(xiàn)存取圖片的方法

    C++使用ADO實現(xiàn)存取圖片的方法

    這篇文章主要介紹了C++使用ADO實現(xiàn)存取圖片的方法,需要的朋友可以參考下
    2014-07-07
  • C語言二維數(shù)組的處理實例

    C語言二維數(shù)組的處理實例

    這篇文章主要介紹了C語言二維數(shù)組的處理實例,有需要的朋友可以參考一下
    2013-12-12
  • C/C++中時間庫函數(shù)的使用詳解

    C/C++中時間庫函數(shù)的使用詳解

    這篇文章主要為大家詳細介紹了C/C++中的時間相關知識總結,例如時間庫函數(shù)的使用以及獲取本地時間的不同方法,文中的示例代碼講解詳細,需要的可以參考一下
    2022-11-11
  • Matlab實現(xiàn)多子圖同步調(diào)整視角

    Matlab實現(xiàn)多子圖同步調(diào)整視角

    這篇文章主要為大家介紹了如何利用Matlab實現(xiàn)多子圖同步調(diào)整視角,文中的示例代碼講解詳細,對我們學習Matlab有一定幫助,需要的可以參考一下
    2022-03-03
  • C++數(shù)據(jù)結構模板進階的多方面分析

    C++數(shù)據(jù)結構模板進階的多方面分析

    今天我要給大家介紹C++中的模板更深的一些知識。有關于非類型的模板參數(shù)和模板特化的一些知識,感興趣的朋友快來看看吧
    2022-02-02
  • 使用C語言判斷英文字符大小寫的方法

    使用C語言判斷英文字符大小寫的方法

    這篇文章主要介紹了使用C語言判斷英文字符大小寫的方法,分別為isupper()函數(shù)和islower()函數(shù)的使用,需要的朋友可以參考下
    2015-08-08
  • 如何用C++實現(xiàn)雙向循環(huán)鏈表

    如何用C++實現(xiàn)雙向循環(huán)鏈表

    本篇文章是對用C++實現(xiàn)雙向循環(huán)鏈表的方法進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • 解析C/C++?Capstone?引擎源碼編譯問題

    解析C/C++?Capstone?引擎源碼編譯問題

    Capstone的編譯非常簡單只需要一步即可輕松得到對應的Lib庫文件,如下將介紹該引擎如何被編譯,以及簡單的測試編譯,這篇文章主要介紹了C/C++?Capstone?引擎源碼編譯,需要的朋友可以參考下
    2022-09-09
  • C++實例詳解lambda表達式的使用

    C++實例詳解lambda表達式的使用

    Lambda表達式是現(xiàn)代C++在C ++ 11和更高版本中的一個新的語法糖 ,在C++11、C++14、C++17和C++20中Lambda表達的內(nèi)容還在不斷更新。 lambda表達式(也稱為lambda函數(shù))是在調(diào)用或作為函數(shù)參數(shù)傳遞的位置處定義匿名函數(shù)對象的便捷方法
    2022-05-05

最新評論