aboutsummaryrefslogtreecommitdiff
path: root/pix_opencv_blobtrack.cc
diff options
context:
space:
mode:
Diffstat (limited to 'pix_opencv_blobtrack.cc')
-rw-r--r--pix_opencv_blobtrack.cc41
1 files changed, 23 insertions, 18 deletions
diff --git a/pix_opencv_blobtrack.cc b/pix_opencv_blobtrack.cc
index ed84d20..4eaa56f 100644
--- a/pix_opencv_blobtrack.cc
+++ b/pix_opencv_blobtrack.cc
@@ -41,7 +41,8 @@ pix_opencv_blobtrack :: pix_opencv_blobtrack() : m_fg_name(FGDetector_Modules[0
m_bt_corr("none"), \
m_FGTrainFrames(6), \
m_monitoring_stage(0), \
- m_tracker(NULL)
+ m_areaThreshold(0.), \
+ m_tracker(NULL)
{
m_param.pBT=NULL;
m_param.pBD=NULL;
@@ -114,35 +115,30 @@ void pix_opencv_blobtrack :: RunBlobTrackingAuto( IplImage* img )
break;
}
- /* Process: */
- m_tracker->Process(imgRGB, pMask);
+ /* Process: */
+ m_tracker->Process(imgRGB, pMask);
//~ t_atom blob_num;
//~ SETFLOAT(&blob_num, m_tracker->GetBlobNum());
//~ outlet_anything(m_dataout, gensym("blobnum"), 1, &blob_num);
- int blob_num=m_tracker->GetBlobNum();
+ int blob_num=m_tracker->GetBlobNum();
int blob_atom_size = 2+blob_num*6;
t_atom* blob_atom = new t_atom[blob_atom_size];
SETFLOAT(&blob_atom[0], blob_num);
SETFLOAT(&blob_atom[1], 6);
- for(int i=0; i<blob_num; i++){
+ for(int i=0; i<blob_num; i++){
CvBlob* blob = m_tracker->GetBlob(i);
- SETFLOAT(&blob_atom[2+i*6], blob->ID);
- SETFLOAT(&blob_atom[3+i*6], blob->x/img->width);
- SETFLOAT(&blob_atom[4+i*6], blob->y/img->height);
- SETFLOAT(&blob_atom[5+i*6], blob->w/img->width);
- SETFLOAT(&blob_atom[6+i*6], blob->h/img->height);
- SETFLOAT(&blob_atom[7+i*6], m_tracker->GetState(blob->ID));
- //~ t_atom *ap=blob_atom+2+6*i;
- //~ SETFLOAT(ap++, blob->ID);
- //~ SETFLOAT(ap++, blob->x/img->width);
- //~ SETFLOAT(ap++, blob->y/img->height);
- //~ SETFLOAT(ap++, blob->w/img->width);
- //~ SETFLOAT(ap++, blob->h/img->height);
- //~ SETFLOAT(ap++, m_tracker->GetState(blob->ID));
+ if ( blob->w*blob->h/(img->width*img->height) > m_areaThreshold ){
+ SETFLOAT(&blob_atom[2+i*6], blob->ID);
+ SETFLOAT(&blob_atom[3+i*6], blob->x/img->width);
+ SETFLOAT(&blob_atom[4+i*6], blob->y/img->height);
+ SETFLOAT(&blob_atom[5+i*6], blob->w/img->width);
+ SETFLOAT(&blob_atom[6+i*6], blob->h/img->height);
+ SETFLOAT(&blob_atom[7+i*6], m_tracker->GetState(blob->ID));
+ }
}
outlet_anything(m_dataout, gensym("cvblob"), blob_atom_size, blob_atom);
@@ -247,6 +243,7 @@ void pix_opencv_blobtrack :: obj_setupCallback(t_class *classPtr)
CPPEXTERN_MSG (classPtr, "setParam", setParamMess);
CPPEXTERN_MSG (classPtr, "getModule", getModuleMess);
CPPEXTERN_MSG (classPtr, "setModule", setModuleMess);
+ CPPEXTERN_MSG1 (classPtr, "areaThreshold", areaThresholdMess, t_float);
}
/////////////////////////////////////////////////////////
@@ -422,6 +419,14 @@ void pix_opencv_blobtrack :: monitorStageMess(int arg)
outlet_anything( m_dataout, gensym("monitorStage"), 1, &data_out);
}
+void pix_opencv_blobtrack :: areaThresholdMess(t_float arg)
+{
+ m_areaThreshold = arg;
+ t_atom data_out;
+ SETFLOAT(&data_out, m_areaThreshold);
+ outlet_anything( m_dataout, gensym("areaThreshold"), 1, &data_out);
+}
+
void pix_opencv_blobtrack :: fgTrainFramesMess(int arg)
{
//~ m_FGTrainFrames = int(arg);