77范文网 - 专业文章范例文档资料分享平台

基于OpenCv目标跟踪系统的实现 - 图文(2)

来源:网络收集 时间:2020-02-21 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

图2:程序流程图

利用该函数,在VC6.0开发环境下,就很容易实现CAMSHIFT算法跟踪运动物体,图3是程序控制界面:

图3:程序控制界面

4 实验结果与分析

本实验中,用笔记本自带的USB摄像头来跟踪一运动物体,下图4-图7一系列图像是采用CAMSHIFT算法跟踪运动物体部分图像。

图4:摄像头拍到的场景 图5:手动选择目标物体

图6:物体快速移动时跟踪目标 图7:物体发生旋转、变形时跟踪目标

由此可见,基于颜色直方图的CAMSHIFT算法可以有效地解决目标变形和旋转问题,而且运算效率很高,可以实时跟踪运动目标。

5 结论

本文在详细分析CAMSHIFT算法原理的基础上,采用Intel公司开发的OpenCV视觉库,在VC6.0开发环境下,实现了运动目标实时跟踪,解决了目标旋转、变形、部分遮挡问题。同时,可以看到,在开源库OpenCV的基础上,根据自己所开发应用程序所要实现的功能选择所需的库函数,能够大大减少在计算机视觉领域中的开发时间和精力,缩短程序开发的周期。

6 附录(程序代码部分)

#include \

#include \#include #include

IplImage *image = 0, *hsv = 0, *hue = 0, *mask = 0, *backproject = 0, *histimg = 0; CvHistogram *hist = 0;

int backproject_mode = 0; int select_object = 0; int track_object = 0; int show_hist = 1; CvPoint origin; CvRect selection;

CvRect track_window; CvBox2D track_box;

CvConnectedComp track_comp; int hdims = 16;

float hranges_arr[] = {0,180}; float* hranges = hranges_arr;

int vmin = 10, vmax = 256, smin = 30;

void on_mouse( int event, int x, int y, int flags, void* param ) {

if( !image ) return;

if( image->origin )

y = image->height - y;

if( select_object ) {

selection.x = MIN(x,origin.x); selection.y = MIN(y,origin.y);

selection.width = selection.x + CV_IABS(x - origin.x); selection.height = selection.y + CV_IABS(y - origin.y);

selection.x = MAX( selection.x, 0 ); selection.y = MAX( selection.y, 0 );

selection.width = MIN( selection.width, image->width ); selection.height = MIN( selection.height, image->height ); selection.width -= selection.x; selection.height -= selection.y; }

switch( event ) {

case CV_EVENT_LBUTTONDOWN: origin = cvPoint(x,y);

selection = cvRect(x,y,0,0); select_object = 1;

break;

case CV_EVENT_LBUTTONUP: select_object = 0;

if( selection.width > 0 && selection.height > 0 ) track_object = -1; break; } }

CvScalar hsv2rgb( float hue ) {

int rgb[3], p, sector;

static const int sector_data[][3]=

{{0,2,1}, {1,2,0}, {1,0,2}, {2,0,1}, {2,1,0}, {0,1,2}}; hue *= 0.033333333333333333333333333333333f; sector = cvFloor(hue);

p = cvRound(255*(hue - sector)); p ^= sector & 1 ? 255 : 0;

rgb[sector_data[sector][0]] = 255; rgb[sector_data[sector][1]] = 0; rgb[sector_data[sector][2]] = p;

return cvScalar(rgb[2], rgb[1], rgb[0],0); }

int main( int argc, char** argv ) {

CvCapture* capture = 0;

if( argc == 1 || (argc == 2 && strlen(argv[1]) == 1 && isdigit(argv[1][0]))) capture = cvCaptureFromCAM( argc == 2 ? argv[1][0] - '0' : 0 ); else if( argc == 2 )

capture = cvCaptureFromAVI( argv[1] );

if( !capture ) {

fprintf(stderr,\ return -1; }

printf( \

\

\

\ \

\

cvNamedWindow( \

cvNamedWindow( \

cvSetMouseCallback( \

cvCreateTrackbar( \ cvCreateTrackbar( \ cvCreateTrackbar( \

for(;;) {

IplImage* frame = 0; int i, bin_w, c;

frame = cvQueryFrame( capture ); if( !frame ) break;

if( !image ) {

/* allocate all the buffers */

image = cvCreateImage( cvGetSize(frame), 8, 3 ); image->origin = frame->origin;

hsv = cvCreateImage( cvGetSize(frame), 8, 3 ); hue = cvCreateImage( cvGetSize(frame), 8, 1 ); mask = cvCreateImage( cvGetSize(frame), 8, 1 );

backproject = cvCreateImage( cvGetSize(frame), 8, 1 );

hist = cvCreateHist( 1, &hdims, CV_HIST_ARRAY, &hranges, 1 ); histimg = cvCreateImage( cvSize(320,200), 8, 3 ); cvZero( histimg ); }

cvCopy( frame, image, 0 );

cvCvtColor( image, hsv, CV_BGR2HSV );

if( track_object ) {

int _vmin = vmin, _vmax = vmax;

cvInRangeS( hsv, cvScalar(0,smin,MIN(_vmin,_vmax),0),

cvScalar(180,256,MAX(_vmin,_vmax),0), mask );

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库基于OpenCv目标跟踪系统的实现 - 图文(2)在线全文阅读。

基于OpenCv目标跟踪系统的实现 - 图文(2).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/jiaoyu/769425.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: