搜档网
当前位置:搜档网 › 使用Qt和OpenCV做的图像低通滤波器

使用Qt和OpenCV做的图像低通滤波器

使用Qt和OpenCV做的图像低通滤波器
使用Qt和OpenCV做的图像低通滤波器

目录

第1章相关知识 (1)

1.1 OpenCV (1)

1.2 Qt (1)

1.3 数字图像低通滤波 (1)

第2章设计方案 (2)

2.1功能模块 (2)

2.1.1载入图片 (2)

2.1.2处理图片 (2)

2.1.3保存图片 (2)

2.2文件模块 (2)

2.2.1 mainwindow.h文件和mainwindow.cpp文件 (2)

2.2.2 mainwindow.ui文件 (2)

2.2.3 main.cpp文件 (3)

2.2.4 opencv_and_qt.pro文件 (3)

第3章源代码 (4)

3.1 mainwindow.h 文件 (4)

3.2 mainwindow.cpp文件 (5)

3.3 mainwindow.ui文件 (6)

3.4 main.cpp文件 (9)

3.5 opencv_and_qt.pro文件 (9)

第4章结果分析 (11)

4.1 程序界面 (11)

4.2浏览 (12)

4.3处理 (13)

4.3.1原图片 (13)

4.3.2结果图片 (14)

4.4保存文件 (15)

第5章结束语 (16)

参考文献 (17)

第1章相关知识

目前进行数字图像处理有两类方法,一种是使用MATLAB,另一种是使用OpenCV。本次课设我使用OpenCV实现图像处理功能,使用Qt做界面,编程语言选择C++。

1.1 OpenCV

OpenCV是一个开源的、跨平台的计算机视觉库。与MATLAB相比,OpenCV 运行速度快、可免费用于学术和商业上使用,易于嵌入到应用程序中。

1.2 Qt

在程序的界面设计部分,我使用Qt。Qt是一个开源的、跨平台的图形用户界面应用程序开发框架,使用者需遵守LGPL 2.1。

1.3 数字图像低通滤波

如果以图像灰度变化快慢的角度来分析图像,则属于频域分析。如果以图像灰度的空间分布来分析图像,则属于空间域分析。

当我们进行频域分析时,图像的灰度变化缓慢的区域对应于低通部分,反之则对应于高通部分。

低通滤波器就是去掉图像的高频部分,保留低频部分。

本次课设中我使用了OpenCV的blur函数,其算法原理是求出像素的邻域的灰度平均值作为像素的输出值,模板大小可以有参数指定。这种方法叫做邻域平均法,是图像的灰度变化减慢,属于低通滤波。

第2章设计方案

由于在程序的实现中,各功能模块混合在了一起。所以我将功能模块和文件模块分别介绍。

2.1功能模块

2.1.1载入图片

将原始图片载入到程序中。

2.1.2处理图片

对原始图片进行低通滤波处理。

2.1.3保存图片

将处理后的结果保存到指定位置。

2.2文件模块

2.2.1 mainwindow.h文件和mainwindow.cpp文件

用于实现MainWindow类。这个类既实现了界面的创建,又实现了图像的低通滤波功能。

2.2.2 mainwindow.ui文件

用于辅助设计界面。如果单纯用代码来实现界面,很不方便。所以我使用Qt Creator(这是Qt官方的IDE)的设计功能,通过鼠标对控件拖拽,自动生成了mainwindow.ui文件的代码。此文件实现了按钮控件的创建和位置设置。

2.2.3 main.cpp文件

实现了程序的主函数main函数。

2.2.4 opencv_and_qt.pro文件

对Qt项目进行了配置,使Qt和OpenCV可以同时使用

第3章源代码3.1 mainwindow.h文件

#ifndef MAINWINDOW_H

#define MAINWINDOW_H

#include

#include

#include

usingnamespace cv;

namespace Ui{

class MainWindow;

}

class MainWindow:public QMainWindow

{

Q_OBJECT

public:

explicit MainWindow(QWidget*parent=0);

~MainWindow();

private:

Ui::MainWindow*ui;

Mat image; //载入的原始图片

Mat result; //处理后的图片privateslots:

void liulan(); //载入图片

void chuli(); //对图片进行低通滤波void baocun(); //保存图片

};

#endif//MAINWINDOW_H

3.2 mainwindow.cpp文件

#include"mainwindow.h"

#include"ui_mainwindow.h"

MainWindow::MainWindow(QWidget*parent):

QMainWindow(parent),

ui(new Ui::MainWindow)

{

ui->setupUi(this);

connect(ui->liulanButton,SIGNAL(clicked()),this,SLOT(liulan())); connect(ui->xianshiButton,SIGNAL(clicked()),this,SLOT(chuli())); connect(ui->baocunButton,SIGNAL(clicked()),this,SLOT(baocun())); }

MainWindow::~MainWindow()

{

delete ui;

}

void MainWindow::liulan()

{

QString imageName=QFileDialog::getOpenFileName(this,"Openfile"); image=imread(imageName.toAscii().data());

}

void MainWindow::chuli()

{

cv::blur(image,result,cv::Size(5,5));

imshow("result",result);

imshow("image",image);

}

void MainWindow::baocun()

{

QString fileName=QFileDialog::getSaveFileName(this,"Save file"); imwrite(fileName.toAscii().data(),result);

}

