Files
HPPA/HPPA/ImagerOperationBase.h
2026-03-03 17:22:03 +08:00

124 lines
4.0 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#pragma once
#include <QObject>
#include <QString>
#include "image2display.h"
#include "fileOperation.h"
#include <string>
#include <opencv2/core/core.hpp>
#include "ImagerOperationBase.h"
#include "utility_tc.h"
class MapLayer; // forward declaration
class ImagerOperationBase :public QObject
{
Q_OBJECT
public:
ImagerOperationBase();
~ImagerOperationBase();
virtual double getWavelengthAtBand(int band) = 0;
virtual int getBandCount() = 0;
virtual int getSampleCount() = 0;
virtual double getFramerate() = 0;
virtual double getIntegrationTime() = 0;
virtual double getGain() = 0;
virtual void setFramerate(const double frames_per_second) = 0;
virtual void setIntegrationTime(const double milliseconds) = 0;
virtual void setGain(const double gain) = 0;
virtual int getStartBand() = 0;
virtual int getEndBand() = 0;
virtual void connectImager(const char* camera_sn = NULL) = 0;
virtual void disconnectImager() = 0;
virtual void imagerStartCollect() = 0;
virtual void imagerStopCollect() = 0;
virtual unsigned short* getFrame(unsigned short* buffer) = 0;
virtual void setSpectraBin(int new_spectral_bin) = 0;
CImage* getRgbImage() const;
cv::Mat* getMatRgbImage() const;
cv::Mat* getMatFocusGrayImage() const;
QImage getQImageFocusGrayImage() const;
bool getRecordControlState() const;
void setRecordControlState(bool RecordControlState);
int getFrameCounter() const;
int getFocusFrameCounter() const;
unsigned short* buffer;//存储采集到的影像的中间变量,下一步写入到硬盘中
void set_buffer();
void setFileName2Save(string FileName);
void setFrameNumber(int FrameNumber);
void setFocusControlState(bool FocusControlState);
int GetFrameSize(int& iWidth, int& iHeight);
protected:
CImage* m_RgbImage;//显示的rgb图像
bool m_bRecordControlState;//采集状态;可用于执行停止采集操作
int m_iFrameCounter;//记录采集的帧数
int m_iFocusFrameCounter;//记录调焦时采集的帧数
int m_FrameSize;//表示一帧代表有多少个数值m_FrameSize = m_imager.get_band_count()*m_imager.get_sample_count();
int m_iFrameNumber;//需要采集的总帧数
//以下两个参数用于给保存的影像文件命名
string m_FileName2Save;//保存的影像文件名
string m_FileName2Save2;
int m_FileSavedCounter;//保存了几个影像文件
bool m_HasDark;//当采集了暗电流之后设置为true
bool m_HasWhite;//当采集了白板之后设置为true
unsigned short* dark;//存储暗电流
unsigned short* white;//存储白板
bool m_bFocusControlState;//控制调焦结束
virtual void WriteHdr();
unsigned short GetMaxValue(unsigned short* dark, int number);
private:
int m_iFocusFramesNumber;
double calcFocusIndexSobelPrivate(void* pvData);
public slots:
virtual void connect_imager(int frameNumber);//连接相机、开辟缓存
virtual double auto_exposure();
virtual void focus();
virtual void start_record();
void stop_record();
virtual void record_dark();
virtual void record_white();
void getFocusIndexSobel();
signals:
void PlotSignal(int, int, QString);//绘制影像信号,第一个参数:第几个影像;第二个参数:采集到的帧数,-1代表此次采集的最后一次绘制
void RecordFinishedSignal_WhenFrameNumberMeet();//采集完成信号需要采集的总帧数m_iFrameNumber采集完成
void RecordFinishedSignal_WhenFrameNumberNotMeet();//采集完成信号需要采集的总帧数m_iFrameNumber没有采集完成中途停止采集
void SpectralSignal(int);//发射1代表正在调焦绘制光谱发射0表示调焦完成
void RecordWhiteFinishSignal();
void RecordDarlFinishSignal();
void FocusIndexSobelSignal(double);
void testImagerStatus();//表示可以测试相机连接状态:是否连接,并反映到界面上
// 新增:当一组影像文件(.bil/.hdr写入完成后发出会从采集线程发出Qt 会做 queued connection
void ImageFileSaved(const QString& path, int fileIndex);
// 修改:不再直接发送 MapLayer*而是发送文件名与文件路径UI 层负责创建 MapLayer 对象并管理生命周期
void LayerFileCreated(const QString& baseName, const QString& filePath, int fileIndex);
};