humanfeatures.cc
来自「VC视频对象的跟踪提取原代码(vc视频监控源码)」· CC 代码 · 共 187 行
CC
187 行
///////////////////////////////////////////////////////////////////////////////// //// HumanFeatures.cc //// //// Some definitions and structures for human features such as head etc //// //// Author : Nils T Siebel (nts) //// Created : Tue Apr 17 15:57:52 BST 2001 //// Revision : 0.1 of Thu Apr 19 12:20:49 BST 2001 //// Copyright : The University of Reading //// /////////////////////////////////////////////////////////////////////////////////#include "HumanFeatures.h"#include "RGB32Image.h" // for zooming in video image#include "Grey8Image.h" // for zooming in motion image#include "HumanFeatureTracker.h"namespace ReadingPeopleTracker{static const char *HumanFeatures_Revision = "@(#) HumanFeatures.cc, rev 0.1 of Thu Apr 19 12:20:49 BST 2001, Author Nils T Siebel, Copyright (c) 2001 The University of Reading";// definition and initialisation of static member variablesbool HumanFeatures::draw_head_search_area = true;bool HumanFeatures::draw_head_bbox = true;bool HumanFeatures::draw_head_centre = true;bool HumanFeatures::draw_shoulder_width = true;HeadInfo &HeadInfo::operator= (HeadInfo &original){ // copy over normal variables x = original.x; y = original.y; x_abs = original.x_abs; y_abs = original.y_abs; width = original.width; height = original.height; // instantiate new VerticalHistogram in order to copy *original.head_histogram head_histogram = new VerticalHistogram; *head_histogram = *original.head_histogram; return *this;}HumanFeatures &HumanFeatures::operator= (HumanFeatures &original){ Observation::operator=(original); if (original.head != NULL) { // instantiate new HeadInfo in order to copy over *original.head head = new HeadInfo; *head = *original.head; // using the operator defined above } else head = NULL; // (the other variables are static) return *this;}// draw all detected HumanFeatures into imagevoid HumanFeatures::draw(){#ifndef NO_DISPLAY draw_head(); // that's all we have for now...#endif // #ifndef NO_DISPLAY}void HumanFeatures::draw_head(){#ifndef NO_DISPLAY if (head == NULL) return; int zoom = Image::display_zoom->value; // because recti and circ don't use zoom VerticalHistogram *histogram = head->head_histogram; linewidth(2); if (draw_head_search_area) {#ifdef USE_GL // bbox of search area if (getplanes() == 8) // CMap (grey?) image (fi motion image) color(30); else if (getplanes() == 24) // RGB mode (fi video image) RGBcolor(127,32,32);#endif recti(zoom*(histogram->xlo), zoom*(histogram->ylo), zoom*(histogram->xhi), zoom*(histogram->yhi)); } if (draw_head_bbox) {#ifdef USE_GL // head bbox if (getplanes() == 8) // CMap (grey?) image (fi motion image) color(50); else if (getplanes() == 24) // RGB mode (fi video image) RGBcolor(255,10,127);#endif recti(zoom*(head->x_abs - head->width / 2), zoom*(head->y_abs - head->height / 2), zoom*(head->x_abs + head->width / 2), zoom*(head->y_abs + head->height / 2)); } if (draw_head_centre) {#ifdef USE_GL // head centre: mark with a circle if (getplanes() == 8) // CMap (grey?) image (fi motion image) color(50); else if (getplanes() == 24) // RGB mode (fi video image) RGBcolor(255,10,127);#endif circ(zoom*(head->x_abs), zoom*(head->y_abs), zoom + 1); } if (draw_shoulder_width) {#ifdef USE_GL // assumed shoulder width (from head search histogram) if (getplanes() == 8) // CMap (grey?) image (fi motion image) color(50); else if (getplanes() == 24) // RGB mode (fi video image) RGBcolor(255,10,127);#endif move2i(zoom*(histogram->xlo + histogram->leftmost), zoom*(histogram->ylo + head->y - head->height / 2 - 1)); draw2i(zoom*(histogram->xlo + histogram->leftmost), zoom*(histogram->ylo + 1)); move2i(zoom*(histogram->xlo + histogram->rightmost), zoom*(histogram->ylo + head->y - head->height / 2 - 1)); draw2i(zoom*(histogram->xlo + histogram->rightmost), zoom*(histogram->ylo + 1)); } #endif // #ifndef NO_DISPLAY}// write out HeadInfo structureostream &operator << (ostream &target, const HeadInfo head){ target << "Head Info: head at (" << head.x << "," << head.y << ") relative, (" << head.head_histogram->xlo + head.x << "," << head.head_histogram->ylo+head.y << ") absolute, size " << head.width << "x" << head.height << " pixels " << endl; return target;}ostream &operator << (ostream &target, const HumanFeatures features){ target << "Features: " << features.head; // more features to be written out here... // target << "Features: " << features.body; \ETC return target;}// FIXME: Dummy istream operator. we need it for listimplement(HumanFeatures)// but until we actually use it I will leave it empty --- nts Apr 2001.istream &operator >> (istream &source, const HumanFeatures features){ return source;};} // namespace ReadingPeopleTracker
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?