3.3 mainwindow.ui文件

MainWindow

0

0

400

300

MainWindow

150

40

75

23

浏览

150

130

75

23

处理

150

200

75

23

保存文件

0

0

400

23

TopToolBarArea

false

3.4 main.cpp文件

#include

#include"mainwindow.h"

int main(int argc,char*argv[])

{

QApplication a(argc,argv);

MainWindow w;

w.show();

return a.exec();

}

3.5 opencv_and_qt.pro文件

#-------------------------------------------------#

#ProjectcreatedbyQtCreator2012-05-19T20:58:04

#

#-------------------------------------------------QT+=coregui

TARGET=opencv_and_qt

TEMPLATE=app

SOURCES+=main.cpp\

mainwindow.cpp

HEADERS+=mainwindow.h

FORMS+=mainwindow.ui

INCLUDEPATH+=D:\OpenCV\opencv\build\include\opencv2\

D:\OpenCV\opencv\build\include\opencv\

D:\OpenCV\opencv\build\include

CONFIG(release,debug|release)

{

LIBS+=D:\OpenCV\opencv\build\x86\vc10\lib\opencv_calib3d231.lib\ D:\OpenCV\opencv\build\x86\vc10\lib\opencv_contrib231.lib\

D:\OpenCV\opencv\build\x86\vc10\lib\opencv_core231.lib\

D:\OpenCV\opencv\build\x86\vc10\lib\opencv_features2d231.lib\

D:\OpenCV\opencv\build\x86\vc10\lib\opencv_flann231.lib\

D:\OpenCV\opencv\build\x86\vc10\lib\opencv_gpu231.lib\

D:\OpenCV\opencv\build\x86\vc10\lib\opencv_highgui231.lib\

D:\OpenCV\opencv\build\x86\vc10\lib\opencv_imgproc231.lib\

D:\OpenCV\opencv\build\x86\vc10\lib\opencv_legacy231.lib\

D:\OpenCV\opencv\build\x86\vc10\lib\opencv_ml231.lib\

D:\OpenCV\opencv\build\x86\vc10\lib\opencv_objdetect231.lib\

D:\OpenCV\opencv\build\x86\vc10\lib\opencv_ts231.lib\

D:\OpenCV\opencv\build\x86\vc10\lib\opencv_video231.lib

}

CONFIG(debug,debug|release)

{

LIBS+=D:\OpenCV\opencv\build\x86\vc10\lib\opencv_calib3d231d.lib\ D:\OpenCV\opencv\build\x86\vc10\lib\opencv_contrib231d.lib\

D:\OpenCV\opencv\build\x86\vc10\lib\opencv_core231d.lib\

D:\OpenCV\opencv\build\x86\vc10\lib\opencv_features2d231d.lib\ D:\OpenCV\opencv\build\x86\vc10\lib\opencv_flann231d.lib\

D:\OpenCV\opencv\build\x86\vc10\lib\opencv_gpu231d.lib\

D:\OpenCV\opencv\build\x86\vc10\lib\opencv_highgui231d.lib\

D:\OpenCV\opencv\build\x86\vc10\lib\opencv_imgproc231d.lib\

D:\OpenCV\opencv\build\x86\vc10\lib\opencv_legacy231d.lib\

D:\OpenCV\opencv\build\x86\vc10\lib\opencv_ml231d.lib\

D:\OpenCV\opencv\build\x86\vc10\lib\opencv_objdetect231d.lib\

D:\OpenCV\opencv\build\x86\vc10\lib\opencv_ts231d.lib\

D:\OpenCV\opencv\build\x86\vc10\lib\opencv_video231d.lib

}

RESOURCES+=\

resource.qr

第4章结果分析

4.1 程序界面

图 4-1 程序界面

程序中有三个按钮。“浏览”按钮用于读取图片。“处理”按钮用于对图像进行低通滤波,并且会显示原始图像和处理后的图像。“保存文件”按钮用于保存处理后的图像。

图 4-2 浏览

4.3.1原图片

图 4-3-1

4.3.2结果图片

图 4-3-2 结果图片

4.4保存文件

图 4-4 保存图片

第5章结束语

这次课设,软件的功能成功实现了。但也有缺点,软件的界面太简陋,原因是我的Qt技术水平还是处于入门阶段。接下来我的目标有两个:一是加深对数字图像处理算法的理解,争取自己可以独立于OpenCV,设计出自己的API;二是提高Qt的技术水平。

参考文献

[1] Robert Laganière.OpenCV 2 Computer Vision Application Programming Cookbook[M].Packt Publishing Ltd, 2011.5

[2]JasminBlanchette, Mark Summerfield.C++ GUIProgrammingwith Qt 4[M]. Prentice Hall Press Upper Saddle River, 2008

[3]贾永红.数字图像处理[M].武汉大学出版社,2010.2

图像处理opencv代码

#include "stdafx.h" #include "mymfc.h" #include "mymfcDlg.h" #include "afxdialogex.h" #include #ifdef _DEBUG #define new DEBUG_NEW #endif // 用于应用程序“关于”菜单项的 CAboutDlg 对话框 class CAboutDlg : public CDialogEx { public: CAboutDlg(); // 对话框数据 enum { IDD = IDD_ABOUTBOX }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 // 实现 protected: DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD) { } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx) END_MESSAGE_MAP() // CmymfcDlg 对话框

