Python OpenCV边缘滤波保留怎么使用

本篇内容介绍了“Python OpenCV边缘滤波保留怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

函数原型介绍

高斯双边滤波

双边滤波函数原型如下:

dst = cv2.bilateralFilter(src, d, sigmaColor, sigmaSpace[, dst[, borderType]])

参数说明:

  • src:输入图像;

  • d:过滤过程中每个像素邻域的直径范围。如果不是正数,则函数会从参数 sigmaSpace 计算该值;

  • sigmaColor:颜色空间过滤器的 sigma 值,参数的值越大,表明该像素邻域内有越宽广的颜色会被混合到一起,产生较大的半等色区域;

  • sigmaSpace:坐标空间中滤波器的 sigma 值,如果该值较大,则意味着越远的像素将相互影响,从而使更大的区域中足够相似的颜色获取相同的颜色。当 d>0 时,d 指定了邻域大小且与 sigmaSpace 无关,否则 d 正比于 sigmaSpace。

  • dst:和源图象相同大小、相同格式的输出图象;

一般将 sigmaSpace 设置大一些,sigmaColor 设置小一些,最终呈现的效果较好。

优缺点:
双边滤波,可很好的保存图像边缘细节,并且过滤掉低频分量的噪音,但是双边滤波效率不是很高,花费时间比其他滤波器较长。

测试代码如下,先掌握函数基本使用再说。

import cv2 as cvimport numpy as np# 双边滤波def bilater(image):# 第三个参数大一点(color),第四个小一点(space)dst = cv.bilateralFilter(image, 0, 100, 15)cv.namedWindow("dst")cv.imshow("dst", dst)src = cv.imread("./123.jpg")cv.namedWindow('src')cv.imshow('src', src)bilater(src)cv.waitKey(0)cv.destroyAllWindows()


均值迁移滤波

均值迁移算法是一种通用的聚类算法,它的基本原理是:

对于给定的一定数量样本,任选其中一个样本,以该样本为中心点划定一个圆形区域,求取该圆形区域内样本的质心,即密度最大处的点,再以该点为中心继续执行上述迭代过程,直至最终收敛。(没看太明白,大概了解一下即可)

函数原型如下:

dst = cv2.pyrMeanShiftFiltering(src, sp, sr[, dst[, maxLevel[, termcrit]]])

参数说明:

  • src:输入图像,8 位 3 通道图像;

  • sp:迁移物理空间半径大小;

  • sr:迁移色彩空间半径大小;

  • dst:可选参数,和源图象相同大小、相同格式的输出图象;

  • maxLevel:可选参数,金字塔的最大层数;

  • termcrit:可选参数,迁移迭代终止条件,可以设置为迭代次数满足终止,迭代目标与中心点偏差满足终止,或者两者的结合。

所有参数中,spsr 必选,二者设置的值越大,对图像色彩的平滑效果越明显,同时函数耗时越多。

测试代码如下:

import cv2 as cvimport numpy as np# 双边滤波def bilater(image):# 第三个参数大一点(color),第四个小一点(space)dst = cv.bilateralFilter(image, 0, 100, 15)cv.namedWindow("dst")cv.imshow("dst", dst)# 均值迁移滤波def pyrmeanshift(src):dst = cv.pyrMeanShiftFiltering(src, 10, 50)cv.imshow("dst", dst)src = cv.imread("./123.jpg")cv.namedWindow('src')cv.imshow('src', src)pyrmeanshift(src)cv.waitKey(0)cv.destroyAllWindows()

“Python OpenCV边缘滤波保留怎么使用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!