You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
smokeboxidentification/src/CameraControl.h

86 lines
2.3 KiB
C

#ifndef CAMERA_CONTROL_H
#define CAMERA_CONTROL_H
#include <QMap>
#include "HikCamera.h"
#include "commonDefine.h"
struct CameraInfo
{
CameraType cameraType; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
QString cameraLabel; //<2F><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>к<EFBFBD>
QString userDefinedName; //<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD>
QString modelName; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD>ң<EFBFBD>
QString serialNumber; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD>кţ<D0BA><C5A3><EFBFBD><EFBFBD>ң<EFBFBD>
double exposure; //<2F>ع<EFBFBD>ʱ<EFBFBD><CAB1>
int imageWidth; //<2F><><EFBFBD><EFBFBD>
int imageHeight; //<2F>߶<EFBFBD>
int rotationAngle{ 0 }; //<2F><><EFBFBD>D<EFBFBD>Ƕ<EFBFBD>
QString saveImgSuffix = ".bmp" ; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>ʽ
};
struct FileInfo
{
QString strId;
QString suffix;
QString name;
};
struct ImageInfo
{
cv::Mat image;
QString cameraSn;
FileInfo saveImgInfo;
};
class CameraControl : public QObject, public lp_singleton<CameraControl>
{
Q_OBJECT
public:
explicit CameraControl();
~CameraControl();
//static void EnumCameras(QList<CameraInfo>& cameraInfoList);
bool readCameraConfig(QString filePath);
bool initCamera();
bool loadCamera(const QList<CameraInfo>& 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);
Q_SLOT void onCapture(int cameraLocation);
signals:
void sgCapturedImage(const QVector<ImageInfo>& vecImageInfo, int cameraLocation);
private:
Q_SLOT void onOpen();
bool getSaveImgNameInfo(QString serialNumber, FileInfo& fileInfo);
void capture(const QStringList& serialNumberList);
cv::Mat capture(const QString& serialNumber);
void flipImg(const cv::Mat& imgSrc, cv::Mat& imgDst, int rotationAngle);
QMap<int, CameraInfo> m_mapIdCameraInfoTop;
QMap<int, CameraInfo> m_mapIdCameraInfoSide;
QMap<QString, int> m_mapSerialNumberIdTop;
QMap<QString, int> m_mapSerialNumberIdSide;
QVector<Camera*> m_vecPCamera;
QMap<QString, int> m_mapSNIndex;
bool m_bCamerasInit{ false };
eCameraLocation m_eCameraLocation;
QThread* m_pobjThread;
QMutex m_mutex;
};
#endif // !CAMERA_CONTROL_H