CmymfcDlg::CmymfcDlg(CWnd* pParent /*=NULL*/) : CDialogEx(CmymfcDlg::IDD, pParent) , TheImage(NULL) , rePath(_T("")) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CmymfcDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CmymfcDlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_ReadImg, &CmymfcDlg::OnBnClickedReadimg) ON_BN_CLICKED(IDC_EdgeDetect, &CmymfcDlg::OnBnClickedEdgedetect) ON_BN_CLICKED(IDC_Refresh, &CmymfcDlg::OnBnClickedRefresh) ON_BN_CLICKED(IDC_GrayProcess, &CmymfcDlg::OnBnClickedGrayprocess) ON_BN_CLICKED(IDC_Sobel, &CmymfcDlg::OnBnClickedSobel) ON_BN_CLICKED(IDC_Laplace, &CmymfcDlg::OnBnClickedLaplace) ON_BN_CLICKED(IDC_FFT2, &CmymfcDlg::OnBnClickedFft2) ON_BN_CLICKED(IDC_CImage, &CmymfcDlg::OnBnClickedCimage) ON_BN_CLICKED(IDC_Mirror, &CmymfcDlg::OnBnClickedMirror) ON_BN_CLICKED(IDC_CColor, &CmymfcDlg::OnBnClickedCcolor) ON_BN_CLICKED(IDC_MedianBlur, &CmymfcDlg::OnBnClickedMedianblur) ON_BN_CLICKED(IDC_Gaussian, &CmymfcDlg::OnBnClickedGaussian) ON_BN_CLICKED(IDC_BothSide, &CmymfcDlg::OnBnClickedBothside) ON_BN_CLICKED(IDC_Equally, &CmymfcDlg::OnBnClickedEqually) ON_BN_CLICKED(IDC_Corrosion, &CmymfcDlg::OnBnClickedCorrosion) ON_BN_CLICKED(IDC_Dilate, &CmymfcDlg::OnBnClickedDilate) END_MESSAGE_MAP() // CmymfcDlg 消息处理程序 BOOL CmymfcDlg::OnInitDialog() { CDialogEx::OnInitDialog();

基于OpenCV识别库的面部图像识别系统的设计

基于OpenCV识别库的面部图像识别系统的设计 本系统采用J2EE技术并以OpenCV开源计算机视觉库技术为基础,实现一套具有身份验证功能的面部图像识别信息管理系统。系统使用MySQL数据库提供数据支撑,依托于J2EE的稳定性和Java平台的可移植性使得本系统可以在各个操作系统平台中运行,同时提供在互联网中使用面部识别技术的一套较为完备的解决方案。 标签:OpenCV;人脸识别;生物学特征 引言 随着信息技术的飞速发展以及互联网的深入普及,越来越多的行业和领域使用信息技术产品以提高工作效率和管理水平。但是由于人们隐私信息的保护意识薄弱,出现了许多信息安全的问题。在人们对于信息安全越来越重视的情况下,许多技术被应用到信息安全领域中来。较为先进的技术有虹膜识别技术、遗传基因识别技术以及指纹识别技术等。而论文采用的是当前热点的面部图像识别技术。 1 系统实现算法及功能分析 1.1 面部图像的生物学特征模型的建立 本系统是利用面部图形的生物学特征来识别不同的人。由于每个人的面部图像都有各自的特征但又具有一定的通性,需要应用生物学中相关知识加以解决。可以利用已有的生物学测量手段以及现有的算法构建人的面部图像生物学特征模型(简称:面部模型),并应用于系统中,面部模型的建立为面部图像识别的功能提供实现依据。 1.2 知识特征库及面部识别引擎的建立 在前述面部模型建立完成后,需要建立相应的知识库以及面部识别引擎方可进行身份的识别。可经过大量数据的采集和分析后建立知识库,并根据知识库的特点建立相应的识别引擎。此识别引擎对外开放,在本系统中提供其它外来程序的调用接口,其它系统能够通过本接口实现识别引擎的调用实现对于面部图形的识别,从而达到识别引擎的可复用性。在技术条件允许的情况下,提供知识库的智能训练以及半自动构建支持。 1.3 面部图像的采集与预处理 本系统中采用了预留API接口,利用USB图形捕获设备采集数据图像。经过USB设备的捕获,使用JMF(Java Media Framework)来处理已捕获的图像数据,对捕获的图像进行面部图行检测和实时定位跟踪。

树莓派安装opencv

树莓派学习笔记——apt方式安装opencv 0.前言 本文介绍如何在树莓派中通过apt方式安装opencv,并通过一个简单的例子说明如何使用opencv。相比于源代码方式安装opencv,通过apt方式安装过程步骤简单些,消耗的时间也少一些。通过apt方式安装没有自动生成opencv.pc文件,所以在编写makefile文件时不能直接使用pkg-config工具,而需要逐个指定opencv_core、opencv_imgproc 等动态链接库。 【相关博文】 【树莓派学习笔记——源代码方式安装opencv】 更多内容请参考——【树莓派学习笔记——索引博文】 1.安装opencv 开始之前进行必要的更新工作。 sudo apt-get update 安装opencv。 sudo apt-get install libcv-dev 安装过程比较缓慢,请耐心等待。 安装完成之后,opencv相关的头文件被安装到/usr/lib目录中,该目录是linux默认头文件查找路径。opencv的相关动态链接库被安装到/usr/lib目录中。这些动态链接库包括: 【opencv_calib3d】——相机校准和三维重建

