moBlobTrackerModule::moBlobTrackerModule() : moImageFilterModule() { MODULE_INIT(); // Minimum and maximum sizes for blobs. Blobs smaller or larger // will be discarded. this->properties["min_size"] = new moProperty(2.0); this->properties["max_size"] = new moProperty(25.0); this->output_data = new moDataStream("GenericBlob"); this->output_count = 2; this->output_infos[1] = new moDataStreamInfo("data", "GenericBlob", "Data stream with touch info"); this->next_id = 1; this->new_blobs = new CvBlobSeq(); this->old_blobs = new CvBlobSeq(); memset(&this->param, 0, sizeof(CvBlobTrackerAutoParam1)); this->param.FGTrainFrames = 0; this->param.pFG = new moFGDetector();//cvCreateFGDetectorBase(CV_BG_MODEL_FGD, NULL); //new moFGDetector(); this->param.pBT = cvCreateBlobTrackerCC(); //vCreateBlobTrackerCCMSPF(); //this->param.pBTPP = cvCreateModuleBlobTrackPostProcKalman(); this->tracker = cvCreateBlobTrackerAuto1(&this->param); }
int main223(int argc, char* argv[]) { /* Main function: */ CvCapture* pCap = NULL; CvBlobTrackerAutoParam1 param = { 0, 0, 0, 0, 0, 0, 0, 0 }; CvBlobTrackerAuto* pTracker = NULL; //float scale = 1; const char* scale_name = NULL; char* yml_name = NULL; char** yml_video_names = NULL; int yml_video_num = 0; char* avi_name = NULL; const char* fg_name = NULL; char* fgavi_name = NULL; char* btavi_name = NULL; const char* bd_name = NULL; const char* bt_name = NULL; const char* btgen_name = NULL; const char* btpp_name = NULL; const char* bta_name = NULL; char* bta_data_name = NULL; char* track_name = NULL; //char* comment_name = NULL; char* FGTrainFrames = NULL; char* log_name = NULL; char* savestate_name = NULL; char* loadstate_name = NULL; const char* bt_corr = NULL; avi_name = "RGB.avi"; btavi_name = ""; /* Create source video: */ if (avi_name) pCap = cvCaptureFromFile(avi_name);//打开视频 //pCap = cvCreateCameraCapture(-1);//从摄像头中读取数据。 if (pCap == NULL) { printf("Can't open %s file\n", avi_name); return -1; } //初始化pTracker /* Run pipeline: //开始流水线。流水线退出,意味着程序结束, 这里出错了*/ //RunBlobTrackingAuto(pCap, pTracker, fgavi_name, btavi_name); pTracker = cvCreateBlobTrackerAuto1(); //pTracker->m_Wnd = 1; RunBlobTrackingAuto2323(pCap, pTracker, fgavi_name, btavi_name); if (pCap) cvReleaseCapture(&pCap); return 0; } /* main() */
// blobtrack_sample.cpp void FindObjectMain::process_blob() { if(!blob_initialized) { blob_initialized = 1; blob_param.FGTrainFrames = 5; /* Create FG Detection module: */ blob_param.pFG = cvCreateFGDetectorBase(CV_BG_MODEL_FGD, NULL); /* Create Blob Entrance Detection module: */ blob_param.pBD = cvCreateBlobDetectorCC(); /* Create blob tracker module: */ blob_param.pBT = cvCreateBlobTrackerCCMSPF(); /* Create whole pipline: */ blob_pTracker = cvCreateBlobTrackerAuto1(&blob_param); } /* Process: */ IplImage* pMask = NULL; // Create aligned, RGB images if(!scene_image) { scene_image = cvCreateImage( cvSize(scene_image_w, scene_image_h), 8, 3); } // Temporary row pointers unsigned char **scene_rows = new unsigned char*[scene_image_h]; for(int i = 0; i < scene_image_h; i++) { scene_rows[i] = (unsigned char*)(scene_image->imageData + i * scene_image_w * 3); } BC_CModels::transfer(scene_rows, get_input(scene_layer)->get_rows(), 0, 0, 0, 0, 0, 0, scene_x1, scene_y1, scene_w, scene_h, 0, 0, scene_w, scene_h, get_input(scene_layer)->get_color_model(), BC_RGB888, 0, 0, 0); delete [] scene_rows; blob_pTracker->Process(scene_image, pMask); printf("FindObjectMain::process_blob %d %ld %d\n", __LINE__, get_source_position(), blob_pTracker->GetBlobNum()); #if 0 if(blob_pTracker->GetFGMask()) { IplImage* pFG = blob_pTracker->GetFGMask(); printf("FindObjectMain::process_blob %d %ld\n", __LINE__, get_source_position()); // Temporary row pointers unsigned char **mask_rows = new unsigned char*[scene_image_h]; for(int i = 0; i < scene_image_h; i++) { mask_rows[i] = (unsigned char*)(pFG->imageData + i * scene_image_w); } for(int i = 0; i < scene_image_h; i++) { switch(get_input(scene_layer)->get_color_model()) { case BC_RGB888: APPLY_MASK(unsigned char, 0xff, 3, 0) break; case BC_RGB_FLOAT: APPLY_MASK(float, 1.0, 3, 0) break; case BC_YUV888: APPLY_MASK(unsigned char, 0xff, 3, 1) break; case BC_RGBA8888: APPLY_MASK(unsigned char, 0xff, 4, 0) break; case BC_RGBA_FLOAT: APPLY_MASK(float, 1.0, 4, 0) break; case BC_YUVA8888: APPLY_MASK(unsigned char, 0xff, 4, 1) break; } } delete [] mask_rows; }
//blob tracker auto CvBlobTrackerAuto* CvCreateBlobTrackerAuto1(CvBlobTrackerAutoParam1* param) { return cvCreateBlobTrackerAuto1(param); }