一、方框滤波
方框滤波是均值滤波的一种形式。在均值滤波中,滤波结果的像素值是任意一个点的邻域平均值,等于各邻域像素值之和的均值,而在方框滤波中,可以自由选择是否对均值滤波的结果进行归一化,即可以自由选择滤波结果是邻域像素值之和的平均值,还是邻域像素值之和。
二、c++代码
#include <iostream> #include <opencv2opencv.hpp> using namespace cv; using namespace std; int main() { //---------------------------用于方框滤波的图像-------------------- mat img = imread("1.jpg"); if (img.empty()) { cout << "请确认图像文件名称是否正确" << endl; return -1; } //将cv_8u类型转换成cv_32f类型,避免计算后的数据过大 mat equalimg_32f; img.convertto(equalimg_32f, cv_32f, 1.0 / 255); mat resultnorm, 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); return 0; }
三、python代码
import cv2 import matplotlib.pyplot as plt # 读取图片 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 = ['source image', 'boxfilter image'] images = [source, result] for i in range(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方框滤波的实现的文章就介绍到这了,更多相关opencv方框滤波内容请搜索<计算机技术网(www.ctvol.com)!!>以前的文章或继续浏览下面的相关文章希望大家以后多多支持<计算机技术网(www.ctvol.com)!!>!
需要了解更多c/c++开发分享C++实现OpenCV方框滤波的代码,都可以关注C/C++技术分享栏目—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/841567.html