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

@ -30,6 +30,13 @@ XimeaImager::XimeaImager()
m_pool = new MemoryPool<DataBuffer>;
q = new queue<DataBuffer *>;
m_rgbImage = new rgbImage();
}
XimeaImager::~XimeaImager()
{
}
void XimeaImager::openImger()
@ -70,6 +77,9 @@ void XimeaImager::openImger()
if (ret)
{
m_imager.setEffectiveWindow(offsetx, width, offsety, height);
m_rgbImage->SetRgbImageWidthAndHeight(height, width, 20);
std::cout<<"height"<< height <<std::endl;
std::cout<<"width"<< width <<std::endl;
}
// int width_roi = 0, offsetx_roi = 0;
@ -206,6 +216,14 @@ double XimeaImager::setExposureTime(float exposureTime_in_us)
}
}
double XimeaImager::wrapSetExposureTime(float exposureTime_in_us)
{
setExposureTime(exposureTime_in_us);
m_iImagerState=103;
emit ximeaImageStatus(m_iImagerState);
}
double XimeaImager::autoExposure()
{
double exposureTime;
@ -216,7 +234,7 @@ double XimeaImager::autoExposure()
float suitableMaxValue=4095 * 0.8;
double framerate = m_imager.get_framerate();
double maxExposureTime = 1/framerate*1000000;
double maxExposureTime = 1/framerate*1000000*0.95;//0.95目的:避免曝光时间超过最大,而造成帧率降低
exposureTime=setExposureTime(maxExposureTime);
bool bIsAutoExposureOk=false;
@ -447,7 +465,10 @@ void XimeaImager::startRecord(double TimeDifferenceBetweensOSAndSbg,QString base
m_iImagerState=104;
emit ximeaImageStatus(m_iImagerState);
printf("开始采集!\n");
char * timeFormat="%Y%m%d_%H%M%S";
QString timeStr = formatTimeStr(timeFormat);
printf("开始采集:%s!\n", timeStr.toStdString().c_str());
m_iFrameCounter=0;
m_bRecordControl=true;
@ -456,11 +477,12 @@ void XimeaImager::startRecord(double TimeDifferenceBetweensOSAndSbg,QString base
QString timesFileName=m_baseFileName+".times";
FILE *hHimesFile=fopen(timesFileName.toStdString().c_str(),"w+");
std::cout << "曝光时间为:" << getExposureTime()/1000 << "ms" <<std::endl;
using namespace std;
// ofstream timesFileHandle(timesFileName.toStdString()+"_ofstream");
writeData2Disk->setParm(q,m_baseFileName,m_iFrameSizeInByte, m_pool);
writeData2Disk->setParm(q,m_baseFileName,m_iFrameSizeInByte, m_pool, m_rgbImage);
emit startWriteDiskSignal();
m_imager.start();
@ -528,7 +550,8 @@ void XimeaImager::startRecord(double TimeDifferenceBetweensOSAndSbg,QString base
fclose(hHimesFile);
// timesFileHandle.close();
printf("Stopping acquisition...\n");
timeStr = formatTimeStr(timeFormat);
printf("停止采集:%s!\n", timeStr.toStdString().c_str());
writeHdr();
@ -553,6 +576,11 @@ void XimeaImager::writeHdr()
ofstream hdrFileHandle(hdrPath.toStdString());
hdrFileHandle << "ENVI\n";
QString SN;
m_configfile.getSN(SN);
hdrFileHandle << "SN = " << SN.toStdString() << "\n";
hdrFileHandle << "interleave = bil\n";
hdrFileHandle << "byte order = 0\n";
hdrFileHandle << "data type = 2\n";
@ -798,19 +826,27 @@ void WriteData2Disk::write2Disk()
m_q->pop();
r_qtx.unlock();
//构造rgb图像用于推流到m300遥控器
m_rgbImage->FillRgbImage(dataBuffer);
// std::cout<<"WriteData2Disk::write2Disk-----------------------正在写磁盘!" << m_pool->max_size() <<std::endl;//
fwrite(dataBuffer,1,m_iFrameSizeInByte, hFile);
frameCounter++;
}
m_rgbImage->m_VideoWriter.release();
std::cout<<"WriteData2Disk::write2Disk-----------------------写磁盘线程将退出,内存池可达到的最多元素数:" << m_pool->max_size() <<std::endl;
std::cout<<"WriteData2Disk::write2Disk-----------------------写磁盘线程将退出,共写帧数:" << frameCounter <<std::endl;
}
void WriteData2Disk::setParm(queue<DataBuffer *> * q, QString baseFileName, int frameSizeInByte, MemoryPool<DataBuffer> * pool)
void WriteData2Disk::setParm(queue<DataBuffer *> * q, QString baseFileName, int frameSizeInByte, MemoryPool<DataBuffer> * pool, rgbImage * rgbImage)
{
m_q = q;
m_QbaseFileName = baseFileName;
m_iFrameSizeInByte = frameSizeInByte;
m_pool = pool;
m_rgbImage = rgbImage;
}