首页 > 其他分享 >OpenCV 边缘保留滤波EPF

OpenCV 边缘保留滤波EPF

时间:2024-08-18 10:57:52浏览次数:6  
标签:src None dst 滤波 OpenCV 参数 image EPF cv

OpenCV经典的两种实现EPF方法:高斯双边和均值迁移
一:双边模糊
在这里插入图片描述

差异越大,越会完整保留

def bi_demo(image):
    dst = cv.bilateralFilter(image,0,100,15)  #第二个参数d是distinct,我们若是输入了d,会根据其去算第3或4个参数,我们最好是使用第3或4个参数反算d,先设为0
    cv.imshow("bi_demo",dst)

src = cv.imread("./1.png")  #读取图片
cv.namedWindow("input image",cv.WINDOW_AUTOSIZE)    #创建GUI窗口,形式为自适应
cv.imshow("input image",src)    #通过名字将图像和窗口联系
bi_demo(src)
cv.waitKey(0)   #等待用户操作,里面等待参数是毫秒,我们填写0,代表是永远,等待用户操作
cv.destroyAllWindows()  #销毁所有窗口 

def bilateralFilter(src, d, sigmaColor, sigmaSpace, dst=None, borderType=None): # real signature unknown; restored from doc

值域和空域的两个方差sigma可以简单的设置为相等,小于10,无太大效果,大于150效果太强,像卡通片似的。
滤波器尺寸d:大于5将较慢(5 forreal-time),d=9,for off-lineapplications,d 是像素邻域“直径”。计算的半径,半径之内的像数都会被纳入计算,如果提供-1,会从后面的参数sigmaSpace中自动计算。
Sigma_color颜色空间过滤器的sigma值,这个参数的值越大,表明该像素邻域内有越宽广的颜色会被混合到一起,产生较大的半相等颜色区域。 
Sigma_space坐标空间中滤波器的sigma值,如果该值较大,则意味着颜色相近的较远的像素将相互影响,从而使更大的区域中足够相似的颜色获取相同的颜色。当d>0时,d指定了邻域大小且与sigmaSpace五官,否则d正比于sigmaSpace. 

双边滤波的内在想法是:在图像的值域(range)上做传统滤波器在空域(domain)上做的工作。空域滤波对空间上邻近的点进行加权平均,加权系数随着距离的增加而减少;值域滤波则是对像素值相近的点进行加权平均,加权系数随着值差的增大而减少。

对于第三个参数:d来说一般来说,要想得到比较好的结果,3、4、5参数最好都指定。

第三个参数如果设定值大于5,那计算会很慢,所以一般设置都等于5,如果少数情况需要去除比较大的噪声,那么d=9。要取得较好的平滑效果,最好在9附近
d或者Sigma_space设置的越大,包含的范围越大,耗时越长

在这里插入图片描述
在这里插入图片描述

若是高斯模糊,则整体都会模糊掉,实现滤镜效果。
二:均值迁移
推文:Opencv均值漂移pyrMeanShiftFiltering彩色图像分割流程剖析

def shift_demo(image):
dst = cv.pyrMeanShiftFiltering(image,10,50) #第二个参数d是distinct,我们若是输入了d,会根据其去算第3或4个参数,我们最好是使用第3或4个参数反算d,先设为0
cv.imshow(“shift_demo”,dst)
def pyrMeanShiftFiltering(src, sp, sr, dst=None, maxLevel=None, termcrit=None): # real signature unknown; restored from doc

第一个参数src,输入图像,8位,三通道的彩色图像,并不要求必须是RGB格式,HSV、YUV等Opencv中的彩色图像格式均可;

第二个参数sp,定义的漂移物理空间半径大小;  #越大,细节丢失越多

第三个参数sr,定义的漂移色彩空间半径大小;

第四个参数dst,输出图像,跟输入src有同样的大小和数据格式;

第五个参数maxLevel,定义金字塔的最大层数;

第六个参数termcrit,定义的漂移迭代终止条件,可以设置为迭代次数满足终止,迭代目标与中心点偏差满足终止,或者两者的结合;

在这里插入图片描述

