Linux 高斯滤波c++ 代码
时间: 2023-07-24 15:04:31 浏览: 108
以下是一个简单的高斯滤波器的C++代码示例:
```c++
#include <iostream>
#include <cmath>
// 定义高斯函数
double gaussian(double x, double mu, double sigma) {
return exp(-(pow(x - mu, 2) / (2 * pow(sigma, 2))));
}
// 定义高斯滤波函数
void gaussianFilter(double** image, int width, int height) {
// 定义高斯滤波器参数
double sigma = 1.0;
int filterSize = 3;
int paddingSize = filterSize / 2;
// 创建临时图像数组
double** tempImage = new double*[height];
for (int i = 0; i < height; ++i) {
tempImage[i] = new double[width];
}
// 对图像进行高斯滤波
for (int y = paddingSize; y < height - paddingSize; ++y) {
for (int x = paddingSize; x < width - paddingSize; ++x) {
double newValue = 0.0;
// 在滤波器范围内计算加权平均值
for (int j = -paddingSize; j <= paddingSize; ++j) {
for (int i = -paddingSize; i <= paddingSize; ++i) {
newValue += image[y + j][x + i] * gaussian(i, 0, sigma) * gaussian(j, 0, sigma);
}
}
tempImage[y][x] = newValue;
}
}
// 将滤波结果复制回原图像
for (int y = paddingSize; y < height - paddingSize; ++y) {
for (int x = paddingSize; x < width - paddingSize; ++x) {
image[y][x] = tempImage[y][x];
}
}
// 释放临时图像数组内存
for (int i = 0; i < height; ++i) {
delete[] tempImage[i];
}
delete[] tempImage;
}
int main() {
// 假设图像大小为5x5
int width = 5;
int height = 5;
// 创建图像数组
double** image = new double*[height];
for (int i = 0; i < height; ++i) {
image[i] = new double[width];
}
// 初始化图像数据(此处省略)
// 执行高斯滤波
gaussianFilter(image, width, height);
// 输出滤波结果
for (int y = 0; y < height; ++y) {
for (int x = 0; x < width; ++x) {
std::cout << image[y][x] << " ";
}
std::cout << std::endl;
}
// 释放图像数组内存
for (int i = 0; i < height; ++i) {
delete[] image[i];
}
delete[] image;
return 0;
}
```
请注意,这只是一个简单的示例代码,用于演示高斯滤波器的基本原理。实际应用中,您可能需要根据具体需求进行更多的优化和扩展。
阅读全文