大家好,又见面了,我是你们的朋友全栈君。
双边滤波是一种非线性的滤波方法,是结合图像的空间邻近度和像素值相似度的一种折衷处理,同时考虑空间与信息和灰度相似性,达到保边去噪的目的,具有简单、非迭代、局部处理的特点。之所以能够达到保边去噪的滤波效果是因为滤波器由两个函数构成:一个函数是由几何空间距离决定滤波器系数,另一个是由像素差值决定滤波器系数.
1 Python: cv2.bilateralFilter(src, d, sigmaColor, sigmaSpace[, dst[, borderType]]) → dst
参数解释:
-
src:输入图像
-
d:过滤时周围每个像素领域的直径
-
sigmaColor:在color space中过滤sigma。参数越大,临近像素将会在越远的地方mix。
-
sigmaSpace:在coordinate space中过滤sigma。参数越大,那些颜色足够相近的的颜色的影响越大。
import cv2
import numpy as np
def nothing(x):
pass
cv2.namedWindow("image")
cv2.createTrackbar("d","image",0,255,nothing)
cv2.createTrackbar("sigmaColor","image",0,255,nothing)
cv2.ctrateTrackbar("sigmaSpace","image",0,255,nothing)
img = cv2.imread(r"E:\src.jpg",0)
while(1):
d = cv2.getTrackbarPos("d","image")
sigmaColor = cv2.getTrackbarPos("sigmaColor","image")
sigmaSpace = cv2.getTrackbarPos("sigmaSpace","image")
out_img = cv2.bilateralFilter(img,d,sigmaColor,sigmaSpace)
cv2.imshow("out",out_img)
k = cv2.waitKey(1) & 0xFF
if k ==27:
break
cv2.destroyAllWindows()
备注:
waitKey()函数的功能是不断刷新图像,频率时间为delay,单位为ms。
返回值为当前键盘按键值。
所以显示图像时,如果需要在imshow(“xxxx”,image)后吐舌头加上while(cvWaitKey(n)==key)为大于等于0的数即可,那么程序将会停在显示函数处,不运行其他代码;直到键盘值为key的响应之后。
delay>0时,延迟”delay”ms,在显示视频时这个函数是有用的,用于设置在显示完一帧图像后程序等待”delay”ms再显示下一帧视频;如果使用waitKey(0)则只会显示第一帧视频。
返回值:如果delay>0,那么超过指定时间则返回-1;如果delay=0,将没有返回值。
如果程序想响应某个按键,可利用if(waitKey(1)==Keyvalue);
如果delay<0,等待时间无限长,返回值为按键值
经常程序里面出现if( waitKey(10) >= 0 ) 是说10ms中按任意键进入此if块。
cv2.waitKey(1) 与 0xFF(1111 1111)相与是因为cv2.waitKey(1) 的返回值不止8位,但是只有后8位实际有效,为避免产干扰,通过 ‘与’ 操作将其余位置0。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/162994.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...