# SelfShow **Repository Path**: wangzhankun/SelfShow ## Basic Information - **Project Name**: SelfShow - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2019-12-26 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 视觉说明 由于该项目是保密项目,这里仅展示main函数和开发流程图。这是一个集体项目,我在其中担任组长。 该项目涉及图像处理、工业相机驱动、串口通信、socket通信、多线程处理等内容。 ```c++ #include "config.h" #include "header.h" #include "SerialPort.hpp" #include "DxImageProc.h" #include "GxIAPI.h" #include "GxCamera.h" #include "OrdinaryCamera.h" #include "VirtualCamera.h" #include "PictureManipulator.h" #include "Controller.h" #include "InfantryPictureManipulator.h" #include "SentryPictureManipulator.h" #include "HeroPictureManipulator.h" #pragma comment(linker, "/STACK:102400000,102400000") pthread_attr_t thread_attr; void *startReceiveImageThread(void *ctrl); void *startManipulatePictureThread(void *ctrl); void *sendMSGThread(void *ctrl); void *mainThreadOne(void *argc); int terminateProgram(); int main() { //设置线程参数 pthread_attr_init(&thread_attr); pthread_attr_setdetachstate(&thread_attr, PTHREAD_CREATE_DETACHED); pthread_attr_setstacksize(&thread_attr, PTHREAD_STACK_MIN * 512); pthread_t t; pthread_create(&t, &thread_attr, mainThreadOne, NULL); char tmp; cin >> tmp; //阻塞 cout << "GAME OVER!" << endl; pthread_exit(NULL); terminateProgram(); } void *mainThreadOne(void *argc) { #ifdef SENTRY SentryPictureManipulator pm; #endif #ifdef INFANTRY InfantryPictureManipulator pm; #endif #ifdef Hero HeroPictureManipulator pm; #endif GxCamera cam1("1"); // Controller controller(&pm,&cam2); // Controller controller(&pm, &cam1, &cam2); Controller controller(&pm, &cam1); // controller.config("/dev/ttyUSB0", "./", 120, 1280, 1024, 6, 8, 1500, 200); controller.config("/tty/USB0", "./", 120, 640, 480, 6, 8, 1200, 200); pthread_t ri_th, mp_th; int err = pthread_create(&mp_th, &thread_attr, startManipulatePictureThread, &controller); if (err != 0) { cout << "main:: startManipulatePictureThread failed" << endl; printf("error message :%s\n", strerror(errno)); } // 启动接收线程 err = pthread_create(&ri_th, &thread_attr, startReceiveImageThread, &controller); if (err != 0) { cout << "main:: startReceiveImageThread failed" << endl; printf("error message :%s\n", strerror(errno)); } //启动发消息线程 err = pthread_create(&ri_th, &thread_attr, sendMSGThread, &controller); if (err != 0) { cout << "main:: sendMSGThread failed" << endl; printf("error message :%s\n", strerror(errno)); } char tmp; cin >> tmp; //用于阻塞 } void *startReceiveImageThread(void *ctrl) { pthread_detach(pthread_self()); Controller *controller = (Controller *)ctrl; while (true) { controller->getImageFromCamera(); } } void *startManipulatePictureThread(void *ctrl) { pthread_detach(pthread_self()); Controller *controller = (Controller *)ctrl; while (true) { controller->mainpulatePicture(); } } void *sendMSGThread(void *ctrl) { pthread_detach(pthread_self()); Controller *controller = (Controller *)ctrl; while (true) { controller->sendMSG(); } } int terminateProgram() { // cam1.close(); // cam2.close(); return 0; } ``` ![](0.png) ![](1.png) ![](2.png) ![](3.png)