python学opencv|读取图像(五十七)使用cv2.bilateralFilter()函数实现图像像素双边滤波处理
【1】引言
前序学习过程中,已经掌握了对图像的基本滤波操作技巧,具体的图像滤波方式包括均值滤波、中值滤波和高斯滤波,相关文章链接有:
python学opencv|读取图像(五十四)使用cv2.blur()函数实现图像像素均值处理-CSDN博客
python学opencv|读取图像(五十五)使用cv2.medianBlur()函数实现图像像素中值滤波处理-CSDN博客
python学opencv|读取图像(五十六)使用cv2.GaussianBlur()函数实现图像像素高斯滤波处理-CSDN博客
进过前序文章的实践探索,随着像素核的增大,实际的滤波效果都出现了图像模糊的情形,因此,有必要继续探索新的滤波方式。
这就是本次文章的学习目的:掌握双边滤波函数cv.bilateralFilter()。
双边滤波函数cv.bilateralFilter()的工作原理为:在图像的中心区域,采用类似高斯滤波的方式处理,在图像的边缘区域,加大边缘区域像素点的权重,以保证图像的清晰度。
【2】官网教程
点击下方链接,直达双边滤波函数cv.bilateralFilter()的官网教程:
OpenCV: Image Filtering
官网页面对双边滤波函数cv.bilateralFilter()的说明为:

图1 官网页面对双边滤波函数cv.bilateralFilter()的说明
官网页面对双边滤波函数cv.bilateralFilter()的参数说明为:
void cv::bilateralFilter (
InputArray src, #输入图像
OutputArray dst, #输出图像
int d, #像素核直径
double sigmaColor, #像素点颜色值和周围颜色值差值小于此值时进行滤波
double sigmaSpace, #像素坐标开关,值越大,参与计算的像素点越多
int borderType = BORDER_DEFAULT ) #边界样式,可选参数
【3】代码测试
首先是引入模块和相关图像:
import cv2 as cv # 引入CV模块# 读取图片
srcm = cv.imread('srcx.png') # 读取图像srcx.png
然后是对图像进行双边滤波处理:
#滤波计算
src1 = cv.bilateralFilter(srcm,3,180,200) # 图像取平均值,像素核大小为(3,3)
src2 = cv.bilateralFilter(srcm,5,180,200) # 图像取平均值,像素核大小为(5,5)
src3 = cv.bilateralFilter(srcm,7,180,200) # 图像取平均值,像素核大小为(7,7)
之后显示图像:
# 显示结果
cv.imshow('srcm ', srcm)
cv.imshow('src1 ', src1)
cv.imshow('src2 ', src2)
cv.imshow('src3 ', src3)
cv.imwrite('src1b.png',src1)
cv.imwrite('src2b.png',src2)
cv.imwrite('src3b.png',src3)
# 窗口控制
cv.waitKey() # 图像不关闭
cv.destroyAllWindows() # 释放所有窗口
程序运行使用的相关图像为:

图2 初始图像scrx.png

图3 双边滤波图像scr1.png

图3 双边滤波图像scr2.png

图3 双边滤波图像scr3.png
由图2至图5可见,双边滤波函数cv.bilateralFilter()处理后的图像,随着像素核的增大,虽然也出现了模糊的效果,但模糊的程度较小,较大程度保证了图像的清晰度。
【4】细节说明
调用cv2.bilateralFilter()滤波函数进行双边滤波时,给出的是像素核直径。
而其他三种滤波方式不一样:
调用cv2.medianBlur()函数进行中值滤波时,使用的像素核只需要写出边长n,但这个边长也应该是奇数,cv2.medianBlur()函数会自动根据这个边长划定一个正方形的像素核。
调用cv2.blur()函数进行均值滤波和调用cv2.GaussianBlur()函数进行高斯滤波处理时,均需要给出(nXn)大小的像素核,这个n应使用奇数。
像素核使用奇数大小会比较好,是因为奇数大小会在最中间围成一个方格,这个方格就是核心方格,滤波计算的值直接赋给这个核心方格。

