|
|
#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
|