16acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/*M/////////////////////////////////////////////////////////////////////////////////////// 26acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// 36acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. 46acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// 56acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// By downloading, copying, installing or using the software you agree to this license. 66acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// If you do not agree to this license, do not download, install, 76acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// copy or use the software. 86acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// 96acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// 106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// Intel License Agreement 116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// For Open Source Computer Vision Library 126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// 136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// Copyright (C) 2000, Intel Corporation, all rights reserved. 146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// Third party copyrights are property of their respective owners. 156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// 166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// Redistribution and use in source and binary forms, with or without modification, 176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// are permitted provided that the following conditions are met: 186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// 196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// * Redistribution's of source code must retain the above copyright notice, 206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// this list of conditions and the following disclaimer. 216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// 226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// * Redistribution's in binary form must reproduce the above copyright notice, 236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// this list of conditions and the following disclaimer in the documentation 246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// and/or other materials provided with the distribution. 256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// 266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// * The name of Intel Corporation may not be used to endorse or promote products 276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// derived from this software without specific prior written permission. 286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// 296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// This software is provided by the copyright holders and contributors "as is" and 306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// any express or implied warranties, including, but not limited to, the implied 316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// warranties of merchantability and fitness for a particular purpose are disclaimed. 326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// In no event shall the Intel Corporation or contributors be liable for any direct, 336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// indirect, incidental, special, exemplary, or consequential damages 346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// (including, but not limited to, procurement of substitute goods or services; 356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// loss of use, data, or profits; or business interruption) however caused 366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// and on any theory of liability, whether in contract, strict liability, 376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// or tort (including negligence or otherwise) arising in any way out of 386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// the use of this software, even if advised of the possibility of such damage. 396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// 406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//M*/ 416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#ifndef __CVAUX_HPP__ 436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define __CVAUX_HPP__ 446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#ifdef __cplusplus 466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/****************************************************************************************\ 486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn* Image class * 496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn\****************************************************************************************/ 506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennclass CV_EXPORTS CvCamShiftTracker 526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennpublic: 546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvCamShiftTracker(); 566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual ~CvCamShiftTracker(); 576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn /**** Characteristics of the object that are calculated by track_object method *****/ 596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn float get_orientation() const // orientation of the object in degrees 606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { return m_box.angle; } 616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn float get_length() const // the larger linear size of the object 626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { return m_box.size.height; } 636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn float get_width() const // the smaller linear size of the object 646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { return m_box.size.width; } 656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvPoint2D32f get_center() const // center of the object 666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { return m_box.center; } 676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvRect get_window() const // bounding rectangle for the object 686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { return m_comp.rect; } 696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn /*********************** Tracking parameters ************************/ 716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int get_threshold() const // thresholding value that applied to back project 726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { return m_threshold; } 736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int get_hist_dims( int* dims = 0 ) const // returns number of histogram dimensions and sets 756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { return m_hist ? cvGetDims( m_hist->bins, dims ) : 0; } 766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int get_min_ch_val( int channel ) const // get the minimum allowed value of the specified channel 786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { return m_min_ch_val[channel]; } 796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int get_max_ch_val( int channel ) const // get the maximum allowed value of the specified channel 816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { return m_max_ch_val[channel]; } 826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn // set initial object rectangle (must be called before initial calculation of the histogram) 846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn bool set_window( CvRect window) 856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { m_comp.rect = window; return true; } 866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn bool set_threshold( int threshold ) // threshold applied to the histogram bins 886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { m_threshold = threshold; return true; } 896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn bool set_hist_bin_range( int dim, int min_val, int max_val ); 916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn bool set_hist_dims( int c_dims, int* dims );// set the histogram parameters 936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn bool set_min_ch_val( int channel, int val ) // set the minimum allowed value of the specified channel 956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { m_min_ch_val[channel] = val; return true; } 966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn bool set_max_ch_val( int channel, int val ) // set the maximum allowed value of the specified channel 976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { m_max_ch_val[channel] = val; return true; } 986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn /************************ The processing methods *********************************/ 1006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn // update object position 1016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual bool track_object( const IplImage* cur_frame ); 1026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn // update object histogram 1046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual bool update_histogram( const IplImage* cur_frame ); 1056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn // reset histogram 1076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual void reset_histogram(); 1086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn /************************ Retrieving internal data *******************************/ 1106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn // get back project image 1116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual IplImage* get_back_project() 1126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { return m_back_project; } 1136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn float query( int* bin ) const 1156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { return m_hist ? (float)cvGetRealND(m_hist->bins, bin) : 0.f; } 1166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennprotected: 1186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn // internal method for color conversion: fills m_color_planes group 1206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual void color_transform( const IplImage* img ); 1216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvHistogram* m_hist; 1236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvBox2D m_box; 1256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvConnectedComp m_comp; 1266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn float m_hist_ranges_data[CV_MAX_DIM][2]; 1286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn float* m_hist_ranges[CV_MAX_DIM]; 1296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int m_min_ch_val[CV_MAX_DIM]; 1316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int m_max_ch_val[CV_MAX_DIM]; 1326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int m_threshold; 1336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn IplImage* m_color_planes[CV_MAX_DIM]; 1356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn IplImage* m_back_project; 1366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn IplImage* m_temp; 1376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn IplImage* m_mask; 1386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}; 1396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif /* __cplusplus */ 1416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif /* __CVAUX_HPP__ */ 1436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* End of file. */ 145