图6 图像滤波技术对比
【5】总结
掌握了使用python+opencv实现调用cv2.bilateralFilter()函数进行双边滤波处理图像的技巧。
相关文章:
python学opencv|读取图像(五十七)使用cv2.bilateralFilter()函数实现图像像素双边滤波处理
【1】引言 前序学习过程中,已经掌握了对图像的基本滤波操作技巧,具体的图像滤波方式包括均值滤波、中值滤波和高斯滤波,相关文章链接有: python学opencv|读取图像(五十四)使用cv2.blur()函数实现图像像素…...
为何实现大语言模型的高效推理以及充分释放 AI 芯片的计算能力对于企业级落地应用来说,被认为具备显著的研究价值与重要意义?
🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ AI 芯片:为人工智能而生的 “大脑” AI 芯片,又称人工智能加速器或计算卡,是专为加速人工智能应用,特别是深度学习任务设计的专用集成电路(A…...
Android 约束布局ConstraintLayout整体链式打包居中显示
Android 用约束布局ConstraintLayout实现将多个控件视作一个整体居中显示,使用 app:layout_constraintHorizontal_chainStyle"packed"实现 chain 除了链条方向有横向和竖向区分外, chain链条上的模式有 3种 spread - 元素将被展开&#…...
在C#中,Array,List,ArrayList,Dictionary,Hashtable,SortList,Stack的区别
Array Array你可以理解为是所有数组的大哥 普通数组 : 特点是长度固定, 只能存储相同类型的数据 static void Main(string[] args){//声明int[] ints;string[] strings;People[] peoples;//默认值 //int 类型是 0//string 类型是 nullint[] ints1 { 1, 2, 3 };string[] …...
微服务知识——微服务架构的演进过程
文章目录 初始架构:单机架构第一次演进:Tomcat与数据库分开部署第二次演进:引入本地缓存和分布式缓存第三次演进:引入反向代理实现负载均衡第四次演进:数据库读写分离第五次演进:数据库按业务分库第六次演进…...
Chrome 浏览器:互联网时代的浏览利器
Chrome 浏览器:互联网时代的浏览利器 引言 在互联网时代,浏览器已经成为我们日常生活中不可或缺的工具。作为全球最受欢迎的浏览器之一,Chrome 浏览器凭借其出色的性能、丰富的扩展程序和简洁的界面,赢得了广大用户的喜爱。本文…...
深入浅出 NRM:加速你的 npm 包管理之旅
文章目录 前言一、NRM 是什么?二、为什么需要 NRM?三、NRM 的优势四、NRM 的安装与使用4.1 安装 NRM4.2 查看可用的 npm 源4.3 切换 npm 源4.4 测试 npm 源速度4.5 添加自定义 npm 源4.6 删除 npm 源 五、NRM 的进阶使用六、总结 前言 作为一名 JavaScr…...
Linux——基础命令1
$:普通用户 #:超级用户 cd 切换目录 cd 目录 (进入目录) cd ../ (返回上一级目录) cd ~ (切换到当前用户的家目录) cd - (返回上次目录) pwd 输出当前目录…...
nuxt3中使用useFetch请求刷新不返回数据或返回html结构问题解决-完整nuxt3useFetchtch请求封装
前言 如果使用nuxt3写项目,可以查看nuxt3实战:完整的 nuxt3 vue3 项目创建与useFetch请求封装,此篇内容有详细步骤 但在此篇内容中useFetch请求在页面有多个请求的情况下,或者放在客户端渲染情境下是失败的,所以在此篇…...
Kubernetes 中 BGP 与二层网络的较量:究竟孰轻孰重?
如果你曾搭建过Kubernetes集群,就会知道网络配置是一个很容易让人深陷其中的领域。在负载均衡器、服务通告和IP管理之间,你要同时应对许多变动的因素。对于许多配置而言,使用二层(L2)网络就完全能满足需求。但边界网关协议(BGP)—— 支撑互联网运行的技术 —— 也逐渐出…...
C中静态库和动态库的使用
2.使用尖括号包括 如果要使用尖括号包括头文件,有两种方法 1.将头文件移动到标准头文件目录,linux为/usr/local/include.windows下为C:\MinGW\include 2.编译时指定头文件目录,gcc -I/头文件目录 … 编译时-I参数就是用于指定头文件目录 3.静态库 将文件编译为静态库,可以…...
Debian 安装 Nextcloud 使用 MariaDB 数据库 + Caddy + PHP-FPM
前言 之前通过 docker在ubuntu上安装Nextcloud,但是现在我使用PVE安装Debian虚拟机,不想通过docker安装了。下面开始折腾。 安装过程 步骤 1:更新系统并安装必要的软件 sudo apt update && sudo apt upgrade -y sudo apt install…...
【FPGA】 MIPS 12条整数指令 【3】
实现乘除 修改框架 EX:实现带符号乘除法和无符号乘除法 HiLo寄存器:用于存放乘法和除法的运算结果。Hi、Lo为32bit寄存器。电路描述与实现RegFile思想一致 仿真 代码 DataMem.v include "define.v"; module DataMem(input wire clk,input…...
Mac 部署Ollama + OpenWebUI完全指南
文章目录 💻 环境说明🛠️ Ollama安装配置1. 安装[Ollama](https://github.com/ollama/ollama)2. 启动Ollama3. 模型存储位置4. 配置 Ollama 🌐 OpenWebUI部署1. 安装Docker2. 部署[OpenWebUI](https://www.openwebui.com/)(可视化…...
蓝桥杯小白打卡第二天
789. 数的范围 题目描述 给定一个按照升序排列的长度为 n n n 的整数数组,以及 q q q 个查询。 对于每个查询,返回一个元素 k k k 的起始位置和终止位置(位置从 0 0 0 开始计数)。 如果数组中不存在该元素,则返…...
Docker Compose:容器编排的利器
Docker Compose:容器编排的利器 引言 随着容器技术的普及,Docker成为了当今最受欢迎的容器编排工具之一。Docker Compose作为Docker生态系统中的一部分,允许用户以声明式的方式定义和运行多容器Docker应用。本文将深入探讨Docker Compose的基本概念、工作原理、使用场景以…...
springboot项目的单元测试
文章目录 依赖编写单测代码一些注意点 依赖 依赖包含了 JUnit、Mockito、Spring Test 等常用的测试工具 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><…...
JVM图文入门
往期推荐 【已解决】redisCache注解失效,没写cacheConfig_com.howbuy.cachemanagement.client.redisclient#incr-CSDN博客 【已解决】OSS配置问题_keyuewenhua.oss-cn-beijing.aliyuncs-CSDN博客 【排坑】云服务器docker部署前后端分离项目域名解析OSS-CSDN博客 微服…...
cursor 开发java项目教程简单上手
1.官网下载 Cursor - The AI Code Editor 下载完后注册账号,可以使用无限邮的方式 注册完之后 设置中文 可以选择设置为中文 Ctrl Shift X 进入设置页面输入chinese 然后重启 更改jdk跟maven仓库设置 ctrlshiftp 打开输入框后输入json,把下面代码…...
优化fm.jiecao.jcvideoplayer_lib中视频横竖屏自动适配原视频方案
fm.jiecao:jiecaovideoplayer:x.x.x 优化fm.jiecao.jcvideoplayer_lib中视频横竖屏自动适配原视频方案: 仅优化关键代码部分,源码: public void startWindowFullscreen() {Log.i(TAG, "startWindowFullscreen " " [" …...
label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...
sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...
JVM 内存结构 详解
内存结构 运行时数据区: Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器: 线程私有,程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 每个线程都有一个程序计数…...
无人机侦测与反制技术的进展与应用
国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机(无人驾驶飞行器,UAV)技术的快速发展,其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统,无人机的“黑飞”&…...
LLMs 系列实操科普(1)
写在前面: 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容,原视频时长 ~130 分钟,以实操演示主流的一些 LLMs 的使用,由于涉及到实操,实际上并不适合以文字整理,但还是决定尽量整理一份笔…...
Web后端基础(基础知识)
BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程序的逻辑和数据都存储在服务端。 优点:维护方便缺点:体验一般 CS架构:Client/Server,客户端/服务器架构模式。需要单独…...
Ubuntu系统复制(U盘-电脑硬盘)
所需环境 电脑自带硬盘:1块 (1T) U盘1:Ubuntu系统引导盘(用于“U盘2”复制到“电脑自带硬盘”) U盘2:Ubuntu系统盘(1T,用于被复制) !!!建议“电脑…...
深度剖析 DeepSeek 开源模型部署与应用:策略、权衡与未来走向
在人工智能技术呈指数级发展的当下,大模型已然成为推动各行业变革的核心驱动力。DeepSeek 开源模型以其卓越的性能和灵活的开源特性,吸引了众多企业与开发者的目光。如何高效且合理地部署与运用 DeepSeek 模型,成为释放其巨大潜力的关键所在&…...
