C++如何实现OpenCV方框滤波效果

C++如何实现OpenCV方框滤波效果

这篇文章将为大家详细讲解有关C++如何实现OpenCV方框滤波效果,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

一、方框滤波

   方框滤波是均值滤波的一种形式。在均值滤波中,滤波结果的像素值是任意一个点的邻域平均值,等于各邻域像素值之和的均值,而在方框滤波中,可以自由选择是否对均值滤波的结果进行归一化,即可以自由选择滤波结果是邻域像素值之和的平均值,还是邻域像素值之和。

二、C++代码

#include<iostream>#include<opencv2\opencv.hpp>usingnamespacecv;usingnamespacestd;intmain(){//---------------------------用于方框滤波的图像--------------------Matimg=imread("1.jpg");if(img.empty()){cout<<"请确认图像文件名称是否正确"<<endl;return-1;}//将CV_8U类型转换成CV_32F类型,避免计算后的数据过大MatequalImg_32F;img.convertTo(equalImg_32F,CV_32F,1.0/255);MatresultNorm,result,equalImg_32FSqr;//--------------------------方框滤波boxFilter----------------------boxFilter(img,resultNorm,-1,Size(3,3),Point(-1,-1),true);//进行归一化,则为均值滤波boxFilter(img,result,-1,Size(3,3),Point(-1,-1),false);//不进行归一化//----------------------方框滤波sqrBoxFilter()---------------------//对每个像素数值的平方求和/求均值sqrBoxFilter(equalImg_32F,equalImg_32FSqr,-1,Size(3,3),Point(-1,-1),true,BORDER_CONSTANT);//-------------------------显示处理结果----------------------------imshow("原始图像",img);imshow("归一化",resultNorm);imshow("不归一化",result);imshow("平方和求均值",equalImg_32FSqr);waitKey(0);return0;}

三、python代码

importcv2importmatplotlib.pyplotasplt#读取图片img=cv2.imread('1.jpg')#BGR转为RGB,方便plot函数显示source=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)#方框滤波,True表示归一化,则效果与均值滤波相同。result=cv2.boxFilter(source,-1,(5,5),normalize=False)#sqrBoxFilter实现对每个像素值的平方求和#result1=cv2.sqrBoxFilter(source,-1,(5,5),normalize=True)#显示图形titles=['SourceImage','BoxFilterImage']images=[source,result]foriinrange(2):plt.subplot(1,2,i+1),plt.imshow(images[i],'gray')plt.title(titles[i])plt.xticks([]),plt.yticks([])plt.show()

四、结果展示

1、原始图像

2、归一化

3、不归一化

4、平方和求均值

关于“C++如何实现OpenCV方框滤波效果”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

发布于 2022-03-03 21:24:15
收藏
分享
海报
0 条评论
31
上一篇:Vue怎么实现Mysql数据库数据的模糊查询 下一篇:Vue+Openlayer如何实现图形的拖动和旋转变形效果
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码