卷积常用在信号处理中,
而图像数据可以看作一
种信号数据。
例如图像中的每一行可以看作测
量亮度变化的信号数据 ,
每一列可以看作亮度变化的信号数据 。
因此 ,
可以对图像进行卷积操作.
在信号处理中 ,
卷积操作需要给出一个卷积函数与信号进行计算。
图像的卷积形式与其相同 ,
需要
给出一个卷积模板与原始图像进行卷积计算.整个过程可以看成是一个卷积模板在另外一个大的图像上移动,对每个卷积模板覆盖的区域进行点乘,
得到的值作为中心像素点的输出值.卷积首先需要将卷积模板旋转180°之后从图像的左上角开始移动旋转后的卷积模板,从左到右,从上到下
依次进行卷积计算 最终得到卷积后的图像.卷积模板又称为卷积核或者内核
是一个固定大小的
二维矩阵,矩阵存放着预先设定的数值.
代码:
void visionagin::FitterOperate(Mat& img)
{
uchar src[] = {
1,2,3,4,5,
6,7,8,9,10,
11,12,13,14,15,
16,17,18,19,20,
21,22,23,24,25
};//待卷积矩阵
Mat src1 = Mat(1, 25, CV_8UC1, src);
Mat core = (Mat_<float>(3, 3) <<
1, 2, 1,
2, 0, 2,
1, 2, 1);//该卷积核需要除以12,不然值大于255,显示全为白色;
Mat Core = core / 12;
Mat res1,res2;//卷积后的结果
filter2D(src1, res1, CV_32F, Core, Point(-1, -1));
filter2D(img, res2, -1, Core, Point(-1, -1));//-1表示与原img类型一致
cout << res1 << endl;
imshow("卷积后的图像", res2);
}
卷积后的图像与原图相比显得更模糊:
![](https://i-blog.csdnimg.cn/blog_migrate/53bea8f56364ec0310b7d4ef6afdef16.png)