Opencv C++成长之路(六):高斯差分滤波

高斯差分滤波结果

原图像
在这里插入图片描述
高斯差分滤波结果
在这里插入图片描述

Show me the code

#include <iostream>
#include <string>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui.hpp>

using namespace std;

int main() {
    // 图像路径
    const string fileName = "xxx.jpg";
    
    // 读取图像
    cv::Mat origin = cv::imread(fileName);
    
    // 创建差分存放结果及中间图像空间
    cv::Mat pro1, pro2, result;
    
    // 设置两次高斯滤波的sigma
    const float sigma1 = 1.6;
    const float sigma2 = 2.0;
    
    // 两次不同sigma高斯滤波
    cv::GaussianBlur(origin,
                     pro1,
                     cv::Size(0, 0),
                     sigma1);
    
    cv::GaussianBlur(origin,
                     pro2,
                     cv::Size(0, 0),
                     sigma2);
    
    // 高斯滤波结果差分
    result = pro1 - pro2;
    
    // 显示图像
    cv::imshow("Origin", origin);
    cv::imshow("Result", result * 255);
    
    cv::waitKey(0);
}

OpenCV (Open Source Computer Vision Library) 是一个广泛用于计算机视觉和机器学习的开源库,特别适合于实时图像处理。在C++中,逆滤波是一种图像复原技术,它用于去除图像噪声,特别是高斯噪声。逆滤波是基于图像的平滑处理,通常在其他去噪方法(如中值滤波高斯滤波等)之后使用,以恢复更接近原始信号的图像。 逆滤波的过程大致如下: 1. **噪声模型假设**:通常假设噪声是独立同分布的,通常是高斯噪声。 2. **图像平滑**:对经过噪声影响的图像应用一阶差分算子(如卷积核),比如用一个简单的均值或加权平均滤波器。 3. **逆滤波**:从噪声模型出发,反向计算出去噪声后的图像。由于噪声是随机的,逆滤波的效果取决于噪声的程度和滤波器的选择。 在OpenCV中,你可以使用`cv::filter2D()`函数进行滤波操作,然后使用`cv::filter2D()`函数的逆运算来实现逆滤波。这里是一个简单的示例代码片段: ```cpp #include <opencv2/opencv.hpp> cv::Mat img_noisy, img_filtered, img_recovered; // 假设img_noisy是你的噪声图像 cv::filter2D(img_noisy, img_filtered, -1, // 使用-1表示使用默认的内核(即均值滤波) cv::Mat::ones(3, 3, CV_32F) / 9.0); // 3x3的高斯滤波器 // 使用逆滤波 cv::Mat kernel = cv::Mat::eye(3, 3, CV_32F); // 3x3的单位矩阵,代表逆滤波 cv::filter2D(img_filtered, img_recovered, -1, kernel); // img_recovered将是去噪后的图像 ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值