文章目录
opencv图像卷积操作原理,opencv中常用的图像滤波函数
一、图像卷积操作原理:
卷积是图像处理中常用的操作之一,它通过在图像上滑动一个滤波器(也称为卷积核)来实现对图像的处理,每个滤波器(卷积核)都是一个小的矩阵,它包含一组权重值;
1、卷积操作原理图:
- 将滤波器(卷积核)与图像的一个小区域相乘;
- 将得到的乘积相加,得到一个新的像素值;
- 通过不断滑动滤波器(卷积核),对整幅图像进行处理,从而得到一幅经过卷积操作的图像;

计算过程图:

二、opencv常用的图像滤波函数:这些函数的主要作用是对图像进行平滑处理或去除噪声(核心目的是减少图像中的噪声,使图像变得更加平滑);
1、cv::blur()函数:英文全拼blur
均值滤波器(平均滤波器),用于图像模糊(平滑)处理的函数,它将图像中的每个像素值替换为其周围像素值的平均值,从而实现图像的模糊效果;
(1)函数原型:
void cv::blur(
InputArray src,
OutputArray dst,
Size ksize,
Point anchor = Point(-1,-1),
int borderType = BORDER_DEFAULT
);
参数解释:
src:输入图像,可以是单通道或多通道图像(如灰度图或彩色图);
dst:输出图像;
ksize:卷积核,用cv::Size(width, height)来指定,例如(3,3)表示一个3x3的卷积核,通常使用奇数大小的核;
anchor:锚点,默认为卷积核的中心,默认值Point(-1, -1);
borderType:图像边缘处的像素填充方式(
cv::BORDER_CONSTANT:在图像边缘处的像素,用常数填充,这个常数由cv::Scalar()函数指定,默认为黑色;
cv::BORDER_REPLICATE:在图像边缘处的像素,用最边界的像素值来填充;
cv::BORDER_DEFAULT:根据具体情况选择最合适的边界处理方式,默认值;
)
(2)代码示例:
#include <opencv2\opencv.hpp>
#include <iostream>
#include <demo.h>
using namespace cv;
using namespace std;
int main() {
// 读取彩色图像
cv::Mat image = cv::imread("C:\\cpp\\image\\suzy1.jpg");
if (image.empty()) {
std::cerr << "Error: 无法读取图像文件." << std::endl;
return -1;
}
cv::Mat outputImage;
cv::Size kernelSize(5, 5);
cv::blur(image, outputImage, kernelSize);
cv::imshow("Input Image", image);
cv::imshow("Blurred Image", outputImage);
cv::waitKey(0);
return 0;
}
运行结果:

2、cv::boxFilter()函数:
方框滤波器(均值滤波器的一种变体),方框滤波器与均值滤波器类似,通过计算图像中每个像素周围邻域像素的加权平均值来减少噪声,但相比
cv::blur(),cv::boxFilter()可以指定不同的归一化方式;
(1)函数原型:
void cv::boxFilter(
cv::InputArray src,
cv::OutputArray dst,
int ddepth,
cv::Size ksize,
cv::Point anchor = cv::Point(-1,-1),
bool normalize = true,
int borderType = c

本文详细介绍了OpenCV库中常用的图像滤波函数,包括均值滤波(blur、boxFilter)、高斯滤波(GaussianBlur)、中值滤波(medianBlur)、双边滤波(bilateralFilter)以及通用的filter2D函数,着重讲解了这些函数在平滑处理和噪声去除中的应用。
最低0.47元/天 解锁文章
987

被折叠的 条评论
为什么被折叠?



