#include #include #include #include #ifdef _MSC_VER #include #endif #include "highgui.h" #include "cv.h" #include #include #include "left_over_det.h" #include #include #include "RegionAssist.h" using namespace std; using namespace cv; void imag_ana_3channels(); void algorthim_thread1(); int main() { //int test_count = 10; //while (test_count--) //{ // printf("begin test_count: %d\n", test_count); // boost::thread thrd1(boost::bind(algorthim_thread1)); // boost::thread thrd2(boost::bind(algorthim_thread1)); // boost::thread thrd3(boost::bind(algorthim_thread1)); // boost::thread thrd4(boost::bind(algorthim_thread1)); // thrd1.join(); // thrd2.join(); // thrd3.join(); // thrd4.join(); // printf("finish\n"); //} imag_ana_3channels(); system("pause"); } #include #include void algorthim_thread1() { void *tools = nullptr; rs_param param; param.frame_num = 10; if (rs_init(&tools, param) != 0) cout << "hp_init ailed!" << endl; IplImage * src = cvLoadImage("./test.jpg"); sy_img img; img.set_data(src->width, src->height, 3, (unsigned char*)src->imageData); rs_result res; rs_process(tools, img, &res); rs_release(&tools); printf("thread finish\n"); } void imag_ana_3channels() { //AlarmInfo 1进入禁区 2离开禁区 3单向越界 4双向越界 5徘徊 6丢包 void *tools = nullptr; rs_param param; param.frame_num = 30; param.long_side = 1920; param.short_side = 1080; if (rs_init(&tools, param) != 0) cout << "hp_init ailed!" << endl; char imgpath[260]; CvCapture* video1 = cvCaptureFromFile("D:\\ruijinVideo\\192.168.1.10_01_2020072911472348.mp4"); // 用opencv函数读取视频的一帧 IplImage * src = cvQueryFrame(video1); int long_side = (src->width > src->height ? src->width : src->height); int short_side = (src->width <= src->height ? src->width : src->height); double scale_l = (double)long_side / (double)param.long_side; double scale_s = (double)short_side / (double)param.short_side; double scale = (scale_l > scale_s ? scale_l : scale_s); scale = 1.0; int width = src->width / scale; int height = src->height / scale; //width = 1912; IplImage * srcscale = cvCreateImage(cvSize(width, height), 8, 3); //用于缩放 当前先不缩放 CvVideoWriter *writer = cvCreateVideoWriter("result_2019_9_23.avi", CV_FOURCC('M', 'J', 'P', 'G'), 25, cvSize(srcscale->width, srcscale->height)); /************************************************/ //int long_side = (srcscale->width > srcscale->height ? srcscale->width : srcscale->height); //int short_side = (srcscale->width <= srcscale->height ? srcscale->width : srcscale->height); //double scale_l = (double)long_side / (double)param.long_side; //double scale_s = (double)short_side / (double)param.short_side; //double scale = (scale_l > scale_s ? scale_l : scale_s); //scale = 1.6; //int width = srcscale->width / scale; //int height = srcscale->height / scale; //CvVideoWriter *writer = cvCreateVideoWriter("result_2019_9_23.avi", CV_FOURCC('M', 'J', 'P', 'G'), 25, cvSize(width, height)); //IplImage * srcscale1 = cvCreateImage(cvSize(width, height), 8, 3); //用于缩放 当前先不缩放 /***********************************************************************/ cvResize(src, srcscale); while (src) { src = cvQueryFrame(video1); if (!src) break; cvResize(src, srcscale); sy_img syimg; syimg.set_data(srcscale->width, srcscale->height, srcscale->nChannels, (unsigned char *)srcscale->imageData); rs_result result{}; rs_process(tools, syimg, &result); if (result.del_count != 0) { for (int i = 0; i < result.del_count; ++i) { printf("delete object id = %d\n", result.del_infos[i].unique_id); } } /********************************************/ //cvResize(src, srcscale1); //ExternalRectangle((unsigned char*)(srcscale1->imageData), srcscale1->width, srcscale1->height, result.obj_infos, result.obj_count, srcscale1->widthStep, 1); /*****************************************************/ ExternalRectangle((unsigned char*)(srcscale->imageData), srcscale->width, srcscale->height, result.obj_infos, result.obj_count, srcscale->widthStep, 1); CvFont font; cvInitFont(&font, CV_FONT_HERSHEY_SIMPLEX, 0.5, 0.5, 0, 2, 8); //cvPutText(srcscale, "1Hello World !", cvPoint(80, 40), &font, cvScalar(255, 0, 0, 1)); std::string str; std::string alarm; for (int i = 0; i < result.obj_count; i++) { for (int j = 0; j < 1; j++) { if (result.obj_infos[i].pb_alarm_type[j]) { switch (result.obj_infos[i].pb_alarm_type[j]) { case 1: printf("obj %d: 进入禁区\n", result.obj_infos[i].unique_id); str = " 有目标闯入禁区 "; break; case 2: printf("obj %d: 离开禁区\n", result.obj_infos[i].unique_id); str = " 有目标离开禁区 "; break; case 3: printf("obj %d: 单向越界\n", result.obj_infos[i].unique_id); str = " 有目标单向越界 "; break; case 4: printf("obj %d: 双向越界\n", result.obj_infos[i].unique_id); str = " 有目标越界 "; break; case 5: printf("obj %d: 徘徊\n", result.obj_infos[i].unique_id); str = " 有目标在禁区内徘徊 "; break; case 6: printf("obj %d: 丢包\n", result.obj_infos[i].unique_id); str = " 丢包 "; alarm += std::to_string(result.obj_infos[i].unique_id); alarm += " Packet loss"; cvPutText(srcscale, alarm.c_str(), cvPoint(40, 40), &font, cvScalar(255, 0, 0, 1)); break; default: break; } } else { ; } } } cvWriteFrame(writer, srcscale); // 图像显示 cvShowImage("1channels", srcscale); cvWaitKey(1); } rs_release(&tools); //cvReleaseImage(&srcscale1); //cvReleaseImage(&gray); cvReleaseCapture(&video1); cvReleaseImage(&srcscale); }