Qt 5.3 下OpenCV 2.4.11 开发(15)滤波函数

代码列出了高斯滤波、中值滤波、均值滤波和双边滤波:

#include <QCoreApplication>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main()
{
    double duration;

    Mat src = imread("lena.jpg", 1);
    Mat dst;
    namedWindow("src", 0);
    imshow("src", src);
    //高斯滤波,src:输入图像,dst:输出图像
    //Size(5,5)模板大小,为奇数,x方向方差,Y方向方差
    duration = static_cast<double>(getTickCount());
    GaussianBlur(src,dst,Size(31,31),0,0);
    duration = static_cast<double>(getTickCount()) - duration;
    duration /= getTickFrequency();
    cout << duration << endl;
    namedWindow("Gaussi", 0);
    imshow("Gaussi", dst);
    //中值滤波,src:输入图像,dst::输出图像,模板宽度,为奇数
    duration = static_cast<double>(getTickCount());
    medianBlur(src,dst,31);
    duration = static_cast<double>(getTickCount()) - duration;
    duration /= getTickFrequency();
    cout << duration << endl;
    namedWindow("Median", 0);
    imshow("Median", dst);
    //均值滤波,src:输入图像,dst:输出图像,模板大小
    //Point(-1,-1):被平滑点位置,为负值取核中心
    duration = static_cast<double>(getTickCount());
    blur(src,dst,Size(31,31),Point(-1,-1));
    duration = static_cast<double>(getTickCount()) - duration;
    duration /= getTickFrequency();
    cout << duration << endl;
    namedWindow("Blur", 0);
    imshow("Blur", dst);
    //双边滤波,src:输入图像,dst:输入图像,滤波模板半径
    //颜色空间标准差,坐标空间标准差
    duration = static_cast<double>(getTickCount());
    bilateralFilter(src,dst,31,62,31);
    duration = static_cast<double>(getTickCount()) - duration;
    duration /= getTickFrequency();
    cout << duration << endl;
    namedWindow("Bilatera", 0);
    imshow("Bilatera", dst);

    waitKey(0);
}

为了方便比对,统一采用31像素大小的滤波核,结果如下:

运行时间的结果如下:

通过比较滤波效果和运行时间,各种滤波算法的优缺点如下:

1、均值滤波:速度最快,且不会因为滤波核的增大而增加运行时间,由于均值滤波的特殊运算方式让他可以使用数组保存的向量计算方法使其运算性能与核大小无关,具体算法可以查看另一篇博文点击打开链接,缺点是降噪之后也会降低一些边缘和细节特征的强度,且对与椒盐噪声无能为力。

2、高斯滤波:速度相对于均值滤波略慢,并且不能使运行速度与滤波核的大小无关,对于服从正态分布的噪声有很好的降噪效果。

3、中值滤波:运算速度比较慢,且在相同滤波核增长速度的前提下,运行时间的增长速度比高斯滤波算法的增长速度大的多,但是对于椒盐噪声有很好的滤波效果。

4、双边带滤波:运行速度最慢,且在相同滤波核增长速度的前提下,运行时间比中值滤波算法增长速度还要大,但是双边带滤波算法的降噪效果的很好的,因为它除了完成降噪功能之外还能很好的保留图像中的边缘信息。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-10 21:04:20

Qt 5.3 下OpenCV 2.4.11 开发(15)滤波函数的相关文章

Qt 5.3 下OpenCV 2.4.11 开发 目录

Qt 5.3 下OpenCV2.4.11 开发(1)图片预览 Qt 5.3 下OpenCV 2.4.11 开发(2)摄像头采集 版权声明:本文为博主原创文章,未经博主允许不得转载.

Qt 5.3 下OpenCV 2.4.11 开发(0)图像处理基本概念

1.普通情况下的RGB彩色图像:它的每一个像素点都是由三个通道组成,即红色(R).绿色(G)和蓝色(B).8位三通道彩色图像就是每一个像素中每一个通道的取值范围都是 0~255(即二进制下的8位数),而整幅彩色图像则是由三个通道的图像所组成.在数据中的存储方式是依照像素连续存储的,而每一个像素中的数据存储也是按RGB连续存储的.当然,有些图片格式中像素数据是按BGR存储的,这个视情况而定. 2.灰度图像:它仅仅有一个颜色通道,所以在做图像处理的时候速度非常快,它的每一个像素是通过彩色图像的三个通

Qt 5.3 下OpenCV 2.4.11 开发(10)使用鼠标回调函数对视频帧截图

Qt 新建控制台程序,main.cpp 代码如下: #include <QCoreApplication> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <iostream> using namespace cv; using namespace std;

Qt 5.3 下OpenCV 2.4.11 开发(3)简单的GUI项目

新建一个GUI项目,QT4为 Qt4 Gui Application,QT5为 Qt Widgets Application,基类选择 QMainWindow 项目实现功能:两个按钮,一个用于在文件夹中选择图片并预览图片,一个按钮用于反转该图片.项目代码如下: .pro 代码段,关于加入opencv头文件和库函数的代码根据自己开发环境而定. #------------------------------------------------- # # Project created by QtCr

Qt 5.3 下OpenCV 2.4.11 开发(11)CamShift 目标跟踪

控制台应用下,使用鼠标在预览摄像头上进行截图,截图内容为目标所在区域的矩形,然后利用函数CamShift 函数对目标进行跟踪,代码如下,要记得添加项目引用库,章节目录有: #include <QCoreApplication> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #inclu

Qt 5.3 下OpenCV 2.4.11 开发(5)最高效的像素引用

OpenCV 提供一个函数 getTickCount() ,能够用来測量一段代码的执行时间.另一个函数 getTickFrequency() 用来返回每秒内的时钟周期.代码操作例如以下: double duration; duration = static_cast<double>(getTickCount()); colorReduce(src); duration = static_cast<double>(getTickCount()) - duration; duratio

Qt 5.3 下OpenCV 2.4.11 开发(9)直方图均衡化

接着上面的章节,我们在 Histogram1D 类中加入一个新方法,即直方图均衡化的方法,现在贴出完整的代码,Histogram1D 类 头文件如下: #ifndef HISTOGRAM1D_H #define HISTOGRAM1D_H #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/opencv.hpp> using namespace

Qt 5.3 下OpenCV 2.4.11 开发(8)查表法直方图修改图像

接着上节内容,本节添加两个方法 stretch() 方法和 applyLookUp() 方法.第一个方法用于拉伸直方图的准备工作,即排除直方图中没有像素值存在的项:第二个方法用查表法拉伸图像.现在贴出完整代码,Histogram1D.h 代码段如下: #ifndef HISTOGRAM1D_H #define HISTOGRAM1D_H #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #

Qt 5.3 下OpenCV 2.4.11 开发(7)单通道直方图绘制

函数中主要使用的 calcHist() 函数来统计一个直方图,直方图统计类的头文件和源文件,头文件代码如下: #ifndef HISTOGRAM1D_H #define HISTOGRAM1D_H #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/opencv.hpp> using namespace cv; using namespace