cvSplit( hsv, hue, 0, 0, 0 );
if( track_object < 0 ) {
float max_val = 0.f;
cvSetImageROI( hue, selection ); cvSetImageROI( mask, selection ); cvCalcHist( &hue, hist, 0, mask );
cvGetMinMaxHistValue( hist, 0, &max_val, 0, 0 );
cvConvertScale( hist->bins, hist->bins, max_val ? 255. / max_val : 0., 0 );
cvResetImageROI( hue ); cvResetImageROI( mask ); track_window = selection; track_object = 1;
cvZero( histimg );
bin_w = histimg->width / hdims; for( i = 0; i < hdims; i++ ) {
int val =
cvRound( cvGetReal1D(hist->bins,i)*histimg->height/255 );
CvScalar color = hsv2rgb(i*180.f/hdims);
cvRectangle( histimg, cvPoint(i*bin_w,histimg->height), cvPoint((i+1)*bin_w,histimg->height - val), color, -1, 8, 0 ); } }
cvCalcBackProject( &hue, backproject, hist ); cvAnd( backproject, mask, backproject, 0 ); cvCamShift( backproject, track_window,
cvTermCriteria( CV_TERMCRIT_EPS | CV_TERMCRIT_ITER, 10, 1 ),
&track_comp, &track_box ); track_window = track_comp.rect;
if( backproject_mode )
cvCvtColor( backproject, image, CV_GRAY2BGR ); if( image->origin )
track_box.angle = -track_box.angle;
cvEllipseBox( image, track_box, CV_RGB(255,0,0), 3, CV_AA, 0 ); }
if( select_object && selection.width > 0 && selection.height > 0 ) {
cvSetImageROI( image, selection );
cvXorS( image, cvScalarAll(255), image, 0 ); cvResetImageROI( image ); }
cvShowImage( \ cvShowImage( \
c = cvWaitKey(10); if( (char) c == 27 ) break;
switch( (char) c ) {
case 'b':
backproject_mode ^= 1; break; case 'c':
track_object = 0; cvZero( histimg ); break; case 'h':
show_hist ^= 1; if( !show_hist )
cvDestroyWindow( \ else
cvNamedWindow( \ break; default: ; } }
cvReleaseCapture( &capture );
cvDestroyWindow(\
return 0; }
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库基于OpenCv目标跟踪系统的实现 - 图文(3)在线全文阅读。
相关推荐: