Gaussin C++
时间: 2025-09-05 14:09:33 AIGC 浏览: 3
在C++中,有多种与高斯(Gaussian)相关的实现,以下为你介绍高斯模糊和高斯滤波的C++实现。
### 高斯模糊
高斯模糊是一种使用高斯函数对图像进行模糊处理的滤波器,其在一维的高斯函数方程可用于对图像每个像素进行变换处理。以下是一个使用OpenCV库实现高斯模糊的示例代码:
```cpp
#include <iostream>
#include <opencv2/opencv.hpp>
int main(int argc, char* argv[]) {
// 加载图片
std::string imgPath = "E:\\研究生\\数字图像处理\\c++\\字符识别\\Project1\\beauty.jpg";
cv::Mat srcImg = cv::imread(imgPath, 0); // RGB, JPG, PNG, TIFF格式
if (srcImg.empty()) {
std::cout << "can't load pic" << std::endl;
return -1;
}
// 显示原图
cv::imshow("src", srcImg);
cv::Mat dst;
// 应用高斯模糊
cv::GaussianBlur(srcImg, dst, cv::Size(3, 3), 0, 0);
// 显示处理后的图片
cv::imshow("opencv gsblur", dst);
// 等待按键
cv::waitKey(0);
return 0;
}
```
该代码使用OpenCV的`GaussianBlur`函数对指定路径的图像进行高斯模糊处理,并显示处理前后的图像[^4]。
### 高斯滤波
高斯滤波可将时域转为频域进行滤波。以下是一个自定义的一维高斯滤波函数示例:
```cpp
#include <iostream>
#include <vector>
#include <cmath>
bool My_Gaussianfilter(std::vector<float> &data, int filter_size, double sigma) {
double GaussTemp[2*filter_size - 1];
for(int i = 0; i < 2*filter_size - 1; i++) {
GaussTemp[i] = std::exp(-std::pow((i + 1 - filter_size), 2) / std::pow(sigma, 2) / 2) / std::sqrt(2 * 3.1415) / sigma;
}
double data_filter[data.size()];
for(int i = filter_size - 1; i < data.size() - filter_size; i++) {
data_filter[i] = 0;
for(int j = 0; j < 2*filter_size - 1; j++) {
data_filter[i] = data_filter[i] + data.at(i - filter_size + 1 + j) * GaussTemp[j];
}
}
for(int i = 0; i < data.size(); i++) {
if(i >= filter_size && i <= data.size() - filter_size - 1) {
data.at(i) = data_filter[i];
}
}
return true;
}
```
该函数接收一维数据、滤波器大小和标准差作为参数,对数据进行一维高斯滤波处理[^3]。
阅读全文