【opencv_core】——核心模块,绘图和其他辅助功能 【opencv_features2d】——二维特征检测 【opencv_flann】——快速最邻近搜索 【opencv_highgui】——GUI用户界面 【opencv_imgproc】——图像处理 【opencv_legacy】——废弃部分 【opencv_ml】——机器学习模块 【opencv_objdetect】——目标检测模块 【opencv_ocl】——运用OpenCL加速的计算机视觉组件模块【opencv_video】——视频分析组件 2.简单示例 【C++】——通过代码载入一张图片,通过opencv把彩色图片转换为黑白图片,并把原图和转换后的图片输出到屏幕中。 [cpp]view plaincopy 1.#include 2.#include 3.#include 4.#include https://www.sodocs.net/doc/435867168.html,ing namespace cv; https://www.sodocs.net/doc/435867168.html,ing namespace std; 7.int main (int argc, char **argv) 8.{ 9. Mat image, image_gray; 10. image = imread(argv[1], CV_LOAD_IMAGE_COLOR ); 11.if (argc != 2 || !image.data) { 12. cout << "No image data\n"; 13.return -1; 14. } 15.

opencv函数目录-Cv图像处理

目录 1 梯度、边缘和角点 1.1 Sobel 1.2 Laplace 1.3 Canny 1.4 PreCornerDetect 1.5 CornerEigenValsAndVecs 1.6 CornerMinEigenVal 1.7 CornerHarris 1.8 FindCornerSubPix 1.9 GoodFeaturesToTrack 2 采样、插值和几何变换 2.1 InitLineIterator 2.2 SampleLine 2.3 GetRectSubPix 2.4 GetQuadrangleSubPix 2.5 Resize 2.6 WarpAffine 2.7 GetAffineTransform 2.8 2DRotationMatrix 2.9 WarpPerspective 2.10 WarpPerspectiveQMatrix 2.11 GetPerspectiveTransform 2.12 Remap 2.13 LogPolar 3 形态学操作 3.1 CreateStructuringElementEx 3.2 ReleaseStructuringElement 3.3 Erode 3.4 Dilate 3.5 MorphologyEx 4 滤波器与色彩空间变换 4.1 Smooth 4.2 Filter2D 4.3 CopyMakeBorder 4.4 Integral 4.5 CvtColor 4.6 Threshold 4.7 AdaptiveThreshold 5 金字塔及其应用 5.1 PyrDown 5.2 PyrUp 6 连接部件 6.1 CvConnectedComp

配置OpenCV+VS

配置OpenCV2.4.10 + Visual Studio 2010 一、安装OpenCV 1、双击OpenCV安装包,会提示解压到某个地方,推荐放到D:\Program Files\下,比如安装路径就写:D:\Program Files。 2、等一段时间,OpenCV2.4.10近3个多G的文件就解压到了D:\Program Files 下。其中,build里面是使用OpenCV2.4.10相关的文件,我们如果只是使用OpenCV2.4.10的话呢,就只用管build里面的内容。 二、安装Visual Studio 2010 1、右击Visual Studio 2010的压缩包,解压文件。在解压后的文件中找到autorun 应用程序, 2、点开autorun,弹出一下对话框,点击对话框中的“安装Microsoft Visual Studio

2010”. 3、如图所示下一步: 4、选中我已阅读许可条款,点击下一步

5、根据需要选择功能,安装路径,点击安装 6、几分钟之后,出现如图需要重新启动才能完成安装。大家记得保存好已打开的其他文件再重启。

7、电脑重启之后,安装程序自动出现,耐心等待安装。

8、四十分钟后,安装完成。 9、最后还会跳出这么一个对话框,直接点退出就可以了。到此,软件安装过程全部结束。成功了。打开软件就可以用了。

三、配置OpenCV2.4.10 和 Visual studio 2010 3.1、配置环境变量 3.1.1、【计算机】->【(右键)属性】->【高级系统设置】->【高级(标签)】->【环境变量】->“双击”系统变量中的PATH->在变量值里面添加相应的路径。如图:

图像管理方案计划opencv代码

/. #include "stdafx.h" #include "mymfc.h" #include "mymfcDlg.h" #include "afxdialogex.h" #include #ifdef _DEBUG #define new DEBUG_NEW #endif // 用于应用程序“关于”菜单项的CAboutDlg 对话框 class CAboutDlg : public CDialogEx { public: CAboutDlg(); // 对话框数据 enum { IDD = IDD_ABOUTBOX }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 // 实现 protected: DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD) { } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx) END_MESSAGE_MAP() // CmymfcDlg 对话框

