【OpenCV】29 快速的图像边缘滤波算法

本文介绍了一种在OpenCV中实现的快速图像边缘保留滤波算法,该算法通过数据降维实现快速计算,对比高斯双边滤波和均值迁移滤波,它能更高效地保留图像边缘细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

29 快速的图像边缘滤波算法

代码

import cv2 as cv
import numpy as np

src = cv.imread("../images/example.png")
cv.namedWindow("input", cv.WINDOW_AUTOSIZE)
cv.imshow("input", src)

h, w = src.shape[:2]
dst = cv.edgePreservingFilter(src, sigma_s=100, sigma_r=0.4, flags=cv.RECURS_FILTER)
result = np.zeros([h, w*2, 3], dtype=src.dtype)
result[0:h,0:w,:] = src
result[0:h,w:2*w,:] = dst
cv.imshow("result", result)

cv.waitKey(0)
cv.destroyAllWindows()

实验结果

在这里插入图片描述

解释

由于前面的高斯双边模糊和mean shift均值模糊计算量都很大,因此无法实时地实现图像边缘保留滤波,这大大限制了它们的使用场景,OpenCV中实现了一种快速的图像边缘保留滤波算法。

高斯双边滤波和均值迁移滤波在进行边缘保留滤波计算的时候除了考虑R,G,B三个维度的值,还会考虑空间中X和Y这两个坐标维度,这导致了这两种滤波算法的计算量较大。而快速边缘保留滤波算法通过等价变换到低纬度空间,从而实现了数据降维与快速计算。

OpenCV中的快速图像边缘滤波算法api如下:

cv.edgePreservingFilter(src[, dst[, flags[, sigma_s[, sigma_r]]]])

其中sigma_s取值范围是0 ~ 200,sigma_r取值范围是0 ~ 1。当sigma_s取值不变时,sigma_r取值越大,则图像滤波效果越明显;当sigma_r取值不变时,sigma_s取值越大,则图像模糊效果越明显。


所有内容均来源于贾志刚老师的知识星球——OpenCV研习社,本文为个人整理学习,已获得贾老师授权,有兴趣、有能力的可以加入贾老师的知识星球进行深入学习。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值