Qt+OpenCV联合开发(二十六)--图像卷积操作

一、基本知识

图像卷积可以看成是一个窗口区域在另外一个大的图像上移动,对每个窗口覆盖的区域都进行点乘得到的值作为中心像素点的输出值。窗口的移动是从左到右,从上到下。窗口可以理解成一个指定大小的二维矩阵,里面有预先指定的值。如图所示,针对均值卷积核

Qt+OpenCV联合开发(二十六)--图像卷积操作_第1张图片

Qt+OpenCV联合开发(二十六)--图像卷积操作_第2张图片

 

上图中第二行进行卷积,其中 (此时中心像素点为4)与卷积核分别相乘再除以卷积核的大小9,结果取整:

12*1+13*1+14*1+2*1+4*1+6*1+6*1+8*1+10*1/9=8

然后把8作为中心像素点的输出值,依次类推,从左到右,从上到下进行计算。

这种卷积是怎么做到的呢?这就涉及到了blur函数

二、函数原型

c++原型:

参数:

  1. src      输入图像; 它可以有任意数量的通道,这些通道是独立处理的,但深度应该是CV_8U,CV_16U,CV_16S,CV_32F或CV_64F
  2. dst      输出与src相同大小和类型的图像
  3. ksize    卷积核,默认系数全是1,就是均值卷积
  4. anchor    锚点; 默认值Point(-1,-1),表示锚点位于内核中心
  5. borderType    图像边缘处理方式

三、实现效果

卷积核3x3

Qt+OpenCV联合开发(二十六)--图像卷积操作_第3张图片

 卷积核10x10

Qt+OpenCV联合开发(二十六)--图像卷积操作_第4张图片

 卷积核10x1

Qt+OpenCV联合开发(二十六)--图像卷积操作_第5张图片

 

卷积核越大,模糊程度越厉害

卷积核10x1 就是在水平方向上的一维卷积

四、代码

void test1::blur_demo(Mat &image)
{
    Mat dst;
    blur(image,dst,Size(10,10),Point(-1,-1));
    imshow("blur_image", dst);
}

 

你可能感兴趣的:(Qt实战,C/C++,opencv,opencv,qt,计算机视觉)