OpenCV 图形API(24)图像滤波-----双边滤波函数bilateralFilter()

  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

应用双边滤波到图像。

该函数对输入图像应用双边滤波,如 http://www.dai.ed.ac.uk/CVonline/LOCAL_COPIES/MANDUCHI1/Bilateral_Filtering.html 所描述的那样。bilateralFilter 可以很好地减少不需要的噪声,同时保持边缘相当锐利。然而,与大多数滤波器相比,它的速度非常慢。

Sigma值:为了简单起见,你可以将两个sigma值设置为相同。如果它们较小(< 10),滤波器不会有太大效果;而如果它们较大(> 150),则会产生很强的效果,使图像看起来"卡通化"。

滤波器大小:大的滤波器(d > 5)非常慢,因此建议在实时应用中使用 d=5,在需要大量噪声过滤的离线应用中可以考虑使用 d=9。

此滤波器不支持原地操作。

注意

函数文本ID是 "org.opencv.imgproc.filters.bilateralfilter"

函数原型

cpp 复制代码
GMat cv::gapi::bilateralFilter 	
(
 	const GMat &  	src,
	int  	d,
	double  	sigmaColor,
	double  	sigmaSpace,
	int  	borderType = BORDER_DEFAULT 
) 	

参数

  • 参数 src: 源8位或浮点型,单通道或三通道图像。
  • 参数 d: 在滤波过程中使用的每个像素邻域的直径。如果它不大于零,则从 sigmaSpace 计算得出。
  • 参数 sigmaColor: 颜色空间中的滤波sigma值。该参数值越大表示颜色差异的影响越小,导致在颜色相近的像素之间混合更大的区域。
  • 参数 sigmaSpace: 坐标空间中的滤波sigma值。该参数值越大表示距离的影响越小,只要它们的颜色足够接近(参见 sigmaColor)。当 d>0 时,它指定邻域大小而不考虑 sigmaSpace。否则,d 与 sigmaSpace 成正比。
  • 参数 borderType: 边界模式用于外推图像外部的像素,请参阅 BorderTypes

返回值

返回与 src 相同大小和类型的输出图像。

代码示例

cpp 复制代码
#include <opencv2/gapi/core.hpp>     // 包含G-API核心功能
#include <opencv2/gapi/imgproc.hpp>  // 包含imgproc模块,可能需要的其他G-API模块
#include <opencv2/opencv.hpp>

int main()
{
    // 加载输入图像
    cv::Mat src = cv::imread( "/media/dingxin/data/study/OpenCV/sources/images/Lenna.png" );
    if ( src.empty() )
    {
        std::cerr << "Error: Image cannot be loaded!" << std::endl;
        return -1;
    }

    // 定义双边滤波参数
    int d             = 9;                   // 邻域直径
    double sigmaColor = 100;                  // 颜色空间的标准差
    double sigmaSpace = 100;                  // 坐标空间的标准差
    int borderType    = cv::BORDER_DEFAULT;  // 边界填充模式

    // 定义G-API计算图来应用双边滤波
    cv::GComputation comp( [ d, sigmaColor, sigmaSpace, borderType ]() {
        cv::GMat in;  // 输入:源图像
        cv::GMat out = cv::gapi::bilateralFilter( in, d, sigmaColor, sigmaSpace, borderType );
        return cv::GComputation( cv::GIn( in ), cv::GOut( out ) );
    } );

    // 输出结果
    cv::Mat dst;

    try
    {
        // 执行计算图并传入实际的cv::Mat数据
        comp.apply( cv::gin( src ), cv::gout( dst ) );

        // 显示结果
        cv::imshow( "Original Image", src );
        cv::imshow( "Filtered Image", dst );
        cv::waitKey( 0 );  // 等待按键事件
    }
    catch ( const std::exception& e )
    {
        std::cerr << "Exception: " << e.what() << std::endl;
        return -1;
    }

    return 0;
}

运行结果

相关推荐
墨染天姬12 分钟前
【AI】端侧AIBOX可以部署哪些智能体
人工智能
AI成长日志16 分钟前
【Agentic RL】1.1 什么是Agentic RL:从传统RL到智能体学习
人工智能·学习·算法
2501_9481142428 分钟前
2026年大模型API聚合平台技术评测:企业级接入层的治理演进与星链4SAPI架构观察
大数据·人工智能·gpt·架构·claude
小小工匠30 分钟前
LLM - awesome-design-md 从 DESIGN.md 到“可对话的设计系统”:用纯文本驱动 AI 生成一致 UI 的新范式
人工智能·ui
黎阳之光1 小时前
黎阳之光:视频孪生领跑者,铸就中国数字科技全球竞争力
大数据·人工智能·算法·安全·数字孪生
小超同学你好1 小时前
面向 LLM 的程序设计 6:Tool Calling 的完整生命周期——从定义、决策、执行到观测回注
人工智能·语言模型
智星云算力1 小时前
本地GPU与租用GPU混合部署:混合算力架构搭建指南
人工智能·架构·gpu算力·智星云·gpu租用
jinanwuhuaguo1 小时前
截止到4月8日,OpenClaw 2026年4月更新深度解读剖析:从“能力回归”到“信任内建”的范式跃迁
android·开发语言·人工智能·深度学习·kotlin
xiaozhazha_1 小时前
效率提升80%:2026年AI CRM与ERP深度集成的架构设计与实现
人工智能
枫叶林FYL1 小时前
【自然语言处理 NLP】7.2.2 安全性评估与Constitutional AI
人工智能·自然语言处理