用c++编写原始数据与压缩后的数据关于失真度,压缩率的程序
时间: 2024-05-11 15:19:18 浏览: 15
以下是一个示例程序,可以计算原始数据与压缩后数据之间的失真度和压缩率。该程序使用C++语言编写,使用了zlib库进行数据压缩。
```c++
#include <iostream>
#include <fstream>
#include <vector>
#include <zlib.h>
using namespace std;
int main() {
// 读取原始数据
ifstream input("input.bin", ios::binary);
input.seekg(0, ios::end);
int input_size = input.tellg();
input.seekg(0, ios::beg);
vector<char> input_data(input_size);
input.read(&input_data[0], input_size);
input.close();
// 压缩数据
vector<char> compressed_data(input_size);
uLongf compressed_size = input_size;
compress((Bytef*)&compressed_data[0], &compressed_size,
(Bytef*)&input_data[0], input_size);
compressed_data.resize(compressed_size);
// 计算失真度
double distortion = 0;
for (int i = 0; i < input_size; i++) {
distortion += pow(input_data[i] - compressed_data[i], 2);
}
distortion /= input_size;
// 计算压缩率
double compression_ratio = (double)compressed_size / input_size;
cout << "Distortion: " << distortion << endl;
cout << "Compression ratio: " << compression_ratio << endl;
return 0;
}
```
说明:
1. 示例程序假设原始数据是一个二进制文件 "input.bin",并将其读入一个 char 类型的 vector 中。
2. 使用 zlib 库的 compress 函数对原始数据进行压缩,压缩后的数据放在一个 char 类型的 vector 中。
3. 计算失真度:原始数据与压缩后的数据逐个比较,计算它们的欧几里得距离的平方,并除以原始数据的大小。
4. 计算压缩率:压缩后的数据大小除以原始数据的大小。
5. 示例程序输出失真度和压缩率。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)