OpenCV方框滤波详解:归一化与不归一化的实现及代码示例

白榆
白榆
发布时间:2026-10-12 | 3人浏览过
原创

本文详细介绍OpenCV中方框滤波(boxFilter)的原理与应用。通过对比归一化与不归一化两种模式,解析其作为均值滤波变体的特性。提供C++与Python完整代码示例,展示原始图像、归一化结果、不归一化结果及平方和均值处理效果,帮助开发者掌握图像平滑处理技术。

一、方框滤波

方框滤波本质上是均值滤波的一种扩展形式。在传统的均值滤波中,输出像素值由邻域内所有像素值的算术平均决定,即邻域像素总和除以像素数量。而在方框滤波中,用户拥有选择权:可以决定是否对计算结果进行归一化处理。这意味着,方框滤波既可以输出邻域像素的平均值(等同于均值滤波),也可以直接输出邻域像素值的总和,这为图像处理提供了更大的灵活性。

二、C++代码

#include <iostream>
#include <opencv2\opencv.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、平方和求均值

以上即为OpenCV中方框滤波处理图像的完整代码示例与效果展示。如需了解更多关于OpenCV方框滤波的应用细节,建议参考本站其他相关技术文章。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表