#ifndef CAMERA_CONTROL_H #define CAMERA_CONTROL_H #include #include "HikCamera.h" #include "LXCamera.h" #include "commonDefine.h" struct CameraInfo { CameraType cameraType; //相机类型 QString cameraLabel; //显示的序列号 QString userDefinedName; //用户设置的名字 QString modelName; //相机设备名称(厂家) QString serialNumber; //相机设备序列号(厂家) double exposure; //曝光时间 int imageWidth; //宽度 int imageHeight; //高度 int rotationAngle{ 0 }; //旋轉角度 int location = 0; //相机安装位置(对应货物在堆垛机的位置), 1左2右, 0保留为之前规则 QString calibFile = ""; //标定文件地址 QString saveImgSuffix = ".bmp" ; //保存的图像格式 }; struct FileInfo { QString strId; QString suffix; QString name; }; struct ImageInfo { bool bIs2D; cv::Mat image; cv::Mat image3D; ILImagePtr imageOrigin; ILImagePtr imageFixed; QString cameraSn; FileInfo saveImgInfo; }; class CameraControl : public QObject, public lp_singleton { Q_OBJECT public: explicit CameraControl(); ~CameraControl(); //static void EnumCameras(QList& cameraInfoList); bool readCameraConfig(QString filePath); bool initCamera(); bool loadCamera(const QList& cameraInfoList); bool openCamera(const QStringList& serialNumberList); bool closeCamera(const QStringList& serialNumberList); bool startCamera(const QStringList& serialNumberList); bool stopCamera(const QStringList& serialNumberList); bool setSoftwareTrigger(const QStringList& serialNumberList); bool openCamera(const QString& serialNumber); bool closeCamera(const QString& serialNumber); bool startCamera(const QString& serialNumber); bool stopCamera(const QString& serialNumber); bool setSoftwareTrigger(const QString& serialNumber); bool setExposure(const QString& serialNumber,int exposure); int getDeviceId(const QString& serialNumber); Q_SLOT void onCapture(int cameraLocation,int location, int floor); signals: void sgCapturedImage(const QVector& vecImageInfo, int cameraLocation); private: Q_SLOT void onOpen(); bool getSaveImgNameInfo(QString serialNumber, FileInfo& fileInfo); void capture(const QStringList& serialNumberList, int location, int floor); bool capture(const QString& serialNumber, cv::Mat& img, cv::Mat& img3D,int exposure); void flipImg(const cv::Mat& imgSrc, cv::Mat& imgDst, int rotationAngle); QMap m_mapIdCameraInfoTop; QMap exposureRowMap; QMap m_mapIdCameraInfoSide; QMap m_mapSerialNumberIdTop; QMap m_mapSerialNumberIdSide; // QString:相机SN码,int:相机ID QMap m_cameraStockLocation; // QString:相机SN码, int:相机相对货物的Location QVector m_vecPCamera; QMap m_mapSNIndex; bool m_bCamerasInit{ false }; eCameraLocation m_eCameraLocation; QThread* m_pobjThread; QMutex m_mutex; ILCalibNPointsPtr m_calib1, m_calib2; }; #endif // !CAMERA_CONTROL_H