标签:src,None,dst,滤波,OpenCV,参数,image,EPF,cv
From: https://blog.csdn.net/m0_37302966/article/details/141276633

相关文章

  • 一个简单的Rtmp推流客户端(QT录音,OpenCV摄像,FFmpeg编码推流)
            RTMP(Real-TimeMessagingProtocol)是一种实时流媒体传输协议,常用于音视频直播。        RTMP推流客户端是一种能够将音视频数据推送到直播服务器的工具。QT录音是利用Qt库实现的录音功能。OpenCV摄像是利用OpenCV库实现的对摄像头的控制和图像处理功......
  • 【OpenCV教程】对图像的各种常用操作
    @目录1.图片读取2.创建窗口3.图片显示4.图片保存5.视频输入输出5.1filename5.2index5.3fourcc5.4apiPreference(notimportant)5.5演示6.通道分离与合并6.1分离API(一)API(二)6.2合并API(一)API(二)7.图片色彩模式转换7.1API7.2转换类型和转换码8.改变图片的对比度和亮度8.1概述8......
  • OpenCV图像处理——轮廓的面积与弧长计算(C++/Python)
    概述轮廓面积与轮廓周长是图像分析中的两项核心统计特征,它们为理解和量化图像中的形状提供了基础。轮廓面积:这代表了轮廓所界定区域的像素数量,是衡量区域大小的直接指标。面积的计算结果以像素平方为单位,为我们提供了一个量化的尺度来比较不同物体的相对大小。轮廓周长......
  • OpenCV图像处理——按最小外接矩形剪切图像
    引言在图像处理过程中,提取感兴趣区域(ROI)并在其上进行处理后,往往需要将处理后的结果映射回原图像。这一步通常涉及以下几个步骤:找到最小外接矩形:使用cv::boundingRect或cv::minAreaRect提取感兴趣区域的最小外接矩形。从原图中提取ROI:根据矩形坐标从原图中剪切出RO......
  • 为OpenCV1.0添加cvJpeg2Ipl函数
    由于在OpenCV1.0中只提供了从硬盘打开JPEG图像进行解码,有些时候如果JPEG的图像数据是从内存载入的,就无法使用这些曾经很方便高效的接口。为了实现这个目的,我们通过修改OpenCV1.0源码,在其源码包中添加函数,实现把jpeg数据从内存复制到IplImage结构中,这为我们进行相应处理会方......
  • 《机器学习》KNN算法搭配OpenCV训练模型、识别图片 No.2
    一、使用KNN算法识别数字1、明确目的:        有一张图片,其中有一份数据,其中共有0-9的不同写法的数字,共5000条,现在想要对这张图片中的数据进行训练,以完成当输入一张图片,图片内为手写的数字,能自动识别其数字的值为多少,从而完成训练。2、获取数据首先看下面一张图:它......
  • 《机器学习》——运用OpenCV库中的KNN算法进行图像识别
    文章目录KNN算法的简单介绍下载OpenCV库实验内容实验结果完整代码自己手写数字传入模型中测试KNN算法的简单介绍一、KNN算法的基本要素K值的选择:K值代表选择与新测试样本距离最近的前K个训练样本数,通常K是不大于20的整数。K值的选择对算法结果有重要影响,需要通过交......
  • java opencv 去噪+动态自适应二值化
    //连接opencvSystem.setProperty("java.awt.headless","false");System.out.println(System.getProperty("java.library.path"));URLurl=ClassLoader.getSystemResource("lib/opencv/opencv_java4100.dll");System.load(url.getPa......
  • java opencv 图像匹配识别
    //region图像匹配3.0privateMatimageMatch(Imageori,Imagetbi){System.setProperty("java.awt.headless","false");System.out.println(System.getProperty("java.library.path"));URLurl=ClassLoader.getSystem......
  • opencv
    一、读取视频读取视频文件与在OpenCV中读取图像文件非常相似,区别在于我们使用了cv2.videocapture。1.1读取视频需要用到的函数视频写入函数cv.VideoWriter()读取视频cv.VideoCapture.read()写入视频cv.VideoWriter.write(frame)打开,判断是否打开isOpene......