文档视界 最新最全的文档下载
当前位置:文档视界 › 学习opencv例2-3

学习opencv例2-3

学习opencv例2-3
学习opencv例2-3

视频播放控制

学习opencv书上例2-3,最好留了一个思考问题:实现滚动条随着视频播放自动移动。

笔者也是在原来书上写的程序的基础上稍作修改,现将代码写出来供大家参考!

#include "cv.h"

#include "highgui.h"

#include

using namespace std;

int g_slider_position=0; //滚动条的位置

CvCapture* g_capture=NULL;

void onTrackbarSlide(int pos)

{

cvSetCaptureProperty(g_capture,CV_CAP_PROP_POS_FRAMES,pos);

} /*回调函数,当滚动条被拖动时就调用它。滚动条的位置会被作为参数形式传给回调函数,回调函数的作用就是从当前滚动条的位置显示帧*/

int main(int argc,char** argv)

{

cvNamedWindow("Example3",CV_WINDOW_AUTOSIZE);

g_capture=cvCreateFileCapture(argv[1]);

int frames = (int)

cvGetCaptureProperty(g_capture,CV_CAP_PROP_FRAME_COUNT);

/*获得总帧数,也就是滚动条位置的最大值,这个函数的功能和第二个参数有关。*/ if(frames!=0)

{

cvCreateTrackbar("position","Example3",&g_slider_position,frames,onTrackba rSlide);/*当滚动条被拖动时,opencv会自动将当前位置所代表的值传个指

针所指向的整数,也就是说当滚动条被拖动时,

g_slider_position的值是在改变的*/

} /*如果此处滚动条没有被拖动,此语句的作用就是在窗口上创建了一个滚动条,其位置为0,即在初始位置。*/

IplImage* frame;

//while loop (as in Example2) caprpture & show video

int n=g_slider_position;

while(1)

{

frame=cvQueryFrame(g_capture);

if(!frame) break;

cvShowImage("Example3",frame);

cvCreateTrackbar("position","Example3",&n,frames,onTrackbarSlide);/*每次循环都在当前位置重新创造一个滚动条,也就是滚动条随着视频播放自动移动*/

char c=cvWaitKey(33);

if(c==27) break;

n++;

}

cvReleaseCapture(&g_capture);

cvDestroyWindow("Example3");

}

例2-3学习笔记

cvCreateTrackbar

该函数为开放计算机视觉(OpenCV)库库函数,创建trackbar并将它添加到指定的窗口。

定义:

CV_EXTERN_C_FUNCPTR( void (*CvTrackbarCallback)(int pos) );

int cvCreateTrackbar( const char* trackbar_name, const char* window_name, int* value, int count, CvTrackbarCallback on_change );

参数:

trackbar_name 被创建的trackbar名字。

window_name 窗口名字,这个窗口将为被创建trackbar的父对象。

value 整数指针,它的值将反映滑块的位置。这个变量指定创建时的滑块位置。

count 滑块位置的最大值。最小值一直是0。

on_change 每次滑块位置被改变的时候,被调用函数的指针。这个函数应该被声明为void Foo(int); 如果没有回调函数,这个值可以设为NULL。

函数cvCreateTrackbar用指定的名字和范围来创建trackbar(滑块或者范围控制),指定与trackbar位置同步的变量,并且指定当trackbar位置被改变的时候调用的回调函数。

被创建的trackbar默认显示在指定窗口的顶端,可以通过函数cvGetTrackbarPos 来获取trackbar显示的位置信息,以及通过函数cvSetTrackbarPos来重新设置trackbar的显示位置。

