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 436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#ifndef __CVVIDEOSURVEILLANCE_H__ 446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define __CVVIDEOSURVEILLANCE_H__ 456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Turn off the functionality until cvaux/src/Makefile.am gets updated: */ 476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//#if _MSC_VER >= 1200 486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#include <stdio.h> 506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#if _MSC_VER >= 1200 || defined __BORLANDC__ 526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cv_stricmp stricmp 536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cv_strnicmp strnicmp 546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#elif defined __GNUC__ 556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cv_stricmp strcasecmp 566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cv_strnicmp strncasecmp 576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#else 586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#error Do not know how to make case-insensitive string comparison on this platform 596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif 606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//struct DefParam; 626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennstruct CvDefParam 636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn struct CvDefParam* next; 656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn char* pName; 666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn char* pComment; 676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn double* pDouble; 686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn double Double; 696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn float* pFloat; 706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn float Float; 716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int* pInt; 726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int Int; 736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn char** pStr; 746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn char* Str; 756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}; 766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennclass CV_EXPORTS CvVSModule 786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennprivate: /* Internal data: */ 806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvDefParam* m_pParamList; 816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn char* m_pModuleTypeName; 826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn char* m_pModuleName; 836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn char* m_pNickName; 846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennprotected: 856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int m_Wnd; 866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennpublic: /* Constructor and destructor: */ 876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvVSModule() 886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn m_pNickName = NULL; 906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn m_pParamList = NULL; 916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn m_pModuleTypeName = NULL; 926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn m_pModuleName = NULL; 936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn m_Wnd = 0; 946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn AddParam("DebugWnd",&m_Wnd); 956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual ~CvVSModule() 976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvDefParam* p = m_pParamList; 996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for(;p;) 1006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 1016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvDefParam* pf = p; 1026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn p=p->next; 1036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn FreeParam(&pf); 1046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 1056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn m_pParamList=NULL; 1066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if(m_pModuleTypeName)free(m_pModuleTypeName); 1076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if(m_pModuleName)free(m_pModuleName); 1086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 1096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennprivate: /* Internal functions: */ 1106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void FreeParam(CvDefParam** pp) 1116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 1126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvDefParam* p = pp[0]; 1136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if(p->Str)free(p->Str); 1146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if(p->pName)free(p->pName); 1156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if(p->pComment)free(p->pComment); 1166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvFree((void**)pp); 1176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 1186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvDefParam* NewParam(const char* name) 1196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 1206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvDefParam* pNew = (CvDefParam*)cvAlloc(sizeof(CvDefParam)); 1216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn memset(pNew,0,sizeof(CvDefParam)); 1226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn pNew->pName = strdup(name); 1236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if(m_pParamList==NULL) 1246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 1256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn m_pParamList = pNew; 1266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 1276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn else 1286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 1296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvDefParam* p = m_pParamList; 1306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for(;p->next;p=p->next); 1316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn p->next = pNew; 1326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 1336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return pNew; 1346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn }; 1356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvDefParam* GetParamPtr(int index) 1376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 1386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvDefParam* p = m_pParamList; 1396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for(;index>0 && p;index--,p=p->next); 1406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return p; 1416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 1426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvDefParam* GetParamPtr(const char* name) 1436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 1446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvDefParam* p = m_pParamList; 1456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for(;p;p=p->next) 1466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 1476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if(cv_stricmp(p->pName,name)==0) break; 1486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 1496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return p; 1506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 1516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennprotected: /* INTERNAL INTERFACE */ 1526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int IsParam(const char* name) 1536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 1546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return GetParamPtr(name)?1:0; 1556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn }; 1566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void AddParam(const char* name, double* pAddr) 1576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 1586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn NewParam(name)->pDouble = pAddr; 1596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn }; 1606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void AddParam(const char* name, float* pAddr) 1616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 1626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn NewParam(name)->pFloat=pAddr; 1636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn }; 1646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void AddParam(const char* name, int* pAddr) 1656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 1666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn NewParam(name)->pInt=pAddr; 1676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn }; 1686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void AddParam(const char* name, char** pAddr) 1696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 1706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvDefParam* pP = NewParam(name); 1716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn char* p = pAddr?pAddr[0]:NULL; 1726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn pP->pStr = pAddr?pAddr:&(pP->Str); 1736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if(p) 1746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 1756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn pP->Str = strdup(p); 1766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn pP->pStr[0] = pP->Str; 1776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 1786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn }; 1796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void AddParam(const char* name) 1806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 1816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvDefParam* p = NewParam(name); 1826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn p->pDouble = &p->Double; 1836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn }; 1846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void CommentParam(const char* name, const char* pComment) 1856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 1866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvDefParam* p = GetParamPtr(name); 1876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if(p)p->pComment = pComment ? strdup(pComment) : 0; 1886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn }; 1896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void SetTypeName(const char* name){m_pModuleTypeName = strdup(name);} 1906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void SetModuleName(const char* name){m_pModuleName = strdup(name);} 1916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void DelParam(const char* name) 1926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 1936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvDefParam* p = m_pParamList; 1946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvDefParam* pPrev = NULL; 1956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for(;p;p=p->next) 1966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 1976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if(cv_stricmp(p->pName,name)==0) break; 1986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn pPrev = p; 1996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 2006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if(p) 2016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 2026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if(pPrev) 2036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 2046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn pPrev->next = p->next; 2056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 2066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn else 2076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 2086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn m_pParamList = p->next; 2096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 2106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn FreeParam(&p); 2116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 2126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn }/* DelParam */ 2136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennpublic: /* EXTERNAL INTERFACE */ 2156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn char* GetParamName(int index) 2166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 2176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvDefParam* p = GetParamPtr(index); 2186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return p?p->pName:NULL; 2196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 2206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn char* GetParamComment(const char* name) 2216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 2226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvDefParam* p = GetParamPtr(name); 2236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if(p && p->pComment) return p->pComment; 2246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return NULL; 2256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 2266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn double GetParam(const char* name) 2276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 2286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvDefParam* p = GetParamPtr(name); 2296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if(p) 2306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 2316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if(p->pDouble) return p->pDouble[0]; 2326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if(p->pFloat) return p->pFloat[0]; 2336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if(p->pInt) return p->pInt[0]; 2346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 2356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return 0; 2366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn }; 2376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const char* GetParamStr(const char* name) 2396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 2406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvDefParam* p = GetParamPtr(name); 2416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return p?p->Str:NULL; 2426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 2436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void SetParam(const char* name, double val) 2446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 2456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvDefParam* p = m_pParamList; 2466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for(;p;p=p->next) 2476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 2486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if(cv_stricmp(p->pName,name) != 0) continue; 2496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if(p->pDouble)p->pDouble[0] = val; 2506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if(p->pFloat)p->pFloat[0] = (float)val; 2516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if(p->pInt)p->pInt[0] = cvRound(val); 2526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 2536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 2546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void SetParamStr(const char* name, const char* str) 2556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 2566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvDefParam* p = m_pParamList; 2576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for(; p; p=p->next) 2586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 2596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if(cv_stricmp(p->pName,name) != 0) continue; 2606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if(p->pStr) 2616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 2626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if(p->Str)free(p->Str); 2636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn p->Str = NULL; 2646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if(str)p->Str = strdup(str); 2656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn p->pStr[0] = p->Str; 2666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 2676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 2686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn /* Convert to double and set: */ 2696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if(str) SetParam(name,atof(str)); 2706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 2716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void TransferParamsFromChild(CvVSModule* pM, char* prefix = NULL) 2726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 2736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn char tmp[1024]; 2746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn char* FN = NULL; 2756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int i; 2766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for(i=0;;++i) 2776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 2786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn char* N = pM->GetParamName(i); 2796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if(N == NULL) break; 2806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn FN = N; 2816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if(prefix) 2826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 2836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn strcpy(tmp,prefix); 2846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn strcat(tmp,"_"); 2856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn FN = strcat(tmp,N); 2866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 2876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if(!IsParam(FN)) 2896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 2906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if(pM->GetParamStr(N)) 2916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 2926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn AddParam(FN,(char**)NULL); 2936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 2946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn else 2956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 2966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn AddParam(FN); 2976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 2986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 2996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if(pM->GetParamStr(N)) 3006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 3016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const char* val = pM->GetParamStr(N); 3026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn SetParamStr(FN,val); 3036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 3046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn else 3056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 3066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn double val = pM->GetParam(N); 3076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn SetParam(FN,val); 3086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 3096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CommentParam(FN, pM->GetParamComment(N)); 3106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn }/* transfer next param */ 3116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn }/* Transfer params */ 3126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void TransferParamsToChild(CvVSModule* pM, char* prefix = NULL) 3146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 3156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn char tmp[1024]; 3166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int i; 3176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for(i=0;;++i) 3186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 3196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn char* N = pM->GetParamName(i); 3206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if(N == NULL) break; 3216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if(prefix) 3226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 3236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn strcpy(tmp,prefix); 3246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn strcat(tmp,"_"); 3256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn strcat(tmp,N); 3266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 3276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn else 3286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 3296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn strcpy(tmp,N); 3306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 3316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if(IsParam(tmp)) 3336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 3346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if(GetParamStr(tmp)) 3356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn pM->SetParamStr(N,GetParamStr(tmp)); 3366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn else 3376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn pM->SetParam(N,GetParam(tmp)); 3386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 3396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn }/* Transfer next parameter */ 3406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn pM->ParamUpdate(); 3416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn }/* Transfer params */ 3426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual void ParamUpdate(){}; 3446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const char* GetTypeName() 3456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 3466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return m_pModuleTypeName; 3476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 3486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int IsModuleTypeName(const char* name) 3496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 3506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return m_pModuleTypeName?(cv_stricmp(m_pModuleTypeName,name)==0):0; 3516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 3526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn char* GetModuleName() 3536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 3546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return m_pModuleName; 3556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 3566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int IsModuleName(const char* name) 3576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 3586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return m_pModuleName?(cv_stricmp(m_pModuleName,name)==0):0; 3596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 3606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void SetNickName(const char* pStr) 3616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 3626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if(m_pNickName) 3636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn free(m_pNickName); 3646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn m_pNickName = NULL; 3666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if(pStr) 3686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn m_pNickName = strdup(pStr); 3696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 3706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const char* GetNickName() 3716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 3726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return m_pNickName ? m_pNickName : "unknown"; 3736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 3746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual void SaveState(CvFileStorage*){}; 3756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual void LoadState(CvFileStorage*, CvFileNode*){}; 3766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual void Release() = 0; 3786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn};/* CvVMModule */ 3796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennvoid inline cvWriteStruct(CvFileStorage* fs, const char* name, void* addr, char* desc, int num=1) 3806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 3816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvStartWriteStruct(fs,name,CV_NODE_SEQ|CV_NODE_FLOW); 3826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvWriteRawData(fs,addr,num,desc); 3836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvEndWriteStruct(fs); 3846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 3856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennvoid inline cvReadStructByName(CvFileStorage* fs, CvFileNode* node, const char* name, void* addr, char* desc) 3866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 3876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvFileNode* pSeqNode = cvGetFileNodeByName(fs, node, name); 3886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if(pSeqNode==NULL) 3896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 3906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn printf("WARNING!!! Can't read structure %s\n",name); 3916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 3926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn else 3936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 3946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if(CV_NODE_IS_SEQ(pSeqNode->tag)) 3956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 3966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvReadRawData( fs, pSeqNode, addr, desc ); 3976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 3986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn else 3996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 4006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn printf("WARNING!!! Structure %s is not sequence and can not be read\n",name); 4016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 4026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 4036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 4046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* FOREGROUND DETECTOR INTERFACE */ 4076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennclass CV_EXPORTS CvFGDetector: public CvVSModule 4086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 4096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennpublic: 4106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual IplImage* GetMask() = 0; 4116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn /* Process current image: */ 4126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual void Process(IplImage* pImg) = 0; 4136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn /* Release foreground detector: */ 4146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual void Release() = 0; 4156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}; 4166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renninline void cvReleaseFGDetector(CvFGDetector** ppT ) 4176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 4186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ppT[0]->Release(); 4196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ppT[0] = 0; 4206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 4216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* FOREGROUND DETECTOR INTERFACE */ 4226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_EXPORTS CvFGDetector* cvCreateFGDetectorBase(int type, void *param); 4246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* BLOB STRUCTURE*/ 4276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennstruct CvBlob 4286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 4296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn float x,y; /* blob position */ 4306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn float w,h; /* blob sizes */ 4316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int ID; /* blob ID */ 4326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}; 4336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renninline CvBlob cvBlob(float x,float y, float w, float h) 4356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 4366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvBlob B = {x,y,w,h,0}; 4376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return B; 4386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 4396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_BLOB_MINW 5 4406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_BLOB_MINH 5 4416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_BLOB_ID(pB) (((CvBlob*)(pB))->ID) 4426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_BLOB_CENTER(pB) cvPoint2D32f(((CvBlob*)(pB))->x,((CvBlob*)(pB))->y) 4436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_BLOB_X(pB) (((CvBlob*)(pB))->x) 4446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_BLOB_Y(pB) (((CvBlob*)(pB))->y) 4456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_BLOB_WX(pB) (((CvBlob*)(pB))->w) 4466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_BLOB_WY(pB) (((CvBlob*)(pB))->h) 4476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_BLOB_RX(pB) (0.5f*CV_BLOB_WX(pB)) 4486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_BLOB_RY(pB) (0.5f*CV_BLOB_WY(pB)) 4496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_BLOB_RECT(pB) cvRect(cvRound(((CvBlob*)(pB))->x-CV_BLOB_RX(pB)),cvRound(((CvBlob*)(pB))->y-CV_BLOB_RY(pB)),cvRound(CV_BLOB_WX(pB)),cvRound(CV_BLOB_WY(pB))) 4506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* END BLOB STRUCTURE*/ 4516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* simple BLOBLIST */ 4546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennclass CV_EXPORTS CvBlobSeq 4556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 4566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennpublic: 4576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvBlobSeq(int BlobSize = sizeof(CvBlob)) 4586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 4596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn m_pMem = cvCreateMemStorage(); 4606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn m_pSeq = cvCreateSeq(0,sizeof(CvSeq),BlobSize,m_pMem); 4616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn strcpy(m_pElemFormat,"ffffi"); 4626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 4636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual ~CvBlobSeq() 4646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 4656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvReleaseMemStorage(&m_pMem); 4666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn }; 4676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual CvBlob* GetBlob(int BlobIndex) 4686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 4696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return (CvBlob*)cvGetSeqElem(m_pSeq,BlobIndex); 4706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn }; 4716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual CvBlob* GetBlobByID(int BlobID) 4726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 4736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int i; 4746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for(i=0; i<m_pSeq->total; ++i) 4756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if(BlobID == CV_BLOB_ID(GetBlob(i))) 4766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return GetBlob(i); 4776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return NULL; 4786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn }; 4796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual void DelBlob(int BlobIndex) 4806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 4816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvSeqRemove(m_pSeq,BlobIndex); 4826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn }; 4836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual void DelBlobByID(int BlobID) 4846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 4856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int i; 4866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for(i=0; i<m_pSeq->total; ++i) 4876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 4886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if(BlobID == CV_BLOB_ID(GetBlob(i))) 4896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 4906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn DelBlob(i); 4916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return; 4926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 4936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 4946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn }; 4956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual void Clear() 4966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 4976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvClearSeq(m_pSeq); 4986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn }; 4996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual void AddBlob(CvBlob* pB) 5006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 5016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvSeqPush(m_pSeq,pB); 5026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn }; 5036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual int GetBlobNum() 5046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 5056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return m_pSeq->total; 5066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn }; 5076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual void Write(CvFileStorage* fs, const char* name) 5086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 5096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const char* attr[] = {"dt",m_pElemFormat,NULL}; 5106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if(fs) 5116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 5126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvWrite(fs,name,m_pSeq,cvAttrList(attr,NULL)); 5136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 5146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 5156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual void Load(CvFileStorage* fs, CvFileNode* node) 5166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 5176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if(fs==NULL) return; 5186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvSeq* pSeq = (CvSeq*)cvRead(fs, node); 5196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if(pSeq) 5206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 5216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int i; 5226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvClearSeq(m_pSeq); 5236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for(i=0;i<pSeq->total;++i) 5246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 5256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void* pB = cvGetSeqElem( pSeq, i ); 5266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvSeqPush( m_pSeq, pB ); 5276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 5286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 5296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 5306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void AddFormat(char* str){strcat(m_pElemFormat,str);} 5316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennprotected: 5326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMemStorage* m_pMem; 5336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvSeq* m_pSeq; 5346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn char m_pElemFormat[1024]; 5356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}; 5366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* simple BLOBLIST */ 5376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* simple TRACKLIST */ 5406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennstruct CvBlobTrack 5416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 5426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int TrackID; 5436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int StartFrame; 5446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvBlobSeq* pBlobSeq; 5456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}; 5466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennclass CV_EXPORTS CvBlobTrackSeq 5486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 5496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennpublic: 5506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvBlobTrackSeq(int TrackSize = sizeof(CvBlobTrack)) 5516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 5526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn m_pMem = cvCreateMemStorage(); 5536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn m_pSeq = cvCreateSeq(0,sizeof(CvSeq),TrackSize,m_pMem); 5546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 5556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual ~CvBlobTrackSeq() 5566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 5576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn Clear(); 5586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvReleaseMemStorage(&m_pMem); 5596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn }; 5606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual CvBlobTrack* GetBlobTrack(int TrackIndex) 5616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 5626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return (CvBlobTrack*)cvGetSeqElem(m_pSeq,TrackIndex); 5636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn }; 5646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual CvBlobTrack* GetBlobTrackByID(int TrackID) 5656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 5666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int i; 5676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for(i=0; i<m_pSeq->total; ++i) 5686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 5696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvBlobTrack* pP = GetBlobTrack(i); 5706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if(pP && pP->TrackID == TrackID) 5716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return pP; 5726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 5736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return NULL; 5746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn }; 5756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual void DelBlobTrack(int TrackIndex) 5766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 5776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvBlobTrack* pP = GetBlobTrack(TrackIndex); 5786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if(pP && pP->pBlobSeq) delete pP->pBlobSeq; 5796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvSeqRemove(m_pSeq,TrackIndex); 5806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn }; 5816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual void DelBlobTrackByID(int TrackID) 5826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 5836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int i; 5846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for(i=0; i<m_pSeq->total; ++i) 5856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 5866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvBlobTrack* pP = GetBlobTrack(i); 5876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if(TrackID == pP->TrackID) 5886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 5896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn DelBlobTrack(i); 5906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return; 5916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 5926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 5936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn }; 5946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual void Clear() 5956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 5966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int i; 5976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for(i=GetBlobTrackNum();i>0;i--) 5986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 5996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn DelBlobTrack(i-1); 6006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 6016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvClearSeq(m_pSeq); 6026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn }; 6036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual void AddBlobTrack(int TrackID, int StartFrame = 0) 6046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 6056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvBlobTrack N; 6066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn N.TrackID = TrackID; 6076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn N.StartFrame = StartFrame; 6086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn N.pBlobSeq = new CvBlobSeq; 6096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvSeqPush(m_pSeq,&N); 6106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn }; 6116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual int GetBlobTrackNum() 6126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 6136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return m_pSeq->total; 6146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn }; 6156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennprotected: 6166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMemStorage* m_pMem; 6176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvSeq* m_pSeq; 6186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}; 6196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* simple TRACKLIST */ 6216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* BLOB DETECTOR INTERFACE */ 6246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennclass CV_EXPORTS CvBlobDetector: public CvVSModule 6256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 6266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennpublic: 6276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn /* Try to detect new blob entrance based on foreground mask. */ 6286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn /* pFGMask - image of foreground mask */ 6296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn /* pNewBlob - pointer to CvBlob structure which will be filled if new blob entrance detected */ 6306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn /* pOldBlobList - pointer to blob list which already exist on image */ 6316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual int DetectNewBlob(IplImage* pImg, IplImage* pImgFG, CvBlobSeq* pNewBlobList, CvBlobSeq* pOldBlobList) = 0; 6326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn /* release blob detector */ 6336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual void Release()=0; 6346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}; 6356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Release any blob detector: */ 6366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renninline void cvReleaseBlobDetector(CvBlobDetector** ppBD) 6376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 6386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ppBD[0]->Release(); 6396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ppBD[0] = NULL; 6406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 6416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* END BLOB DETECTOR INTERFACE */ 6426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Declarations of constructors of implemented modules: */ 6446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_EXPORTS CvBlobDetector* cvCreateBlobDetectorSimple(); 6456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_EXPORTS CvBlobDetector* cvCreateBlobDetectorCC(); 6466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennstruct CV_EXPORTS CvDetectedBlob : public CvBlob 6496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 6506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn float response; 6516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}; 6526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE CvDetectedBlob cvDetectedBlob( float x, float y, float w, float h, int ID = 0, float response = 0.0F ) 6546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 6556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvDetectedBlob b; 6566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn b.x = x; b.y = y; b.w = w; b.h = h; b.ID = ID; b.response = response; 6576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return b; 6586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 6596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennclass CV_EXPORTS CvObjectDetector 6626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 6636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennpublic: 6646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvObjectDetector( const char* /*detector_file_name*/ = 0 ) {}; 6656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ~CvObjectDetector() {}; 6676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn /* 6696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * Release the current detector and load new detector from file 6706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * (if detector_file_name is not 0) 6716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * Return true on success: 6726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn */ 6736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn bool Load( const char* /*detector_file_name*/ = 0 ) { return false; } 6746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn /* Return min detector window size: */ 6766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvSize GetMinWindowSize() const { return cvSize(0,0); } 6776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn /* Return max border: */ 6796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int GetMaxBorderSize() const { return 0; } 6806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn /* 6826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * Detect the object on the image and push the detected 6836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * blobs into <detected_blob_seq> which must be the sequence of <CvDetectedBlob>s 6846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn */ 6856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void Detect( const CvArr* /*img*/, /* out */ CvBlobSeq* /*detected_blob_seq*/ = 0 ) {}; 6866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennprotected: 6886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn class CvObjectDetectorImpl* impl; 6896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}; 6906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE CvRect cvRectIntersection( const CvRect r1, const CvRect r2 ) 6936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 6946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvRect r = cvRect( MAX(r1.x, r2.x), MAX(r1.y, r2.y), 0, 0 ); 6956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn r.width = MIN(r1.x + r1.width, r2.x + r2.width) - r.x; 6976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn r.height = MIN(r1.y + r1.height, r2.y + r2.height) - r.y; 6986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return r; 7006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 7016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* 7046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * CvImageDrawer 7056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * 7066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * Draw on an image the specified ROIs from the source image and 7076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * given blobs as ellipses or rectangles: 7086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn */ 7096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennstruct CvDrawShape 7116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 7126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn enum {RECT, ELLIPSE} shape; 7136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvScalar color; 7146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}; 7156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/*extern const CvDrawShape icv_shape[] = 7176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 7186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { CvDrawShape::ELLIPSE, CV_RGB(255,0,0) }, 7196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { CvDrawShape::ELLIPSE, CV_RGB(0,255,0) }, 7206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { CvDrawShape::ELLIPSE, CV_RGB(0,0,255) }, 7216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { CvDrawShape::ELLIPSE, CV_RGB(255,255,0) }, 7226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { CvDrawShape::ELLIPSE, CV_RGB(0,255,255) }, 7236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { CvDrawShape::ELLIPSE, CV_RGB(255,0,255) } 7246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn};*/ 7256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennclass CV_EXPORTS CvImageDrawer 7276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 7286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennpublic: 7296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvImageDrawer() : m_image(0) {} 7306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ~CvImageDrawer() { cvReleaseImage( &m_image ); } 7316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void SetShapes( const CvDrawShape* shapes, int num ); 7326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn /* <blob_seq> must be the sequence of <CvDetectedBlob>s */ 7336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn IplImage* Draw( const CvArr* src, CvBlobSeq* blob_seq = 0, const CvSeq* roi_seq = 0 ); 7346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn IplImage* GetImage() { return m_image; } 7356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennprotected: 7366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn //static const int MAX_SHAPES = sizeof(icv_shape) / sizeof(icv_shape[0]);; 7376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn IplImage* m_image; 7396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvDrawShape m_shape[16]; 7406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}; 7416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Trajectory generation module: */ 7456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennclass CV_EXPORTS CvBlobTrackGen: public CvVSModule 7466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 7476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennpublic: 7486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual void SetFileName(char* pFileName) = 0; 7496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual void AddBlob(CvBlob* pBlob) = 0; 7506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual void Process(IplImage* pImg = NULL, IplImage* pFG = NULL) = 0; 7516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual void Release() = 0; 7526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}; 7536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renninline void cvReleaseBlobTrackGen(CvBlobTrackGen** pBTGen) 7556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 7566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if(*pBTGen)(*pBTGen)->Release(); 7576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn *pBTGen = 0; 7586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 7596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Declarations of constructors of implemented modules: */ 7616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_EXPORTS CvBlobTrackGen* cvCreateModuleBlobTrackGen1(); 7626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_EXPORTS CvBlobTrackGen* cvCreateModuleBlobTrackGenYML(); 7636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* BLOB TRACKER INTERFACE */ 7676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennclass CV_EXPORTS CvBlobTracker: public CvVSModule 7686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 7696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennpublic: 7706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvBlobTracker(){SetTypeName("BlobTracker");}; 7716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn /* Add new blob to track it and assign to this blob personal ID */ 7736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn /* pBlob - pointer to structure with blob parameters (ID is ignored)*/ 7746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn /* pImg - current image */ 7756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn /* pImgFG - current foreground mask */ 7766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn /* Return pointer to new added blob: */ 7776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual CvBlob* AddBlob(CvBlob* pBlob, IplImage* pImg, IplImage* pImgFG = NULL ) = 0; 7786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn /* Return number of currently tracked blobs: */ 7806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual int GetBlobNum() = 0; 7816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn /* Return pointer to specified by index blob: */ 7836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual CvBlob* GetBlob(int BlobIndex) = 0; 7846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn /* Delete blob by its index: */ 7866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual void DelBlob(int BlobIndex) = 0; 7876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn /* Process current image and track all existed blobs: */ 7896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual void Process(IplImage* pImg, IplImage* pImgFG = NULL) = 0; 7906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn /* Release blob tracker: */ 7926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual void Release() = 0; 7936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn /* Process one blob (for multi hypothesis tracing): */ 7966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual void ProcessBlob(int BlobIndex, CvBlob* pBlob, IplImage* /*pImg*/, IplImage* /*pImgFG*/ = NULL) 7976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 7986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvBlob* pB; 7996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int ID = 0; 8006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn assert(pBlob); 8016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn //pBlob->ID; 8026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn pB = GetBlob(BlobIndex); 8036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if(pB) 8046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn pBlob[0] = pB[0]; 8056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn pBlob->ID = ID; 8066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn }; 8076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn /* Get confidence/wieght/probability (0-1) for blob: */ 8096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual double GetConfidence(int /*BlobIndex*/, CvBlob* /*pBlob*/, IplImage* /*pImg*/, IplImage* /*pImgFG*/ = NULL) 8106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 8116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return 1; 8126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn }; 8136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual double GetConfidenceList(CvBlobSeq* pBlobList, IplImage* pImg, IplImage* pImgFG = NULL) 8156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 8166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int b,bN = pBlobList->GetBlobNum(); 8176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn double W = 1; 8186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for(b=0;b<bN;++b) 8196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 8206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvBlob* pB = pBlobList->GetBlob(b); 8216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int BI = GetBlobIndexByID(pB->ID); 8226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn W *= GetConfidence(BI,pB,pImg,pImgFG); 8236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 8246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return W; 8256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn }; 8266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual void UpdateBlob(int /*BlobIndex*/, CvBlob* /*pBlob*/, IplImage* /*pImg*/, IplImage* /*pImgFG*/ = NULL){}; 8286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn /* Update all blob models: */ 8306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual void Update(IplImage* pImg, IplImage* pImgFG = NULL) 8316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 8326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int i; 8336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for(i=GetBlobNum();i>0;i--) 8346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 8356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvBlob* pB=GetBlob(i-1); 8366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn UpdateBlob(i-1, pB, pImg, pImgFG); 8376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 8386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn }; 8406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn /* Return pointer to blob by its unique ID: */ 8426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual int GetBlobIndexByID(int BlobID) 8436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 8446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int i; 8456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for(i=GetBlobNum();i>0;i--) 8466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 8476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvBlob* pB=GetBlob(i-1); 8486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if(CV_BLOB_ID(pB) == BlobID) return i-1; 8496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 8506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return -1; 8516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn }; 8526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn /* Return pointer to blob by its unique ID: */ 8546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual CvBlob* GetBlobByID(int BlobID){return GetBlob(GetBlobIndexByID(BlobID));}; 8556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn /* Delete blob by its ID: */ 8576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual void DelBlobByID(int BlobID){DelBlob(GetBlobIndexByID(BlobID));}; 8586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn /* Set new parameters for specified (by index) blob: */ 8606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual void SetBlob(int /*BlobIndex*/, CvBlob* /*pBlob*/){}; 8616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn /* Set new parameters for specified (by ID) blob: */ 8636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual void SetBlobByID(int BlobID, CvBlob* pBlob) 8646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 8656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn SetBlob(GetBlobIndexByID(BlobID),pBlob); 8666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn }; 8676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn /* =============== MULTI HYPOTHESIS INTERFACE ================== */ 8696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn /* Return number of position hyposetis of currently tracked blob: */ 8716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual int GetBlobHypNum(int /*BlobIdx*/){return 1;}; 8726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn /* Return pointer to specified blob hypothesis by index blob: */ 8746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual CvBlob* GetBlobHyp(int BlobIndex, int /*hypothesis*/){return GetBlob(BlobIndex);}; 8756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn /* Set new parameters for specified (by index) blob hyp 8776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * (can be called several times for each hyp ): 8786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn */ 8796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual void SetBlobHyp(int /*BlobIndex*/, CvBlob* /*pBlob*/){}; 8806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}; 8816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renninline void cvReleaseBlobTracker(CvBlobTracker**ppT ) 8826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 8836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ppT[0]->Release(); 8846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ppT[0] = 0; 8856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 8866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* BLOB TRACKER INTERFACE */ 8876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/*BLOB TRACKER ONE INTERFACE */ 8896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennclass CV_EXPORTS CvBlobTrackerOne:public CvVSModule 8906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 8916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennpublic: 8926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual void Init(CvBlob* pBlobInit, IplImage* pImg, IplImage* pImgFG = NULL) = 0; 8936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual CvBlob* Process(CvBlob* pBlobPrev, IplImage* pImg, IplImage* pImgFG = NULL) = 0; 8946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual void Release() = 0; 8956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn /* Non-required methods: */ 8976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual void SkipProcess(CvBlob* /*pBlobPrev*/, IplImage* /*pImg*/, IplImage* /*pImgFG*/ = NULL){}; 8986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual void Update(CvBlob* /*pBlob*/, IplImage* /*pImg*/, IplImage* /*pImgFG*/ = NULL){}; 8996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual void SetCollision(int /*CollisionFlag*/){}; /* call in case of blob collision situation*/ 9006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual double GetConfidence(CvBlob* /*pBlob*/, IplImage* /*pImg*/, 9016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn IplImage* /*pImgFG*/ = NULL, IplImage* /*pImgUnusedReg*/ = NULL) 9026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 9036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return 1; 9046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn }; 9056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}; 9066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renninline void cvReleaseBlobTrackerOne(CvBlobTrackerOne **ppT ) 9076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 9086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ppT[0]->Release(); 9096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ppT[0] = 0; 9106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 9116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_EXPORTS CvBlobTracker* cvCreateBlobTrackerList(CvBlobTrackerOne* (*create)()); 9126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/*BLOB TRACKER ONE INTERFACE */ 9136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Declarations of constructors of implemented modules: */ 9156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Some declarations for specific MeanShift tracker: */ 9176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define PROFILE_EPANECHNIKOV 0 9186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define PROFILE_DOG 1 9196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennstruct CvBlobTrackerParamMS 9206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 9216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int noOfSigBits; 9226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int appearance_profile; 9236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int meanshift_profile; 9246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn float sigma; 9256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}; 9266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_EXPORTS CvBlobTracker* cvCreateBlobTrackerMS1(CvBlobTrackerParamMS* param); 9286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_EXPORTS CvBlobTracker* cvCreateBlobTrackerMS2(CvBlobTrackerParamMS* param); 9296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_EXPORTS CvBlobTracker* cvCreateBlobTrackerMS1ByList(); 9306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Some declarations for specific Likelihood tracker: */ 9326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennstruct CvBlobTrackerParamLH 9336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 9346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int HistType; /* see Prob.h */ 9356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int ScaleAfter; 9366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}; 9376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Without scale optimization: */ 9396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_EXPORTS CvBlobTracker* cvCreateBlobTrackerLHR(CvBlobTrackerParamLH* /*param*/ = NULL); 9406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* With scale optimization: */ 9426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_EXPORTS CvBlobTracker* cvCreateBlobTrackerLHRS(CvBlobTrackerParamLH* /*param*/ = NULL); 9436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Simple blob tracker based on connected component tracking: */ 9456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_EXPORTS CvBlobTracker* cvCreateBlobTrackerCC(); 9466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Connected component tracking and mean-shift particle filter collion-resolver: */ 9486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_EXPORTS CvBlobTracker* cvCreateBlobTrackerCCMSPF(); 9496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Blob tracker that integrates meanshift and connected components: */ 9516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_EXPORTS CvBlobTracker* cvCreateBlobTrackerMSFG(); 9526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_EXPORTS CvBlobTracker* cvCreateBlobTrackerMSFGS(); 9536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Meanshift without connected-components */ 9556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_EXPORTS CvBlobTracker* cvCreateBlobTrackerMS(); 9566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Particle filtering via Bhattacharya coefficient, which */ 9586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* is roughly the dot-product of two probability densities. */ 9596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* See: Real-Time Tracking of Non-Rigid Objects using Mean Shift */ 9606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Comanicius, Ramesh, Meer, 2000, 8p */ 9616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* http://citeseer.ist.psu.edu/321441.html */ 9626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_EXPORTS CvBlobTracker* cvCreateBlobTrackerMSPF(); 9636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* =========== tracker integrators trackers =============*/ 9656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Integrator based on Particle Filtering method: */ 9676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//CV_EXPORTS CvBlobTracker* cvCreateBlobTrackerIPF(); 9686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Rule based integrator: */ 9706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//CV_EXPORTS CvBlobTracker* cvCreateBlobTrackerIRB(); 9716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Integrator based on data fusion using particle filtering: */ 9736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//CV_EXPORTS CvBlobTracker* cvCreateBlobTrackerIPFDF(); 9746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Trajectory postprocessing module: */ 9796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennclass CV_EXPORTS CvBlobTrackPostProc: public CvVSModule 9806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 9816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennpublic: 9826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual void AddBlob(CvBlob* pBlob) = 0; 9836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual void Process() = 0; 9846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual int GetBlobNum() = 0; 9856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual CvBlob* GetBlob(int index) = 0; 9866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual void Release() = 0; 9876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn /* Additional functionality: */ 9896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual CvBlob* GetBlobByID(int BlobID) 9906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 9916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int i; 9926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for(i=GetBlobNum();i>0;i--) 9936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 9946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvBlob* pB=GetBlob(i-1); 9956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if(pB->ID==BlobID) return pB; 9966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 9976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return NULL; 9986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn }; 9996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}; 10006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renninline void cvReleaseBlobTrackPostProc(CvBlobTrackPostProc** pBTPP) 10026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 10036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if(pBTPP == NULL) return; 10046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if(*pBTPP)(*pBTPP)->Release(); 10056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn *pBTPP = 0; 10066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 10076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Trajectory generation module: */ 10096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennclass CV_EXPORTS CvBlobTrackPostProcOne: public CvVSModule 10106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 10116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennpublic: 10126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual CvBlob* Process(CvBlob* pBlob) = 0; 10136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual void Release() = 0; 10146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}; 10156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Create blob tracking post processing module based on simle module: */ 10176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_EXPORTS CvBlobTrackPostProc* cvCreateBlobTrackPostProcList(CvBlobTrackPostProcOne* (*create)()); 10186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Declarations of constructors of implemented modules: */ 10216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_EXPORTS CvBlobTrackPostProc* cvCreateModuleBlobTrackPostProcKalman(); 10226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_EXPORTS CvBlobTrackPostProc* cvCreateModuleBlobTrackPostProcTimeAverRect(); 10236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_EXPORTS CvBlobTrackPostProc* cvCreateModuleBlobTrackPostProcTimeAverExp(); 10246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* PREDICTORS */ 10276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* blob PREDICTOR */ 10286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennclass CvBlobTrackPredictor: public CvVSModule 10296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 10306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennpublic: 10316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual CvBlob* Predict() = 0; 10326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual void Update(CvBlob* pBlob) = 0; 10336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual void Release() = 0; 10346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}; 10356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_EXPORTS CvBlobTrackPredictor* cvCreateModuleBlobTrackPredictKalman(); 10366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Trajectory analyser module: */ 10406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennclass CV_EXPORTS CvBlobTrackAnalysis: public CvVSModule 10416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 10426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennpublic: 10436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual void AddBlob(CvBlob* pBlob) = 0; 10446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual void Process(IplImage* pImg, IplImage* pFG) = 0; 10456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual float GetState(int BlobID) = 0; 10466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn /* return 0 if trajectory is normal 10476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return >0 if trajectory abnormal */ 10486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual char* GetStateDesc(int /*BlobID*/){return NULL;}; 10496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual void SetFileName(char* /*DataBaseName*/){}; 10506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual void Release() = 0; 10516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}; 10526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renninline void cvReleaseBlobTrackAnalysis(CvBlobTrackAnalysis** pBTPP) 10556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 10566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if(pBTPP == NULL) return; 10576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if(*pBTPP)(*pBTPP)->Release(); 10586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn *pBTPP = 0; 10596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 10606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Feature-vector generation module: */ 10626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennclass CV_EXPORTS CvBlobTrackFVGen : public CvVSModule 10636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 10646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennpublic: 10656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual void AddBlob(CvBlob* pBlob) = 0; 10666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual void Process(IplImage* pImg, IplImage* pFG) = 0; 10676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual void Release() = 0; 10686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual int GetFVSize() = 0; 10696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual int GetFVNum() = 0; 10706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual float* GetFV(int index, int* pFVID) = 0; /* Returns pointer to FV, if return 0 then FV not created */ 10716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual float* GetFVVar(){return NULL;}; /* Returns pointer to array of variation of values of FV, if returns 0 then FVVar does not exist. */ 10726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual float* GetFVMin() = 0; /* Returns pointer to array of minimal values of FV, if returns 0 then FVrange does not exist */ 10736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual float* GetFVMax() = 0; /* Returns pointer to array of maximal values of FV, if returns 0 then FVrange does not exist */ 10746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}; 10756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Trajectory Analyser module: */ 10786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennclass CV_EXPORTS CvBlobTrackAnalysisOne 10796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 10806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennpublic: 10816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual ~CvBlobTrackAnalysisOne() {}; 10826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual int Process(CvBlob* pBlob, IplImage* pImg, IplImage* pFG) = 0; 10836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn /* return 0 if trajectory is normal 10846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return >0 if trajectory abnormal */ 10856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual void Release() = 0; 10866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}; 10876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Create blob tracking post processing module based on simle module: */ 10896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_EXPORTS CvBlobTrackAnalysis* cvCreateBlobTrackAnalysisList(CvBlobTrackAnalysisOne* (*create)()); 10906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Declarations of constructors of implemented modules: */ 10926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Based on histogram analysis of 2D FV (x,y): */ 10946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_EXPORTS CvBlobTrackAnalysis* cvCreateModuleBlobTrackAnalysisHistP(); 10956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Based on histogram analysis of 4D FV (x,y,vx,vy): */ 10976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_EXPORTS CvBlobTrackAnalysis* cvCreateModuleBlobTrackAnalysisHistPV(); 10986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Based on histogram analysis of 5D FV (x,y,vx,vy,state): */ 11006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_EXPORTS CvBlobTrackAnalysis* cvCreateModuleBlobTrackAnalysisHistPVS(); 11016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 11026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Based on histogram analysis of 4D FV (startpos,stoppos): */ 11036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_EXPORTS CvBlobTrackAnalysis* cvCreateModuleBlobTrackAnalysisHistSS(); 11046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 11056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 11066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 11076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Based on SVM classifier analysis of 2D FV (x,y): */ 11086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//CV_EXPORTS CvBlobTrackAnalysis* cvCreateModuleBlobTrackAnalysisSVMP(); 11096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 11106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Based on SVM classifier analysis of 4D FV (x,y,vx,vy): */ 11116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//CV_EXPORTS CvBlobTrackAnalysis* cvCreateModuleBlobTrackAnalysisSVMPV(); 11126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 11136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Based on SVM classifier analysis of 5D FV (x,y,vx,vy,state): */ 11146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//CV_EXPORTS CvBlobTrackAnalysis* cvCreateModuleBlobTrackAnalysisSVMPVS(); 11156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 11166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Based on SVM classifier analysis of 4D FV (startpos,stoppos): */ 11176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//CV_EXPORTS CvBlobTrackAnalysis* cvCreateModuleBlobTrackAnalysisSVMSS(); 11186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 11196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Track analysis based on distance between tracks: */ 11206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_EXPORTS CvBlobTrackAnalysis* cvCreateModuleBlobTrackAnalysisTrackDist(); 11216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 11226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Analyzer based on reation Road and height map: */ 11236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//CV_EXPORTS CvBlobTrackAnalysis* cvCreateModuleBlobTrackAnalysis3DRoadMap(); 11246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 11256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Analyzer that makes OR decision using set of analyzers: */ 11266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_EXPORTS CvBlobTrackAnalysis* cvCreateModuleBlobTrackAnalysisIOR(); 11276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 11286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Estimator of human height: */ 11296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennclass CV_EXPORTS CvBlobTrackAnalysisHeight: public CvBlobTrackAnalysis 11306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 11316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennpublic: 11326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual double GetHeight(CvBlob* pB) = 0; 11336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}; 11346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//CV_EXPORTS CvBlobTrackAnalysisHeight* cvCreateModuleBlobTrackAnalysisHeightScale(); 11356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 11366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 11376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 11386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* AUTO BLOB TRACKER INTERFACE -- pipeline of 3 modules: */ 11396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennclass CV_EXPORTS CvBlobTrackerAuto: public CvVSModule 11406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 11416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennpublic: 11426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual void Process(IplImage* pImg, IplImage* pMask = NULL) = 0; 11436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual CvBlob* GetBlob(int index) = 0; 11446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual CvBlob* GetBlobByID(int ID) = 0; 11456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual int GetBlobNum() = 0; 11466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual IplImage* GetFGMask(){return NULL;}; 11476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual float GetState(int BlobID) = 0; 11486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual char* GetStateDesc(int BlobID) = 0; 11496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn /* return 0 if trajectory is normal; 11506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * return >0 if trajectory abnormal. */ 11516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual void Release() = 0; 11526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}; 11536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renninline void cvReleaseBlobTrackerAuto(CvBlobTrackerAuto** ppT) 11546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 11556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ppT[0]->Release(); 11566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ppT[0] = 0; 11576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 11586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* END AUTO BLOB TRACKER INTERFACE */ 11596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 11606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 11616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Constructor functions and data for specific BlobTRackerAuto modules: */ 11626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 11636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Parameters of blobtracker auto ver1: */ 11646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennstruct CvBlobTrackerAutoParam1 11656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 11666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int FGTrainFrames; /* Number of frames needed for FG (foreground) detector to train. */ 11676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 11686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvFGDetector* pFG; /* FGDetector module. If this field is NULL the Process FG mask is used. */ 11696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 11706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvBlobDetector* pBD; /* Selected blob detector module. */ 11716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn /* If this field is NULL default blobdetector module will be created. */ 11726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 11736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvBlobTracker* pBT; /* Selected blob tracking module. */ 11746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn /* If this field is NULL default blobtracker module will be created. */ 11756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 11766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvBlobTrackGen* pBTGen; /* Selected blob trajectory generator. */ 11776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn /* If this field is NULL no generator is used. */ 11786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 11796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvBlobTrackPostProc* pBTPP; /* Selected blob trajectory postprocessing module. */ 11806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn /* If this field is NULL no postprocessing is done. */ 11816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 11826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int UsePPData; 11836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 11846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvBlobTrackAnalysis* pBTA; /* Selected blob trajectory analysis module. */ 11856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn /* If this field is NULL no track analysis is done. */ 11866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}; 11876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 11886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Create blob tracker auto ver1: */ 11896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_EXPORTS CvBlobTrackerAuto* cvCreateBlobTrackerAuto1(CvBlobTrackerAutoParam1* param = NULL); 11906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 11916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Simple loader for many auto trackers by its type : */ 11926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renninline CvBlobTrackerAuto* cvCreateBlobTrackerAuto(int type, void* param) 11936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 11946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if(type == 0) return cvCreateBlobTrackerAuto1((CvBlobTrackerAutoParam1*)param); 11956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return 0; 11966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 11976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 11986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 11996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 12006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennstruct CvTracksTimePos 12016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 12026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int len1,len2; 12036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int beg1,beg2; 12046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int end1,end2; 12056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int comLen; //common length for two tracks 12066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int shift1,shift2; 12076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}; 12086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 12096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/*CV_EXPORTS int cvCompareTracks( CvBlobTrackSeq *groundTruth, 12106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvBlobTrackSeq *result, 12116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn FILE *file);*/ 12126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 12136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 12146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Constructor functions: */ 12156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 12166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_EXPORTS void cvCreateTracks_One(CvBlobTrackSeq *TS); 12176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_EXPORTS void cvCreateTracks_Same(CvBlobTrackSeq *TS1, CvBlobTrackSeq *TS2); 12186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_EXPORTS void cvCreateTracks_AreaErr(CvBlobTrackSeq *TS1, CvBlobTrackSeq *TS2, int addW, int addH); 12196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 12206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 12216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* HIST API */ 12226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennclass CV_EXPORTS CvProb 12236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 12246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennpublic: 12256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual ~CvProb() {}; 12266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 12276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn /* Calculate probability value: */ 12286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual double Value(int* /*comp*/, int /*x*/ = 0, int /*y*/ = 0){return -1;}; 12296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 12306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn /* Update histograpp Pnew = (1-W)*Pold + W*Padd*/ 12316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn /* W weight of new added prob */ 12326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn /* comps - matrix of new fetature vectors used to update prob */ 12336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual void AddFeature(float W, int* comps, int x =0, int y = 0) = 0; 12346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual void Scale(float factor = 0, int x = -1, int y = -1) = 0; 12356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn virtual void Release() = 0; 12366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}; 12376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renninline void cvReleaseProb(CvProb** ppProb){ppProb[0]->Release();ppProb[0]=NULL;} 12386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* HIST API */ 12396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 12406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Some Prob: */ 12416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_EXPORTS CvProb* cvCreateProbS(int dim, CvSize size, int sample_num); 12426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_EXPORTS CvProb* cvCreateProbMG(int dim, CvSize size, int sample_num); 12436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_EXPORTS CvProb* cvCreateProbMG2(int dim, CvSize size, int sample_num); 12446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_EXPORTS CvProb* cvCreateProbHist(int dim, CvSize size); 12456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 12466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_BT_HIST_TYPE_S 0 12476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_BT_HIST_TYPE_MG 1 12486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_BT_HIST_TYPE_MG2 2 12496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_BT_HIST_TYPE_H 3 12506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renninline CvProb* cvCreateProb(int type, int dim, CvSize size = cvSize(1,1), void* /*param*/ = NULL) 12516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 12526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if(type == CV_BT_HIST_TYPE_S) return cvCreateProbS(dim, size, -1); 12536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if(type == CV_BT_HIST_TYPE_MG) return cvCreateProbMG(dim, size, -1); 12546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if(type == CV_BT_HIST_TYPE_MG2) return cvCreateProbMG2(dim, size, -1); 12556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if(type == CV_BT_HIST_TYPE_H) return cvCreateProbHist(dim, size); 12566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return NULL; 12576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 12586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 12596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 12606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 12616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Noise type definitions: */ 12626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_NOISE_NONE 0 12636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_NOISE_GAUSSIAN 1 12646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_NOISE_UNIFORM 2 12656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_NOISE_SPECKLE 3 12666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_NOISE_SALT_AND_PEPPER 4 12676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 12686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Add some noise to image: */ 12696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* pImg - (input) image without noise */ 12706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* pImg - (output) image with noise */ 12716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* noise_type - type of added noise */ 12726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* CV_NOISE_GAUSSIAN - pImg += n , n - is gaussian noise with Ampl standart deviation */ 12736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* CV_NOISE_UNIFORM - pImg += n , n - is uniform noise with Ampl standart deviation */ 12746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* CV_NOISE_SPECKLE - pImg += n*pImg , n - is gaussian noise with Ampl standart deviation */ 12756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* CV_NOISE_SALT_AND_PAPPER - pImg = pImg with blacked and whited pixels, 12766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn Ampl is density of brocken pixels (0-there are not broken pixels, 1 - all pixels are broken)*/ 12776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Ampl - "amplitude" of noise */ 12786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_EXPORTS void cvAddNoise(IplImage* pImg, int noise_type, double Ampl, CvRandState* rnd_state = NULL); 12796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 12806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/*================== GENERATOR OF TEST VIDEO SEQUENCE ===================== */ 12816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef void CvTestSeq; 12826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 12836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* pConfigfile - Name of file (yml or xml) with description of test sequence */ 12846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* videos - array of names of test videos described in "pConfigfile" file */ 12856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* numvideos - size of "videos" array */ 12866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_EXPORTS CvTestSeq* cvCreateTestSeq(char* pConfigfile, char** videos, int numvideo, float Scale = 1, int noise_type = CV_NOISE_NONE, double noise_ampl = 0); 12876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_EXPORTS void cvReleaseTestSeq(CvTestSeq** ppTestSeq); 12886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 12896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Generate next frame from test video seq and return pointer to it: */ 12906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_EXPORTS IplImage* cvTestSeqQueryFrame(CvTestSeq* pTestSeq); 12916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 12926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Return pointer to current foreground mask: */ 12936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_EXPORTS IplImage* cvTestSeqGetFGMask(CvTestSeq* pTestSeq); 12946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 12956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Return pointer to current image: */ 12966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_EXPORTS IplImage* cvTestSeqGetImage(CvTestSeq* pTestSeq); 12976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 12986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Return frame size of result test video: */ 12996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_EXPORTS CvSize cvTestSeqGetImageSize(CvTestSeq* pTestSeq); 13006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 13016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Return number of frames result test video: */ 13026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_EXPORTS int cvTestSeqFrameNum(CvTestSeq* pTestSeq); 13036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 13046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Return number of existing objects. 13056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * This is general number of any objects. 13066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * For example number of trajectories may be equal or less than returned value: 13076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn */ 13086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_EXPORTS int cvTestSeqGetObjectNum(CvTestSeq* pTestSeq); 13096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 13106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Return 0 if there is not position for current defined on current frame */ 13116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Return 1 if there is object position and pPos was filled */ 13126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_EXPORTS int cvTestSeqGetObjectPos(CvTestSeq* pTestSeq, int ObjIndex, CvPoint2D32f* pPos); 13136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_EXPORTS int cvTestSeqGetObjectSize(CvTestSeq* pTestSeq, int ObjIndex, CvPoint2D32f* pSize); 13146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 13156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Add noise to final image: */ 13166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_EXPORTS void cvTestSeqAddNoise(CvTestSeq* pTestSeq, int noise_type = CV_NOISE_NONE, double noise_ampl = 0); 13176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 13186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Add Intensity variation: */ 13196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_EXPORTS void cvTestSeqAddIntensityVariation(CvTestSeq* pTestSeq, float DI_per_frame, float MinI, float MaxI); 13206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_EXPORTS void cvTestSeqSetFrame(CvTestSeq* pTestSeq, int n); 13216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 13226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif 13236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 13246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* End of file. */ 1325