CamShift跟蹤演算法

2021-06-07 09:26:43 字數 3393 閱讀 4982

#ifdef _ch_  

#pragma package<

opencv

>

#endif  

#define cv_no_backward_compatibility  

#ifndef _eic  

#include "cv.h"  

#include "highgui.h"  

#include<

stdio.h

>

#include<

ctype.h

>

#endif  

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 = ;  

float* hranges

= hranges_arr

;  int vmin

= 10

, vmax

= 256

, smin

= 30

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

switch( event )  

}  cvscalar hsv2rgb( float hue )  

, , , , , };  

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 )  

printf( "hot keys: \n"  

"\tesc - quit the program\n"  

"\tc - stop the tracking\n"  

"\tb - switch to/from backprojection view\n"  

"\th - show/hide object histogram\n"  

"to initialize tracking, select the object with mouse\n" );  

cvnamedwindow( "histogram", 1 );  

cvnamedwindow( "camshiftdemo", 1 );  

cvsetmousecallback( "camshiftdemo", on_mouse, 0 );  

// cvcreatetrackbar( "vmin", "camshiftdemo", &vmin, 256, 0 );  

// cvcreatetrackbar( "vmax", "camshiftdemo", &vmax, 256, 0 );  

// cvcreatetrackbar( "smin", "camshiftdemo", &smin, 256, 0 );  

for(;;)  

cvcopy( frame, image, 0 );  

cvcvtcolor( image, hsv, cv_bgr2hsv );  

if( track_object )  

}  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 )  

cvshowimage( "camshiftdemo", image );  

cvshowimage( "histogram", histimg );  

c = cvwaitkey

(10);  

if( (char) c

== 27 )  

break;  

switch( (char) c )  

}  cvreleasecapture( &capture );  

cvdestroywindow("camshiftdemo");  

return 0;  

}  #ifdef _eic  

main(1,"camshiftdemo.c");  

#endif  

camShift跟蹤演算法介紹

camshift演算法的全稱是 continuously adaptive mean shift 即 連續自適應的meanshift 運算,並將上一幀的結果 即搜尋視窗的中心位置和視窗大小 作為下一幀meanshift 演算法的搜尋視窗的初始值,如此迭代下去。簡單點說,meanshift是針對單張尋...

Opencv學習(Camshift跟蹤演算法)

今天跑了下opencv中的camshiift例程。因為camshift演算法需要自己用手標註跟蹤的物件,所以稍微標註不好,跟蹤的結果就不好。而且例程中跟蹤的色彩資訊,所以如果影象中的陰暗資訊多了,效果更差。本人修改後的演算法如下 ifdef ch pragma package endif defin...

目標跟蹤方法 CamShift 演算法

一 概述 二 演算法流程 具體步驟如下 步驟二 根據獲得的顏色直方圖將原始輸入影象轉化成顏色概率分布影象,該過程稱為 反向投影 所謂直方圖反向投影,就是輸入影象在已知目標顏色直方圖的條件下的顏色概率密度分布圖,包含了目標在當前幀中的相干資訊。對於輸入影象中的每乙個畫素,查詢目標模型顏色直方圖,對於目...