int cvCreateTrackbar(

const char* trackbar_name, //滑动条的名称

const char* window_name, //窗口的名称,滑动条不会遮挡图像

int* value, //当滑动条被拖到时,OpenCV会自动将当前位置所代表

的值传给指针指向的整数

int count, //滑动条所能达到的最大值

CvTrackbarCallback on_change //可选的回调函数,回调函数可参见

其中openCV的highgui库提供了两个函数来读取和设置滚动条的value值

//读取value值

int cvGetTrackbarPos(

const char* trackbar_name,

cosnt char* window_name

);

//设置value值

void cvSetTrackbarPos(

const char* trackbar_name,

const char* window_name,

int pos

);

OpenCV中关于cvGetCaptureProperty函数

OpenCV中提供了一个函数cvGetCaptureProperty(Capture* cap,int

property_index)函数来获取视频文件的一些属性,这是其中的OpenCV中属性的一些宏定义:

#define CV_CAP_PROP_POS_MSEC 0

#define CV_CAP_PROP_POS_FRAMES 1

#define CV_CAP_PROP_POS_AVI_RATIO 2

#define CV_CAP_PROP_FRAME_WIDTH 3

#define CV_CAP_PROP_FRAME_HEIGHT 4

#define CV_CAP_PROP_FPS 5

#define CV_CAP_PROP_FOURCC 6

#define CV_CAP_PROP_FRAME_COUNT 7

#define CV_CAP_PROP_FORMAT 8

#define CV_CAP_PROP_MODE 9

#define CV_CAP_PROP_BRIGHTNESS 10

#define CV_CAP_PROP_CONTRAST 11

#define CV_CAP_PROP_SATURATION 12

#define CV_CAP_PROP_HUE 13

#define CV_CAP_PROP_GAIN 14

#define CV_CAP_PROP_EXPOSURE 15

#define CV_CAP_PROP_CONVERT_RGB 16

#define CV_CAP_PROP_WHITE_BALANCE 17

#define CV_CAP_PROP_RECTIFICATION 18

通过创建一个Capture对象的指针后,调用cvGetCaptureProperty即可获取上述任何相关属性;但是我们不能太依赖这个函数;比如我们想获取一段视频的帧数,我们就不能太依赖于CV_CAP_PROP_FRAME_COUNT这个属性;因为cvGetCaptureProperty对属性的访问,其实访问的是关联视频文件的文件头信息,并不是真正去访问了视频的图像数据,这就带来一个问题:我们在讲其他视频格式转换为AVI格式的时候,图像帧数并没改变,只是视频文件头改变了,这时直接通过get 函数读取的信息就可能不准确;最好的办法是迭代从视频中取出一帧,检查是否有数据,来确定该视频文件的总共帧数~~~ 不光是帧数,帧率也可能不对~~

比如,自己在实验中庸狸窝转换器将一段视频转换为avi格式的视频文件后,用下面的两段代码,结果差距很大:

code 1.

CvCapture *cap = cvCaptureFromFile(videoName);//获取视频

int numFrames = (int) cvGetCaptureProperty(cap,

CV_CAP_PROP_FRAME_COUNT);//得到视频帧数,笔者获得的结果为148

CODE 2.

IplImage* pImg=NULL;

int count=0;

while((pImg=cvQueryFrame(cap))!=NULL)

{

count++;

}//得到的帧数只有60帧;

究其原因其实就是cvGetCaptureProperty实现的机制上,它只是读取视频文件头信息,而不是真正读取了视频文件;因此在进行不同格式的视频文件转换为OpenCV支持的AVI时,可能获取的属性并不准确~~~

因此在使用该函数时,要注意。自己的经验是对于原始的AVI文件,可以直接使用该函数(code1),而经过转换而得到的视频文件,最好使用code 2。

cvSetCaptureProperty

设置视频获取属性int cvSetCaptureProperty( CvCapture* capture, int property_id, double value );

capture 视频获取结构。

property_id 属性标识符。可以是下面之一:

CV_CAP_PROP_POS_MSEC - 从文件开始的位置,单位为毫秒

CV_CAP_PROP_POS_FRAMES - 单位为帧数的位置(只对视频文件有效)

CV_CAP_PROP_POS_AVI_RATIO - 视频文件的相对位置(0 - 影片的开始,1 - 影片的结尾)

CV_CAP_PROP_FRAME_WIDTH - 视频流的帧宽度(只对摄像头有效)

CV_CAP_PROP_FRAME_HEIGHT - 视频流的帧高度(只对摄像头有效)

CV_CAP_PROP_FPS - 帧率(只对摄像头有效)

CV_CAP_PROP_FOURCC - 表示codec的四个字符(只对摄像头有效)value 属性的值。

函数cvSetCaptureProperty设置指定视频获取的属性。目前这个函数对视频文件只支持: CV_CAP_PROP_POS_MSEC, CV_CAP_PROP_POS_FRAMES,

CV_CAP_PROP_POS_AVI_RATIO

基于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的动态背景下的运动目标检测 摘要:介绍在动态背景下对视频图像序列进行运动目标的检测,主要包括三个步骤,分别是运动估计,运动补偿和目标检测。在运动估计中采用的主要是基于特征点匹配算法。这种算法与传统的块匹配算法最大的好处在于它的数据量少,计算简单迅速而且图像的匹配可靠性更高。最后用计算机视觉类库openCV进行实现。 关键词:运动目标检测;openCV;特征点匹配 Moving Object Detection in the Dynamic Background Based on openCV Abstract:Introducing a moving object detection algorithm of the dynamic background in the video image sequence,which includes three steps. They are motion estimation, motion compensation and object detection. At the motion estimation, we take an algorithm based on the feature points matching. The advantages of this algorithm is that it needs fewer data and indicates faster calculating speed compared to the block matching algorithm. What’s more, the matching of the video image sequence is more reliable. Then used openCV realized the algorithm. Keywords: moving object detection; openCV; feature points matching 引言 在生活中摄像头可以说随处可见,我们经常需要对视频中的运动目标进行相关操作,这就设涉及到了对运动目标的检测及跟踪。作为视觉领域的一部分,它不仅对我们的生活,在军事,医学等各种领域里都有着广泛的影响。 所谓运动目标的检测就是在一段序列图像中检测出变化区域,并将运动目标从背景图像中提取出来[2],它是基础,能否正确的检测与分割出运动目标对后续的工作有着巨大的影响。常见的运动目标检测方法有:背景差分法,帧差法,累积差分法,光流法。本文主要介绍的是一种在动态背景下对运动目标进行检测的算法。 检测算法介绍 检测算法有很多种,不同的算法有他们各自的利与弊。背景差分法:是事先将背景图像存储下来,再与观测图像进行差分运算,实现对运动区域的检测。这种方法能得到较为完整的运动目标信息,但背景图像必须随着外部条件比如光照等的变化而不断更新,所以背景模型的获取和更新比较麻烦。帧差法:直接比较相邻两帧图像对应像点的灰度值的不同,然后通过阈值来提取序列图像中的运动区域[2]。这种方法更新速度快,算法简单易实现,适应性强,不需要获取背景图像。但是背景与运动目标间需要有一定程度的灰度差,否则可能在目标内部产生空洞,不能完整的提取出运动目标。为了改进相邻两帧间的差分效果,人们提出了累积差分法。累积差分法是利用三帧图像计算两个差分图像,再令其对应像素相乘的算法。它通过分析整个图像序列的变化来检测小位移或缓慢运动的物体。光流法是在时间上连续的两幅图想中,用向量来表示移动前后的对应点,在适当平滑性约束的条件下,根据图像序列的时空梯度估计运动场,通过分析运动场的变化对运动目标和场景进行检测和分割。 上面的几种算法都是基于静态背景下的方法,下面主要介绍动态背景下运动目标的检测。 因为生活中我们在很多情况下背景图像都不是静态的,有时摄像机都是安装在一个运动

基于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、针对各种图像(包括4-通道)和矩阵的函数(cvGet2D,cvSet2D),但是它们都很慢. (img->origin=IPL_ORIGIN_TL)或者是左下角(img->origin=IPL_ORIGIN_BL) 假设有8-bit1-通道的图像I(IplImage*img): I(x,y)~((uchar*)(img->imageData+img->widthStep*y))[x] 假设有8-bit3-通道的图像I(IplImage*img): I(x,y)blue~((uchar*)(img->imageData+img->widthStep*y))[x*3] I(x,y)green~((uchar*)(img->imageData+img->widthStep*y))[x*3+1] I(x,y)red~((uchar*)(img->imageData+img->widthStep*y))[x*3+2] 如果增加点(100,100)的亮度30,那么可以: CvPoint pt={100,100}; ((uchar*)(img->imageData+img->widthStep*pt.y))[pt.x*3]+=30; ((uchar*)(img->imageData+img->widthStep*pt.y))[pt.x*3+1]+=30; ((uchar*)(img->imageData+img->widthStep*pt.y))[pt.x*3+2]+=30; CvPoint pt={100,100}; uchar*temp_ptr=&((uchar*)(img->imageData+ img->widthStep*pt.y))[x*3]; temp_ptr[0]+=30; temp_ptr[1]+=30; temp_ptr[2]+=30; 假设有32-bit浮点数,1-通道图像I(IplImage*img): I(x,y)~((float*)(img->imageData+img->widthStep*y))[x] 现在,通用方法:假设有N-通道,类型为T的图像: I(x,y)c~((T*)(img->imageData+img->widthStep*y))[x*N+c] 或者你可使用宏CV_IMAGE_ELEM(image_header,elemtype,y,x_Nc) I(x,y)c~CV_IMAGE_ELEM(img,T,y,x*N+c) 2、访问矩阵元素 设有32-bit浮点数的实数矩阵M(CvMat*mat): M(i,j)~((float*)(mat->data.ptr+mat->step*i))[j] 设有64-bit浮点数的复数矩阵M(CvMat*mat): Re M(i,j)~((double*)(mat->data.ptr+mat->step*i))[j*2] Im M(i,j)~((double*)(mat->data.ptr+mat->step*i))[j*2+1]

opencv矩阵操作学习资料

o p e n c v矩阵操作

通用矩阵乘法 void cvGEMM( const CvArr* src1, const CvArr* src2, double alpha, const CvArr* src3, double beta, CvArr* dst, int tABC=0 ); #define cvMatMulAdd( src1, src2, src3, dst ) cvGEMM( src1, src2, 1, src3, 1, dst, 0 ) #define cvMatMul( src1, src2, dst ) cvMatMulAdd( src1, src2, 0, dst ) src1 第一输入数组 src2 第二输入数组 src3 第三输入数组 (偏移量),如果没有偏移量,可以为空( NULL)。 dst 输出数组 tABC T操作标志,可以是 0 或者下面列举的值的组合: CV_GEMM_A_T - 转置 src1 CV_GEMM_B_T - 转置 src2 CV_GEMM_C_T - 转置 src3 例如, CV_GEMM_A_T+CV_GEMM_C_T 对应 alpha*src1T*src2 + beta*src3T 函数 cvGEMM 执行通用矩阵乘法: dst = alpha*op(src1)*op(src2) + beta*op(src3), 这里 op(X) 是 X 或者 XT

所有的矩阵应该有相同的数据类型和协调的矩阵大小。支持实数浮点矩阵或者 复数浮点矩阵。 [编辑] Transform 对数组每一个元素执行矩阵变换 void cvTransform( const CvArr* src, CvArr* dst, const CvMat* transmat, const CvMat* shiftvec=NULL ); src 输入数组 dst 输出数组 transmat 变换矩阵 shiftvec 可选偏移向量 函数 cvTransform 对数组 src 每一个元素执行矩阵变换并将结果存储到 dst: dst(I)=transmat*src(I) + shiftvec 或者 dst(I)k=sumj(transmat(k,j)*src(I)j) + shiftvec(k) N-通道数组 src 的每一个元素都被视为一个N元向量,使用一个M×N 的变换矩阵 transmat 和偏移向量 shiftvec 把它变换到一个 M-通道的数组 dst 的 一个元素中。这里可以选择将偏移向量 shiftvec 嵌入到 transmat 中。这样

基于opencv的手掌检测与移动的跟踪等源代码

1.#include 2. 3.#include 4.#include 5.#include 6. 7.#include 8.#include 9.#include 10.#include https://www.docsj.com/doc/f719065891.html,ing namespace std; 12. 13.#pragma comment(lib,"cv210.lib") 14.#pragma comment(lib,"cxcore210.lib") 15.#pragma comment(lib,"highgui210.lib") 16. 17.void ErrorHandler(char* message) 18.{ 19. cout<

33. cout<<"failed to change work directory"<

opencv,模板匹配源码

竭诚为您提供优质文档/双击可除opencv,模板匹配源码 篇一:opencv模板匹配 opencv模板匹配 V1.0 zhbrain 1、2、1)2)3、1)2) opencv模板匹配原理--没有金字塔................................................. ..........................4模板匹配—使用金字塔................................................. ...............................................5主要函数简介................................................. ................................................... ........5程序流程................................................. ................................................... ................5验证和结

果................................................. ................................................... ...............5实验环境................................................. ................................................... ................5实验结果................................................. ................................................... . (5) opencv模板匹配 1、opencv模板匹配原理--没有金字塔 函数: cvmatchtemplate(source,target,result,method);说明:source:源图像,一般我们使用灰度图像;如果source 为Rgb图像,使用函数cvcvtcolor(source,dst,cV_Rgb2gRay)这里,dst为转换后的灰度图像。target:模板图像。 Result:匹配后的矩阵,width=s_width–t_taget+1,height=s_height–t_height+1使用函数 iplimage*result=cvcreateimage(resultsize,ipl_depth_ 32F,1)获得。method:cV_tm_sqdiFF: cV_tm_sqdiFF_noRmed cV_tm_ccoRR

opencv&vc++学习笔记

1.前缀: #include #include #include using namespace cv; using namespace std; Opencv2.4以后的头文件:https://www.docsj.com/doc/f719065891.html,/GWeuro/archive/2012/12/21/2828035.html 调用opencv库时,可以头文件写成: view sourceprint? 1.#include 就包含了opencv库所有头文件。 #include #include #include 关于winut的错误: 加入一行:#define POINTER_64 __ptr64 typedef void *PVOID; typedef void * POINTER_64 PVOID64; fatal error LNK1104: 无法打开文件“cxcore.lib 链接器中附加依赖项出了问题,没有搞定最新2.4.9依赖项:属性-链接器-输入-附加依赖项 删除 #pragma comment(lib,"cxcore") #pragma comment(lib,"cv") #pragma comment(lib,"highgui") 解决无法打开文件“cxcore.lib的问题 Cannot find or open the PDB file 直接Ctrl+F5运行结果 fatal error C1083: 无T法ぁ?打洙?开a包悒?括ぁ?文?件t:“°cv.h”±: No such file or directory 改成最新版包含,且修改包含目录和库目录 https://www.docsj.com/doc/f719065891.html,/linweixuan/article/details/1805302 glut.h头文件总是和C++中定义的

