Opencv學習(Camshift跟蹤演算法)

2021-06-01 05:30:53 字數 3102 閱讀 9737

今天跑了下opencv中的camshiift例程。

因為camshift演算法需要自己用手標註跟蹤的物件,所以稍微標註不好,跟蹤的結果就不好。

而且例程中跟蹤的色彩資訊,所以如果影象中的陰暗資訊多了,效果更差。

本人修改後的演算法如下:

#ifdef _ch_

#pragma package #endif

#define cv_no_backward_compatibility

#ifndef _eic

#include "cv.h"

#include "highgui.h"

#include #include #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

執行環境:vs2008,opencv2.0版本

《學習OpenCV》 初探OpenCV(三)

引數1 影象 引數2 矩形的乙個頂點 引數3 矩形另乙個頂點 引數4 線條顏色 rgb 或亮度 灰度影象 可省略 有過載函式 引數5 線條粗細程度,取cv filled表填充色彩矩陣 引數6 線條型別 引數7 座標點的小數 cvmat cvcreatemat int rows,int cols,in...

OpenCV 架構學習

庫設計通用考慮 1 cv 命名空間 2 自動記憶體管理 主要採用了智慧型指標,引用計數功能 3 飽和操作 處理溢位值 4 資料型別支援和多通道支援 5 錯誤和異常處理 6 多執行緒和可重入性 core 主要定義了 traits 多型別支援,點,矩形,mat,vec,ptr,動態結構等資料結構 img...

Opencv學習資料

一直都關注yang xian521的opencv專欄,為了方便學習,這裡mark先 opencv學習筆記 六十 建立支援opengl的opencv工程 master opencv chp.3 opencv學習筆記 五十九 marker檢測識別 master opencv chp.2 opencv學習...