CmymfcDlg::CmymfcDlg(CWnd* pParent /*=NULL*/) : CDialogEx(CmymfcDlg::IDD, pParent) , TheImage(NULL) , rePath(_T("")) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CmymfcDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CmymfcDlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_ReadImg, &CmymfcDlg::OnBnClickedReadimg) ON_BN_CLICKED(IDC_EdgeDetect, &CmymfcDlg::OnBnClickedEdgedetect) ON_BN_CLICKED(IDC_Refresh, &CmymfcDlg::OnBnClickedRefresh) ON_BN_CLICKED(IDC_GrayProcess, &CmymfcDlg::OnBnClickedGrayprocess) ON_BN_CLICKED(IDC_Sobel, &CmymfcDlg::OnBnClickedSobel) ON_BN_CLICKED(IDC_Laplace, &CmymfcDlg::OnBnClickedLaplace) ON_BN_CLICKED(IDC_FFT2, &CmymfcDlg::OnBnClickedFft2) ON_BN_CLICKED(IDC_CImage, &CmymfcDlg::OnBnClickedCimage) ON_BN_CLICKED(IDC_Mirror, &CmymfcDlg::OnBnClickedMirror) ON_BN_CLICKED(IDC_CColor, &CmymfcDlg::OnBnClickedCcolor) ON_BN_CLICKED(IDC_MedianBlur, &CmymfcDlg::OnBnClickedMedianblur) ON_BN_CLICKED(IDC_Gaussian, &CmymfcDlg::OnBnClickedGaussian) ON_BN_CLICKED(IDC_BothSide, &CmymfcDlg::OnBnClickedBothside) ON_BN_CLICKED(IDC_Equally, &CmymfcDlg::OnBnClickedEqually) ON_BN_CLICKED(IDC_Corrosion, &CmymfcDlg::OnBnClickedCorrosion) ON_BN_CLICKED(IDC_Dilate, &CmymfcDlg::OnBnClickedDilate) END_MESSAGE_MAP() // CmymfcDlg 消息处理程序 BOOL CmymfcDlg::OnInitDialog() { CDialogEx::OnInitDialog();

基于OpenCv的图像识别

基于2DPCA的人脸识别算法研究 摘要 人脸识别技术是对图像和视频中的人脸进行检测和定位的一门模式识别技术,包含位置、大小、个数和形态等人脸图像的所有信息。由于近年来计算机技术的飞速发展,为人脸识别技术的广泛应用提供了可能,所以图像处理技术被广泛应用了各种领域。该技术具有广阔的前景,如今已有大量的研究人员专注于人脸识别技术的开发。本文的主要工作内容如下: 1)介绍了人脸识别技术的基础知识,包括该技术的应用、背景、研究方向以及 目前研究该技术的困难,并对人脸识别系统的运行过程以及运行平台作了简单的介绍。 2)预处理工作是在原始0RL人脸库上进行的。在图像的预处理阶段,经过了图 象的颜色处理,图像的几何归一化,图像的均衡化和图象的灰度归一化四个过程。所有人脸图像通过上述处理后,就可以在一定程度上减小光照、背景等一些外在因素的不利影响。 3)介绍了目前主流的一些人脸检测算法,本文采用并详细叙述了Adaboost人脸 检测算法。Adaboost算法首先需要创建人脸图像的训练样本,再通过对样本的训练,得到的级联分类器就可以对人脸进行检测。 4)本文介绍了基于PCA算法的人脸特征点提取,并在PCA算法的基础上应用了 改进型的2DPCA算法,对两者的性能进行了对比,得出后者的准确度和实时性均大于前者,最后将Adaboost人脸检测算法和2DPCA算法结合,不仅能大幅度降低识别时间,而且还相互补充,有效的提高了识别率。 关键词:人脸识别 2DPCA 特征提取人脸检测

2DPCA Face Recognition Algorithm Based on The Research Abstract:Face recognition is a technology to detect and locate human face in an image or video streams,Including location, size, shape, number and other information of human face in an image or video streams.Due to the rapid development of computer operation speed makes the image processing technology has been widely applied in many fields in recent years. This paper's work has the following several aspects: 1)Explained the background, research scope and method of face recognition,and introduced the theoretical method of face recognition field in general. 2)The pretreatments work is based on the original ORL face database. In the image preprocessing stage, there are the color of the image processing, image geometric normalization, image equalization and image gray scale normalization four parts. After united processing, the face image is standard, which can eliminate the adverse effects of some external factors. 3)All kinds of face detection algorithm is introduced, and detailed describing the Adaboost algorithm for face detection. Through the Adaboost algorithm to create a training sample,then Training the samples of face image,and obtaining the cascade classifier to detect human face. 4)This paper introduces the facial feature points extraction based on PCA ,and 2DPCA is used on the basis of the PCA as a improved algorithm.Performance is compared between the two, it is concluds that the real time and accuracy of the latter is greater than the former.Finally the Adaboost face detection algorithm and 2DPCA are combined, which not only can greatly reduce the recognition time, but also complement each other, effectively improve the recognition rate. Key words:Face recognition 2DPCA Feature extraction Face detection

基于opencv对图像的预处理

基于opencv 对图像的预处理 1.问题描述 本次设计是基于opencv 结合c++语言实现的对图像的预处理,opencv 是用于开发实时的图像处理、计算机视觉及模式识别程序;其中图像的预处理也就是利用opencv 对图像进行简单的编辑操作;例如对图像的对比度、亮度、饱和度进行调节,同时还可以对图像进行缩放和旋转,这些都是图像预处理简单的处理方法;首先通过opencv 加载一幅原型图像,显示出来;设置五个滑动控制按钮,当拖动按钮时,对比度、亮度、饱和度的大小也会随之改变,也可以通过同样的方式调节缩放的比例和旋转的角度,来控制图像,对图像进行处理,显示出符合调节要求的图像,进行对比观察他们的之间的变化。 2.模块划分 此次设计的模块分为五个模块,滑动控制模块、对比度和亮度调节模块、饱和度调节模块、缩放调节模块、旋转调节模块,他们之间的关系如下所示: 图一、各个模块关系图 调用 调用 调用 调用 滑动控制模块 对比度和亮度调节模块 饱和度调节模块 缩放调节模块 旋转调节模块

滑动控制模块处于主函数之中,是整个设计的核心部分,通过createTrackbar创建五个滑动控制按钮并且调用每个模块实现对图像相应的调节。 3.算法设计 (1)滑动控制: 滑动控制是整个设计的核心部分,通过创建滑动控制按钮调节大小来改变相应的数据,进行调用函数实现对图像的编辑,滑动控制是利用createTrackbar(),函数中包括了滑动控制的名称,滑动控制显示在什么窗口上,滑动变量的地址和它调节的最大围,以及每个控制按钮应该调用什么函数实现什么功能; (2)对比度和亮度的调节: 对比度和亮度的调节的原理是依照线性理论,它的公式如下所示:g(x)=a* f(x) +b,其中f(x)表示源图像的像素,g(x)表示输出图像的像素,参数a(需要满足a>0)被称为增益(gain),常常被用来控制图像的对比度,参数b通常被称为偏置(bias),常常被用来控制图像的亮度; (3)饱和度的调节: 饱和度调节利用cvCvtColor( src_image, dst_image, CV_BGR2HSV )将RGB 颜色空间转换为HSV颜色空间,其中“H=Hue”表示色调,“S=Saturation”表示饱和度,“V=Value ”表示纯度;所以饱和度的调节只需要调节S的大小,H 和V的值不需要做任何的改变; (4)旋转的调节: 旋转是以某参考点为圆心,将图像的个点(x,y)围绕圆心转动一个逆时针角度θ,变为新的坐标(x1,y1),x1=rcos(α+θ),y1=rsin(α+θ),其中r是图像的极径,α是图像与水平的坐标的角度的大小; (5)缩放的调节: 首先得到源图像的宽度x和高度y,变换后新的图像的宽度和高度分别为x1和y1,x1=x*f,y1=y*f,其中f是缩放因子; 4.函数功能描述 (1)主函数main()用来设置滑动控制按钮,当鼠标拖动按钮可以得到相应的数据大小,实现手动控制的功能,当鼠标拖动对比度和亮度调节是,主函数调用

opencv编写笔记

建工程步骤省略!!!!!! 1、项目—demo(自己取项目名称)属性---配置属性—VC++目录—包含目录:D:\opencv\opencv\build\include;) 2、配置属性—VC++目录—库目录:D:\opencv\opencv\build\x86\vc10\lib 3、链接器—输入—附加依赖项—添加一下这些(针对Debug调试): opencv_ml2410d.lib opencv_calib3d2410d.lib opencv_contrib2410d.lib opencv_core2410d.lib opencv_features2d2410d.lib

opencv_flann2410d.lib opencv_gpu2410d.lib opencv_highgui2410d.lib opencv_imgproc2410d.lib opencv_legacy2410d.lib opencv_objdetect2410d.lib opencv_ts2410d.lib opencv_video2410d.lib opencv_nonfree2410d.lib opencv_ocl2410d.lib opencv_photo2410d.lib opencv_stitching2410d.lib opencv_superres2410d.lib opencv_videostab2410d.lib ◆按F5运行,若出现这样的情况:无法找到系统文件,缺少…..demo.exe程序。则需 下载tbb41_20130314oss_win.zip ,将其解压后文件夹中包含的bin文件夹, 复制到D:\opencv\opencv\build\common\tbb里;若还不行,可关掉当前文件,重新建立新项目,再进行配置! ◆完成以后,计算机属性---高级系统设置—环境变量---选择path—双击—添加路径: D:\opencv\opencv\build\x86\vc10\bin;D:\opencv\opencv\build\common\tbb\ia32\vc 10

OpenCV最基础的图像处理的例子

?什么是OpenCV ?开源C/C++计算机视觉库. ?面向实时应用进行优化. ?跨操作系统/硬件/窗口管理器. ?通用图像/视频载入、存储和获取. ?由中、高层API构成. ?为Intel?公司的Integrated Performance Primitives (IPP) 提供了透明接口. ?特性: ?图像数据操作(分配,释放, 复制, 设定, 转换). ?图像与视频I/O (基于文件/摄像头输入, 图像/视频文件输出). ?矩阵与向量操作与线性代数计算(相乘, 求解, 特征值, 奇异值分解SVD). ?各种动态数据结构(列表, 队列, 集, 树, 图). ?基本图像处理(滤波, 边缘检测, 角点检测, 采样与插值, 色彩转换, 形态操作, 直方图, 图像金字塔). ?结构分析(连接成分, 轮廓处理, 距离转换, 模板匹配, Hough转换, 多边形近似, 线性拟合, 椭圆拟合, Delaunay三角化). ?摄像头标定 (寻找并跟踪标定模板, 标定, 基础矩阵估计, homography估计, 立体匹配). ?动作分析(光流, 动作分割, 跟踪). ?对象辨识 (特征方法, 隐马可夫链模型HMM). ?基本GUI(显示图像/视频, 键盘鼠标操作, 滚动条). ?图像标识 (直线, 圆锥, 多边形, 文本绘图) ?OpenCV 模块: ?cv - OpenCV 主要函数. ?cvaux - 辅助(实验性) OpenCV 函数. ?cxcore - 数据结构与线性代数算法. ?highgui - GUI函数. 资料链接 ?参考手册: ?/docs/index.htm ?网络资源: ?官方网页: https://www.sodocs.net/doc/435867168.html,/technology/computing/opencv/?软件下载: https://www.sodocs.net/doc/435867168.html,/projects/opencvlibrary/ ?书籍: ?Open Source Computer Vision Library by Gary R. Bradski, Vadim Pisarevsky, and Jean-Yves Bouguet, Springer, 1st ed. (June, 2006). ?视频处理例程(位于/samples/c/目录中): ?色彩跟踪: camshiftdemo ?点跟踪: lkdemo

VS2013 中OpenCV2410 的配置及其他

1 2

Include Directories: C:\opencv\build\include Library Directories: C:\opencv\build\x86\vc12\lib 3 opencv_calib3d2410d.lib opencv_contrib2410d.lib opencv_core2410d.lib opencv_features2d2410d.lib opencv_flann2410d.lib opencv_gpu2410d.lib

opencv_imgproc2410d.lib opencv_legacy2410d.lib opencv_ml2410d.lib opencv_nonfree2410d.lib opencv_objdetect2410d.lib opencv_ocl2410d.lib opencv_photo2410d.lib opencv_stitching2410d.lib opencv_superres2410d.lib opencv_ts2410d.lib opencv_video2410d.lib opencv_videostab2410d.lib opencv_calib3d2410.lib opencv_contrib2410.lib opencv_core2410.lib opencv_features2d2410.lib opencv_flann2410.lib opencv_gpu2410.lib opencv_highgui2410.lib opencv_imgproc2410.lib opencv_legacy2410.lib opencv_ml2410.lib opencv_nonfree2410.lib opencv_objdetect2410.lib opencv_ocl2410.lib opencv_photo2410.lib

opencv最基础的图像处理

openCV——几个实用函数 2010年12月20日星期一 09:18 1. cvSmooth:各种方法的图像平滑 void cvSmooth( const CvArr* src, CvArr* dst, int smoothtype=CV_GAUSSIAN, int param1=3, int param2=0, double param3=0 ); src 输入图像. dst 输出图像. smoothtype 平滑方法: . CV_BLUR_NO_SCALE (简单不带尺度变换的模糊) - 对每个象素的param1×param2 领域求和。如果邻域大小是变化的,可以事先利用函数cvIntegral 计算积分图像。 . CV_BLUR (simple blur) - 对每个象素param1×param2邻域求和并做尺度变换 1/(param1.param2). . CV_GAUSSIAN (gaussian blur) - 对图像进行核大小为 param1×param2 的高斯卷积 . CV_MEDIAN (median blur) - 对图像进行核大小为 param1×param1 的中值滤波 (i.e. 邻域是方的). . CV_BILATERAL (双向滤波) - 应用双向 3x3 滤波,彩色 sigma=param1,空间 sigma=param2. 平滑操作的第一个参数. param2 平滑操作的第二个参数. 对于简单/非尺度变换的高斯模糊的情况,如果 param2的值为零,则表示其被设定为param1。 param3

对应高斯参数的 Gaussian sigma (标准差). 如果为零,则标准差由下面的核尺寸计算: sigma = (n/2 - 1)*0.3 + 0.8, 其中 n=param1 对应水平核, n=param2 对应垂直核. 对小的卷积核 (3×3 to 7×7) 使用如上公式所示的标准 sigma 速度会快。如果 param3 不为零,而 param1 和 param2 为零,则核大小有sigma 计算 (以保证足够精确的操作). 函数 cvSmooth 可使用上面任何一种方法平滑图像。每一种方法都有自己的特点以及局限。 没有缩放的图像平滑仅支持单通道图像,并且支持8位到16位的转换(与cvSobel和cvaplace相似)和32位浮点数到32位浮点数的变换格式。 简单模糊和高斯模糊支持 1- 或 3-通道, 8-比特和 32-比特浮点图像。这两种方法可以(in-place)方式处理图像。 中值和双向滤波工作于 1- 或 3-通道, 8-位图像,但是不能以 in-place 方式处理图像. 2.IplImage结构 由于OpenCV主要针对的是计算机视觉方面的处理,因此在函数库中,最重要的结构体是IplImage结构。IplImage结构来源于Intel的另外一个函数库Intel Image Processing Library (IPL),该函数库主要是针对图像处理。IplImage结构具体定义如下: typedef struct _IplImage { int nSize; /* IplImage大小 */ int ID; /* 版本 (=0)*/

Visual Studio2012环境下配置OpenCV_v2.4.10的步骤

Visual Studio2012环境下配置OpenCV的步骤 2014/12/16 本文将针对Visual Studio2012环境下如何配置OpenCV做出说明,具体如下。 1.下载和安装OpenCV SDK 1.1资源下载 在OpenCV官网https://www.sodocs.net/doc/435867168.html, SDK安装包。对应自己的操作系统,可以下载Windows,Linux/Mac和ios版本。目前官网已经给出OpenCV v3.0bata版本。本文中以OpenCV v2.4.10版本为例进行安装。(各个版本安装过程大体相同,后面将针对不同之处给出说明) 1.2资源安装 下载的OpenCV SDK的后缀名为exe,是一个解压安装程序。双击后会提示设置解压路径,推荐路径D:\Program Files。(因为OpenCV项目文件打包的时候,根目录就是opencv,所以我们不需要额外的新建一个名为opencv的文件夹然后再解压,那是多此一举的事情)然后点击Extract按钮,进行安装。 2.环境变量和路径设置 打开计算机→属性→高级系统设置,在高级目录下单击环境变量按钮,打开环境变量设置对话框。

2.1用户变量设置 在用户变量(此处为lbs的用户变量中)添加两个变量。 新建opencv变量,变量值设置为D:\Program Files\opencv\build。 新建path变量,变量值设置为D:\Program Files\opencv\build\x86\vc11\bin。此处如果已存在path变量,仅需对其变量值修改就行,在后面加上上述路径,但需要用分号和前面的路径隔开(英文半角下的分号) 2.2系统变量设置 在原有的path变量中对变量值修改,在变量值的最后加上D:\Program Files\opencv\build\x86\vc11\bin路径,注意要使用英文半角下的分号和前面的路径隔开。 ※说明 (1)不论电脑是32位还是64位,上述路径中均以x86路径输入,因为创建的程序中默认是在使用win32编译器进行编译。 (2)路径修改后需要重启电脑才能生效。 3.工程项目属性设置 工程项目属性配置主要是指对Debug和Release环境下的工程属性进行修改(通过修改https://www.sodocs.net/doc/435867168.html,er文件进行)。查阅相关资料,发现Visual Studio 2012中已经不再区分Debug和Release的https://www.sodocs.net/doc/435867168.html,er文件,所以配置了Debug或Release中的任

OpenCV图像处理篇之图像平滑

OpenCV图像处理篇之图像平滑 图像平滑算法 图像平滑与图像模糊是同一概念,主要用于图像的去噪。平滑要使用滤波器,为不改变图像的相位信息,一般使用线性滤波器,其统一形式如下: 其中h称为滤波器的核函数,说白了就是权值。不同的核函数代表不同的滤波器,有不同的用途。 在图像处理中,常见的滤波器包括: 1.归一化滤波器(Homogeneous blur) 也是均值滤波器,用输出像素点核窗口内的像素均值代替输出点像素值。 2.高斯滤波器(Guassian blur) 是实际中最常用的滤波器,高斯滤波是将输入数组的每一个像素点与高斯内核卷积将卷积和当作输出像素值。高斯核相当于对输出像素的邻域赋予不同的权值,输出像素点所在位置的权值最大(对应高斯函数的均值位置)。二维高斯函数为,

3.中值滤波器(median blur) 中值滤波将图像的每个像素用邻域(以当前像素为中心的正方形区域)像素的中值代替。对椒盐噪声最有效的滤波器,去除跳变点非常有效。 4.双边滤波器(Bilatrial blur) 为避免滤波器平滑图像,去噪的同时,使边缘也模糊,这种情况下使用双边滤波器。关于双边滤波器的解释参见 https://www.sodocs.net/doc/435867168.html,/rbf/CVonline/LOCAL_COPIES/MA NDUCHI1/Bilateral_Filtering.html 下面的程序将先给标准Lena图像添加椒盐噪声,分别使用4种不同的滤波器进行平滑操作,请注意观察不同滤波器对椒盐噪声的去噪效果! 程序分析及结果

上面程序的逻辑非常清晰: 1.读入灰度图,并添加椒盐噪声(6000个噪声点):

opencvVS使用说明

1.打开opencv2.4.9.exe,指定安装位置(文件解压位置),解压后包含两个文件夹build、source,build文件夹中包含静态链接库文件和动态链接库文件,source文件夹包含opencv函数的源码以及训练好的分类器以及训练好的分类器。 (1)提取build文件夹下include文件夹备用(第12步使用); (2)提取build/x86/vc10目录下的bin文件夹、lib文件夹备用。(说明:x86文件夹中链接库文件是VS默认win32平台 下32位编译器,如果设置VS编译平台为64位则需要x64 文件夹的链接库;vc10文件夹的链接库对应VS2010开发平 台,vc11未知,vc12对应VS2012及以上的开发平台) 图1 opencv解压得到的两个文件夹图2 build文件夹include 图3 build/x86/vc10文件夹下bin、lib分别存放动态静态链接库文件

图4 source文件夹中data文件夹中的haarlike级联分类器、hog分类器、lbp分类器,主要对人脸、五官、微笑、行人等做分类检测 2.打开VS,新建一个Win32控制台应用程序 3.点击下一步然后去掉预编译头,选择空项目

4.点击完成,找到解决方案管理器,右键工程名

5.配置属性->VC++目录 6.在可执行文件目录编辑输入../bin 然后点击确定

7.在包含目录分别输入../include ../include/opencv ../inclide/opencv2 然后点击确定 8.在库目录输入../lib 然后点击确定

相关主题