学习opencv平滑处理

平滑处理 平滑处理”也称“模糊处理”(blurring),是一项简单且使用频率很高的图像处理 方法。平滑处理的用途有很多,但最常见的是用来减少图像上的噪声或者失真。降 低图像分辨率时,平滑处理是很重要的(在本章的“图像金字塔”部分会详细介绍 这一点)。 目前OpenCV可以提供五种不同的平滑操作方法,所有操作都由cvSmooth函数实 尺寸调整 我们经常会将某种尺寸的图像转换为其他尺寸的图像,如放大或者缩小图像。我们 可以用cvResize()函数来放大或缩小图像。该函数可以将源图像精确转换为目标 图像的尺寸。如果源图像中设置了ROI,那么cvResize()将会对ROI区域调整 尺寸,以匹配目标图像,同样,如果目标图像中已设置ROI的值,那么 cvResize()将会将源图像进行尺寸调整并填充到目标图像的ROI中。 一般情况下,我们期望源图像和重采样后的目标图像之间的映射尽可能地平滑。参 数interpolation控制如何进行映射。当缩小图像时,目标图像的像素会映射为 源图像中的多个像素,这时需要进行插值。当放大图像时,目标图像上的像素可能 无法在源图像中找到精确对应的像素,也需要进行插值。在任何一种情况下,都有 很多z种计算像素值的方法。其中最简单的办法是将目标图像各点的像素值设为源 图像中与其距离最近的点的像素值,这就是当interpolation设为CV_工NTER一N 时用的算法。或者采用线性插值算法(CV_工NTER L工NEAR,将根据源图像附近的4 个((2x2范围)邻近像素的线性加权计算得出,权重由这4个像素到精确目标点 的距离决定。我们也可以用新的像素点覆盖原来的像素点,然后求取覆盖区域 的平均值,这种插值算法称为区域插值。。最后一种选择是三次样条插值 (Cv一工NTER CUBIC。首先对源图像附近的4x4个邻近像素进行三次样条拟 合,然后将目标像素对应的三次样条值作为目标图像对应像素点的值。 图像金字塔 图像金字塔[Adelson84]被广泛用于各种视觉应用中。图像金字塔是一个图像集 合,集合中所有的图像都源于同一个原始图像,而且是通过对原始图像连续降采样 获得,直到达到某个中止条件才停止降采样。(当然,降为一个像素肯定是中止条件。)[i307 有两种类型的图像金字塔常常出现在文献和应用中:高斯金字塔【Rosenfeld80〕和拉 普拉斯[Burt83]金字塔[Adelson84]。高斯金字塔用来向下降采样图像,而拉普拉斯 金字塔(后面会简单讨论)则用来从金字塔低层图像中向上采样重建一个图像。 要从金字塔第i层生成第i+ 1层(我们表示第i+ 1层为Gi+、),我们先要用高斯核对G…进行卷积,然后删除所有偶数行和偶数列。当然,新得到的图像面积会变为源 图像的四分之一。按上述过程对输入图像Go循环执行操作就可产生整个金字塔。OpenCV为我们提供了从金字塔中上一级图像生成下一级图像的方法: 在这种情况下,图像首先在每个维度上扩大为原来的两倍,新增的行(偶数行)以0

《基于 OpenCV的人脸识别系统》

西安电子科技大学 人工智能学院暑期夏令营科研实践《基于OpenCV的人脸识别系统》 实践报告 姓名:XXX 学校:XXXX 院系班级:XXXXXXXXX 联系方式:XXXX

目录 1 项目背景 (1) 2 项目目标 (1) 3 项目方案 (2) 3.1 人脸采集 (2) 3.2 人脸训练 (3) 3.3 人脸识别 (4) 4 项目调试 (6) 4.1 采集调试 (6) 4.2 训练调试 (6) 4.3 识别调试 (7) 5实践总结 (8)

如何创造一个安全的、数字现代化的、智能化的宿舍门禁系统有着十分重要的意义。然而,在日常管理中我们经常会碰到这样的问题:外来人员混入宿舍带来的安全隐患、夏天未带校园卡而在公寓楼前苦等、宿舍出入口必须有人盯守、晚归被困公寓楼外等等。 在当今计算机普及与急剧增长的状况下,应该实施一些高效率的系统,不仅省钱,省事,而且便捷,针对以上情况,十分有必要建立一个全面、高效、人性化、智能的高校宿舍出入管理系统。 因此,做一个人脸识别系统就非常地有必要! 2 项目目标 本项目拟完成人脸采集、人脸训练和人脸检测与识别的功能。 人脸采集程序主要完成以下功能: 1. 建立新的文件夹:用户根据提示输入自己姓名的简称,程序会在工程目录下建立该用户的文件夹,用以存放拍摄的照片; 2. 打开摄像头和写入图像:调用笔记本摄像头,当P键按下时,显示当前帧的图像,经处理后,保存图像;当q键按下时,立即退出采集程序 3. 人脸检测与裁剪:在当前帧识别出人脸后将其裁剪至ORL人脸数据 库大小即92x112。 人脸训练程序主要完成以下功能: 1. CSV文件读取:CSV文件对应的图像数据和对应的标签; 2. 样本训练:包括ORL人脸数据库的样本和自己的样本。 人脸训练样本取自ORL人脸数据库,共40个人,每人10张照片。照片在不同时间、不同表情(睁眼闭眼、笑或者不笑)、不同人脸细节(戴眼镜或者不戴眼镜)下采集,所有的图像都在一个黑暗均匀的背景下采集的,正面竖直人脸(有些有轻微旋转)。此外,增加自己的样本,并以相同尺寸拍摄20张左右图像。 人脸识别与检测程序主要完成以下功能: 1. 人脸检测:识别出当前帧是否有人脸; 2. 人脸预测:根据训练结果判断当前帧中人脸是否属于样本集; 3. 姓名显示:若属于样本集则显示姓名缩写,否则,显示“0”。

毕业设计:基于OpenCV的人脸识别算法(终稿)-精品

安徽工业大工商学院 毕业学士论文 基于OpenCV的人脸识别算法 姓名:陈滔 申请学位级别:学士专业:测控技术与仪器 指导教师:方挺

摘要 人脸在社会交往中扮演着十分重要的角色,是人类在确定一个人身份时所采用的最普通的生物特征,研究人脸跟踪识别及其相关技术具有十分重要的理论价值和应用价值。彩色图像序列的人脸检测、跟踪与识别技术是随着计算机技术的高速发展和视频监控等应用的需要在近几年才逐渐成为一个研究热点。本文着重构建一套人脸跟踪识别系统,致力于精确实时地对彩色视频中的人脸图像检测跟踪,并可以将跟踪到的人脸图片传输到识别端进行身份识别。系统分为客户端和服务器两部分。针对传统Camshifl跟踪算法进行形态学处理、分配多个跟踪器等改进后的算法应用于客户端进行多人脸的跟踪。服务器端首先将人脸图像按其主要特征进行分块,再对分块图执行Eigenface算法实现人脸身份的识别。这套系统完成了对多人脸的跟踪效果,可广泛的应用于各种安防系统之中如:ATM机监控系统,门禁系统等。

Abstract Human face is 0111"primary focus of attention in social intercourse playingamajor rolei conveying dentity and emotion.Researchonthe face tracking,recognition technology has great theoreticaland practical value.This paper focusesOilbuildingasetofhumanface recognition and trackingsystem tocommitted toaccurate and real-timecolorvideoimages,andcalltransmit the tracked human face image to the recognition part to identify the person’S status.Thesystem is divided into client and server parts.Thetracking algorithm whichcarrieson morphology processing after traditional track algorithm Camshifl and assignments severaltrackingdevices is applied to the client for duplex facetracking.Theserver—side first divides the person face image into blocksaccording to its chief feature,then the blocksuses the Eigenfacealgorithm separately to realize the person’S status recognition.The system implementation for multiple face trackingcallbe widelyused among the various security systems,suchas:ATM machine monitoring system,accesscontrol system.Keywords:Face DetectionFace TrackingFace Recognition Eigenface Camshift

OpenCV学习笔记

第一章概述 OpenCV 是有Intel公司资助的开源计算机视觉库,它由一系列C函数和少量C++类构成,实现图像处理和计算机视觉方面的很多通用算法。 1、OpenCV的特征 (1)开源计算机视觉库采用C/C++编写 (2)使用目的是开发实时的应用程序 (3)独立于操作系统、硬件和图形管理器 (4)具有通用的图像/视频载入、保存和获取模块 (5)具有底层和高层的应用开发包 2、OpenCV的功能 (1)对图像数据的操作,包括分配、释放、复制、设置和转换数据 (2)对图像和视频的输入输出,指文件和摄像头作为输入,图像和视频文件作为输出(3)具有对矩阵和向量的操作及线性代数的算法程序,包括矩阵积、解方程、特征值以及奇异值 (4)可对各种动态数据结构,如列表、队列、集合、树和图等进行操作 (5)具有基本的数字图像处理能力,如可以进行滤波、边缘检测、角点检测、采样于差值、色彩转换、形态操作、直方图和图像金字塔等操作 (6)对各种结构进行分析,包括连接部件分析、轮廓处理、距离变换、各种距的计算、模板匹配、Hough变换、多边行逼近、直线拟合、椭圆拟合、和Delaunay三角划分等 (7)对摄像头的定标,包括发现与跟踪定标模式、定标、基本矩阵估计、齐次矩阵估计和立体对应 (8)对运动的分析,如对光流、运动分割和跟踪的分析 (9)对目标的识别,如可采用特征法和隐马尔科夫模型(HMM)法 (10)具有基本的GUI功能,包括图像与视频显示、键盘和鼠标事件处理及滚动条等(11)课对图像标注,如对线,二次曲线和多边行进行标注 3.OpenCV模块 ?cv –核心函数库 ?cvaux –辅助函数库 ?cxcore –数据结构与线性代数库 ?highgui – GUI函数库 ?ml –机器学习函数库

基于OpenCV的图像处理

科技信息 教学中不断探索的课题。 参考文献 [1]陈祝军.分析化学实验专业化初探[J ].安徽职业技术学院学报,2004,3(1):39-40. [2]李祥,黄宁选.无机与分析化学实验课改革探讨[J ].大学化学,2003,18(7):16-18. [3]黄斌.对工学结合人才培养模式若干问题的探究[J ].教育探索, 2008,(3):79-80. [4]沈萍.高职有机化学实验课程改革初探[J ].职业教育研究,2005,(10):143. [5]沈萍.高职有机化学实验课程改革初探[J ].职业教育研究,2005,(10):143. [6]李克安,赵风林.分析化学教学的探讨与实践[J ].大学化学,2003,28(1):26-28. (上接第218页) OpenCV 的全称是Open Source Computer Vision Library ,是一个跨平 台的计算机视觉库。OpenCV 是由英特尔公司发起并参与开发, 以BSD 许可证授权发行,可以在商业和研究领域中免费使用,并且源代码是公开的。OpenCV 由一系列C 函数和少量C++类构成,实现了图像处理和 计算机视觉方面的很多通用算法,可用于开发实时的图像处理、 计算机视觉以及模式识别程序,极大方便了图像和视频处理研究者进行二次开发。 1、OpenCV的历史与特点 OpenCV 主要创作人员是Intel 的Performance Library Team 和Intel 俄国的一些专家,OpenCV 的第一个测试版本于2000年的IEEE 机器视 觉和模式识别会议上公布, 2001年到2005年间又发布了5个测试版本。2006年,OpenCV1.0版本正式发布。2009年10月,OpenCV2.0版本发布,功能大幅度增强。 OpenCV 在计算机视觉领域得到广泛应用,与其突出的优点是密不可分的: ●跨平台,可移植性好,无论Windows 、Linux 还是M ac OS 都可以运行; ●支持大多数C /C++编译器,如:VC6.0、https://www.docsj.com/doc/f719065891.html,2008、https://www.docsj.com/doc/f719065891.html,2005及C++Builder 等,可以轻易在不同平台之间进行移植; ●对个人及商业开发免费,源代码公开;●提供方便灵活的用户接口,采用C 、C++编写,包括300多个C /C++函数,代码效率高;支持中、高层API ;可以使用外部库,也可以独立使用; ●具备强大的图像和矩阵运算能力,减少开发者的工作量,有效提高开发效率和程序运行的可靠性; ●针对Intel 的处理器进行了优化。2、OpenCV的结构和应用 OpenCV 的程序构成了一个完整的系统,并有着自己独特的数据结构。目前OpenCV 主要包含如下几个子库: ●CxCore :该库提供了所有OpenCV 运行时的一些最基本的数据结构,包括矩阵,数组的基本运算,包括出错处理的一些基本函数; ●Cv :图像处理和计算机视觉功能(图像处理、结构分析、运动分析、 物体跟踪、模式识别、摄像机定标);●机器学习:用于分类、回归和数据聚类的类和函数;●CvAux :包括一些三维跟踪、PCA 、HMM 等函数;●HighGUI :用于用户交互(GUI 、图像视频的输入输出)。OpenCV 主要面向图像和视频处理,其主要应用包括:二维和三维 特征提取工具包(2D and 3D feature toolkits)、自运动估计(Egomotion esti-mation )、人脸识别(Face Recognition)、手势识别(Gesture Recognition)、人机 交互(Human-Computer Interface)、 移动机器人(M obile robotics)、运动理解(Motion Understanding)、目标识别(Object Identification)、分割与识别(Seg mentation and Recognition)、 立体视觉(Stereopsis Stereo vision:depth percep-tion from 2cameras)、 运动估计结构(Structure from motion)、运动跟踪(Mo-tion Tracking)等。 另外,OpenCV 包含一些机器学习库,主要有Boosting 、决策树(De-cision Trees)、期望最大化算法(Expectation M aximization)、k-最近邻算法(k-nearest neighbor algorithm)、朴素贝叶斯分类器(Naive Bayes classifier)、 人工神经网络(Artificial neural networks)、随机森林(Random forest)、支持向量机(Support Vector Machine)。 3、利用OpenCV进行人脸检测下面就以人脸检测为例,介绍OpenCV 的应用。人脸检测属于人脸识别(Face Recognition)第一步,人脸大体可以分为以下几种方法:基于神经网络的检测,基于特征的检测,基于颜色的检测等。基于神经网络的检测,需要大量的真假人脸图像来训练神经网络;基于特征的方法是利 用人脸的一些特征,比如眼睛、 鼻子等来检测;基于颜色的方法是通过人脸的颜色如黄色、棕色来检测。 OpenCV 中已经提供了训练好的Haar 级联分类器,使得人脸检测可以很方便的实现。OpenCV 中的Haar 特征的级联表中包含的是boost 分类器。所谓Harr 级联分类器是指由若干个简单boost 分类器级联成的一个大的分类器,被检测的目标依次通过每一个分类器,可以通过所有分类器的即可判定为人脸区域。OpenCV 中的人脸检测主要分为四步,其具体过程如下所示: 利用Harr 级联分类器进行人脸检测的实验图片如下,结果证明利用OpenCV 的Harr 分类器实现人脸检测,速度快、效率高,虽然检测率 不能达到100%, 存在误判现象,但是效果已经很不错了。4、总结 除了OpenCV ,目前比较有代表性的计算机视觉库/软件还有Intel 公司的IPP ,微软公司的visDSK ,MathWorks 公司的Matlab 等。IPP 是Intel 的图像、信号处理的集成开发库,收费并且源代码不公开。Microsoft 公司的visDSK 图象处理库,免费,开源,与OpenCV 功能相似。Matlab 功 能丰富,算法实现方便简单,适合研究、 仿真和演示,但是在开发产品方面效率低,而且软件费用高。 相比之下,跨平台的OpenCV 图象处理库,免费,源代码公开,功能强大,有着突出的优点,使用人数众多,资源丰富,其必将会成为图像视频处理领域的强有力的工具。 参考文献[1]李振伟等.基于OpenCV 的运动目标跟踪及其实现[J ].科学计 算及信息处理, 2008年20期[2]陈健等.一种基于Haar 小波变换的彩色图像人脸检测方法[J ].微计算机信息,2005.1 基于OpenCV 的图像处理 南京信息职业技术学院 阴法明 [摘要]OpenCV 是Intel 公司推出的开源、免费的计算机视觉程序库,利用OpenCV 可以很方便地实现图像和视频处理。本文介绍 了OpenCV 的历史、 特点以及结构和应用,并以人脸检测为例介绍了OpenCV 在图像处理中的应用。[关键词]OpenCV 人脸检测计算机与网络 220——

相关文档
相关文档 最新文档