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:
@ -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;
|
||||
}
|
||||
|
Reference in New Issue
Block a user