1. 最大曝光时间乘以0.95,目的:避免曝光时间超过最大,而造成帧率降低;

2. 去掉多余的std::out,避免采集log过于杂乱;
3. 通过OpenCV从高光谱影像中提取rgb影像;
4. 在log中记录开始采集时间和停止采集时间;
5. 添加手动设置曝光时间的功能:127.0.0.1 7,2;
6. 头文件中写入仪器序列号;
This commit is contained in:
tangchao0503
2023-03-19 16:44:12 +08:00
parent e96953b54a
commit 447a1aafb1
11 changed files with 440 additions and 34 deletions

View File

@ -9,6 +9,7 @@
#include <iomanip>
#include <cstdlib>
#include <libconfig.h++>
#include <string>
#include <QFileInfo>
#include <QString>
@ -32,6 +33,7 @@ public:
bool getEffectiveWindow(int &width, int &offsetx, int &height, int &offsety);
bool getEffectiveWindowRoi(int &width, int &offsetx);
bool getGainOffset(float &gain, float &offset);
bool getSN(QString &SN);
bool createConfigFile();
bool updateConfigFile();

75
Header_Files/rgbImage.h Normal file
View File

@ -0,0 +1,75 @@
//
// Created by tangchao on 2022/12/24.
//
#ifndef XIMEAAIRBORNESYSTEM_RGBIMAGE_H
#define XIMEAAIRBORNESYSTEM_RGBIMAGE_H
#include <iostream>
#include <string>
#include <QObject>
#include <QImage>
#include <opencv2/opencv.hpp>//包含了所有东西,编译很慢
using namespace cv;
class rgbImage :public QObject
{
Q_OBJECT
public:
rgbImage(QWidget* pParent = NULL);
~rgbImage();
void SetRgbImageWidthAndHeight(int BandCount, int Sample, int FrameNumber);
void FillRgbImage(unsigned short *datacube);
void FillFocusGrayImage(unsigned short *datacube);
void FillFocusGrayQImage(unsigned short * datacube);
void FillOnerowofRgbImage(cv::Mat * matRgbImage, int rowNumber, unsigned short *datacube);
QImage *m_QRgbImage;
cv::Mat *m_matRgbImage;
QImage *m_qimageFocusGrayImage;
cv::Mat *m_matFocusGrayImage;//用于调焦时,显示一帧的灰度图
//cv::Mat m_matFocusGrayImage;//用于调焦时,显示一帧的灰度图
CvVideoWriter *m_frame_writer;
VideoWriter m_VideoWriter;
// VideoWriter m_video("appsrc ! autovideoconvert ! filesink location=/media/nvme/delete/live.avi", CV_FOURCC('M', 'J', 'P', 'G'), 25.0, Size(640, 480));
// VideoWriter video("test.avi", CV_FOURCC('M', 'J', 'P', 'G'), 25.0, Size(640, 480));//
//控制该填充rgb图像第几帧数据
//以下两种情况需要重置为01调用函数SetRgbImageWidthAndHeight2每次开始填充数据前
int m_iFrameCounter;
int m_iFramerate;//
protected:
private:
int m_iSampleNumber;//
int m_iBandNumber;//
int m_iFrameNumber;//
public slots:
signals :
void sendstr(QString str);
void sendstr1(QString str);
void refreslabelimg(QImage* img1);
};
#endif //XIMEAAIRBORNESYSTEM_RGBIMAGE_H

View File

@ -2,12 +2,15 @@
#define UTILITY_TC_H
#include <iostream>
#include <ctime>
#include <QString>
#include <QDebug>
QString getFileNameBaseOnTime();
QString formatTimeStr(char * format);
//https://blog.csdn.net/MoreWindows/article/details/6657829
void bubbleSort(unsigned short * a, int n);

View File

@ -41,6 +41,8 @@
#include <queue>
#include <QMutex>
#include "rgbImage.h"
//#ifdef WIN32
@ -96,7 +98,7 @@ Q_OBJECT
public:
WriteData2Disk();
void setParm(queue<DataBuffer *> * q, QString baseFileName, int frameSizeInByte, MemoryPool<DataBuffer> * pool);
void setParm(queue<DataBuffer *> * q, QString baseFileName, int frameSizeInByte, MemoryPool<DataBuffer> * pool, rgbImage * rgbImage);
private:
queue<DataBuffer *> * m_q;
@ -104,6 +106,8 @@ private:
int m_iFrameSizeInByte;
MemoryPool<DataBuffer> * m_pool;
rgbImage * m_rgbImage;
public slots:
void write2Disk();
@ -116,10 +120,12 @@ class XimeaImager : public QObject
public:
XimeaImager();
~XimeaImager();
void setFramerate(double framerate);
double getFramerate();
double setExposureTime(float exposureTime);
double wrapSetExposureTime(float exposureTime_in_us);
double getExposureTime();
double autoExposure();
void setGain(double gain);
@ -159,6 +165,7 @@ private:
bool m_bRecordControl;
int m_iFrameCounter;
int m_iFrameSizeInByte;
rgbImage * m_rgbImage;
void writeHdr();
void processXiApiErrorCodes(int xiApiErrorCodes);