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

99 lines
2.9 KiB
C++

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#ifndef CAMERA_CONTROL_H
#define CAMERA_CONTROL_H
#include <QMap>
#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<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);
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<ImageInfo>& 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<int, CameraInfo> m_mapIdCameraInfoTop;
QMap<int, int> exposureRowMap;
QMap<int, CameraInfo> m_mapIdCameraInfoSide;
QMap<QString, int> m_mapSerialNumberIdTop;
QMap<QString, int> m_mapSerialNumberIdSide; // QString:相机SN码int:相机ID
QMap<QString, int> m_cameraStockLocation; // QString:相机SN码, int:相机相对货物的Location
QVector<Camera*> m_vecPCamera;
QMap<QString, int> m_mapSNIndex;
bool m_bCamerasInit{ false };
eCameraLocation m_eCameraLocation;
QThread* m_pobjThread;
QMutex m_mutex;
ILCalibNPointsPtr m_calib1, m_calib2;
};
#endif // !CAMERA_CONTROL_H