配置页面2
This commit is contained in:
@ -1,4 +1,4 @@
|
||||
#include "ImagerOperationBase.h"
|
||||
#include "ImagerOperationBase.h"
|
||||
|
||||
ImagerOperationBase::ImagerOperationBase()
|
||||
{
|
||||
@ -44,11 +44,11 @@ void ImagerOperationBase::connect_imager(int frameNumber)
|
||||
|
||||
double ImagerOperationBase::auto_exposure()
|
||||
{
|
||||
//<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ع<EFBFBD>ʱ<EFBFBD><EFBFBD>Ϊ<EFBFBD>ڵ<EFBFBD>ǰ֡<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
double x = 1 / getFramerate() * 1000;//<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ع<EFBFBD>ʱ<EFBFBD><EFBFBD>
|
||||
//第一步:先设置曝光时间为在当前帧率情况下最大
|
||||
double x = 1 / getFramerate() * 1000;//获取最大毫秒曝光时间
|
||||
setIntegrationTime(x);
|
||||
|
||||
//<EFBFBD>ڶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD>ѭ<EFBFBD><EFBFBD>Ѱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ع<EFBFBD>ʱ<EFBFBD><EFBFBD>
|
||||
//第二步:通过循环寻找最佳曝光时间
|
||||
imagerStartCollect();
|
||||
|
||||
while (true)
|
||||
@ -57,7 +57,7 @@ double ImagerOperationBase::auto_exposure()
|
||||
if (GetMaxValue(buffer, m_FrameSize) >= 4094)
|
||||
{
|
||||
setIntegrationTime(getIntegrationTime() * 0.95);
|
||||
std::cout << "<EFBFBD>Զ<EFBFBD><EFBFBD>ع<EFBFBD>-----------" << std::endl;
|
||||
std::cout << "自动曝光-----------" << std::endl;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -69,7 +69,7 @@ double ImagerOperationBase::auto_exposure()
|
||||
|
||||
emit autoExposureSignal();
|
||||
|
||||
//std::cout << "<EFBFBD>Զ<EFBFBD><EFBFBD>ع⣺" << getIntegrationTime() << std::endl;
|
||||
//std::cout << "自动曝光:" << getIntegrationTime() << std::endl;
|
||||
|
||||
return getIntegrationTime();
|
||||
}
|
||||
@ -79,7 +79,7 @@ void ImagerOperationBase::focus()
|
||||
m_iFocusFramesNumber = 0;
|
||||
|
||||
m_iFocusFrameCounter = 1;
|
||||
//std::cout << "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>-----------" << std::endl;
|
||||
//std::cout << "调焦-----------" << std::endl;
|
||||
|
||||
double tmpFrmerate = getFramerate();
|
||||
double tmpIntegrationTime = getIntegrationTime();
|
||||
@ -87,7 +87,7 @@ void ImagerOperationBase::focus()
|
||||
|
||||
setFramerate(5);
|
||||
auto_exposure();
|
||||
std::cout << "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><EFBFBD>ع<EFBFBD>ʱ<EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>" << getIntegrationTime() << std::endl;
|
||||
std::cout << "调焦获得的曝光时间为:" << getIntegrationTime() << std::endl;
|
||||
|
||||
int iWidth, iHeight;
|
||||
GetFrameSize(iWidth, iHeight);
|
||||
@ -99,7 +99,7 @@ void ImagerOperationBase::focus()
|
||||
m_bFocusControlState = true;
|
||||
while (m_bFocusControlState)
|
||||
{
|
||||
////<EFBFBD><EFBFBD>֡ƽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
////多帧平均,减弱单帧跳动
|
||||
//memset((void*)buffer, 0, m_FrameSize * sizeof(unsigned short));
|
||||
//int fn = 5;
|
||||
//for (int i = 0; i < fn; i++)
|
||||
@ -123,7 +123,7 @@ void ImagerOperationBase::focus()
|
||||
|
||||
double focusIndex = calcFocusIndexSobelPrivate(buffer);
|
||||
emit FocusIndexSobelSignal(focusIndex);
|
||||
std::cout << "focusIndex<EFBFBD><EFBFBD>" << focusIndex << std::endl;
|
||||
std::cout << "focusIndex:" << focusIndex << std::endl;
|
||||
|
||||
emit SpectralSignal(1);
|
||||
|
||||
@ -140,7 +140,7 @@ void ImagerOperationBase::focus()
|
||||
|
||||
void ImagerOperationBase::record_dark()
|
||||
{
|
||||
std::cout << "<EFBFBD>ɼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" << std::endl;
|
||||
std::cout << "采集暗电流!!!!!!!!!" << std::endl;
|
||||
imagerStartCollect();
|
||||
|
||||
unsigned int* dark_tmp = new unsigned int[m_FrameSize];
|
||||
@ -172,7 +172,7 @@ void ImagerOperationBase::record_dark()
|
||||
|
||||
void ImagerOperationBase::record_white()
|
||||
{
|
||||
std::cout << "<EFBFBD>ɼ<EFBFBD><EFBFBD>װ壡<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" << std::endl;
|
||||
std::cout << "采集白板!!!!!!!!!" << std::endl;
|
||||
imagerStartCollect();
|
||||
|
||||
unsigned int* white_tmp = new unsigned int[m_FrameSize];
|
||||
@ -197,7 +197,7 @@ void ImagerOperationBase::record_white()
|
||||
|
||||
imagerStopCollect();
|
||||
|
||||
//<EFBFBD>װ<EFBFBD><EFBFBD>۰<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//白板扣暗电流
|
||||
if (m_HasDark)
|
||||
{
|
||||
for (size_t i = 0; i < m_FrameSize; i++)
|
||||
@ -225,17 +225,17 @@ void ImagerOperationBase::start_record()
|
||||
//std::cout << "------------------------------------------------------" << std::endl;
|
||||
|
||||
m_iFrameCounter = 0;
|
||||
m_RgbImage->m_iFrameCounter = 0;//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>rgbͼ<EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>0<EFBFBD><EFBFBD>
|
||||
m_RgbImage->m_iFrameCounter = 0;//设置填充rgb图像的第0行
|
||||
m_bRecordControlState = true;
|
||||
|
||||
//<EFBFBD>ж<EFBFBD><EFBFBD>ڴ<EFBFBD>buffer<EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//判断内存buffer是否正常分配
|
||||
if (buffer == 0)
|
||||
{
|
||||
std::cerr << "Error: memory could not be allocated for datacube";
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
// <EFBFBD>ڿ<EFBFBD>ʼ<EFBFBD>ɼ<EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD>UI <20><><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD> MapLayer <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// 在开始采集时仅发出文件信息,UI 层自行创建 MapLayer 并管理生命周期
|
||||
// prepare file name that will be used for saving
|
||||
m_FileName2Save2 = m_FileName2Save + "_" + std::to_string(m_FileSavedCounter) + ".bil";
|
||||
QString baseName = QString::fromStdString(getFileNameFromPath(m_FileName2Save2));
|
||||
@ -258,7 +258,7 @@ void ImagerOperationBase::start_record()
|
||||
getFrame(buffer);
|
||||
long long timeOs = getNanosecondsSinceMidnight();
|
||||
|
||||
//<EFBFBD><EFBFBD>ȥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӦΪbuffer<EFBFBD><EFBFBD>dark<EFBFBD><EFBFBD><EFBFBD><EFBFBD>unsigned short<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ե<EFBFBD>dark>bufferʱ<EFBFBD><EFBFBD>buffer-dark=65535
|
||||
//减去暗电流,应为buffer和dark都是unsigned short,所以当dark>buffer时,buffer-dark=65535
|
||||
if (m_HasDark)
|
||||
{
|
||||
for (size_t i = 0; i < m_FrameSize; i++)
|
||||
@ -276,12 +276,12 @@ void ImagerOperationBase::start_record()
|
||||
}
|
||||
|
||||
|
||||
//ת<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//转反射率
|
||||
if (m_HasWhite)
|
||||
{
|
||||
for (size_t i = 0; i < m_FrameSize; i++)
|
||||
{
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>װ壩Ϊ0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//处理除数(白板)为0的情况
|
||||
if (white[i] != 0)
|
||||
{
|
||||
pixelValueTmp = buffer[i];
|
||||
@ -299,12 +299,12 @@ void ImagerOperationBase::start_record()
|
||||
x = fwrite(buffer, 2, m_FrameSize, m_fImage);
|
||||
fprintf(hTimesFile, "%d\n", timeOs);
|
||||
|
||||
//<EFBFBD><EFBFBD>rgb<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><EFBFBD>ڽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
|
||||
//将rgb波段提取出来,以便在界面中显示
|
||||
m_RgbImage->FillRgbImage(buffer);//??????????????????????????????????????????????????????????????????????????????????????????????????????
|
||||
|
||||
//std::cout << "<EFBFBD><EFBFBD>" << m_iFrameCounter << "֡д<EFBFBD><EFBFBD>" << x << "<EFBFBD><EFBFBD>unsigned short<EFBFBD><EFBFBD>" << std::endl;
|
||||
//std::cout << "第" << m_iFrameCounter << "帧写了" << x << "个unsigned short。" << std::endl;
|
||||
|
||||
//ÿ<EFBFBD><EFBFBD>1s<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>ν<EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD>
|
||||
//每隔1s进行一次界面图形绘制
|
||||
if (m_iFrameCounter % (int)getFramerate() == 0)
|
||||
{
|
||||
emit PlotSignal(m_FileSavedCounter, m_iFrameCounter, filePath);
|
||||
@ -318,15 +318,15 @@ void ImagerOperationBase::start_record()
|
||||
}
|
||||
imagerStopCollect();
|
||||
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>λ<EFBFBD>ͼǰ<EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//在最后一次画图前需要进行一次拉伸
|
||||
//m_RgbImage
|
||||
emit PlotSignal(m_FileSavedCounter, -1, filePath);
|
||||
|
||||
m_bRecordControlState = false;
|
||||
WriteHdr();
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> ImageFileSaved <EFBFBD>źţ<EFBFBD>֪ͨ UI <20><><EFBFBD>Ѹ<EFBFBD><D1B8>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// m_FileName2Save2 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˱<EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD> .bil <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "tmp_image_0.bil"<EFBFBD><EFBFBD>
|
||||
// 发射 ImageFileSaved 信号,通知 UI 层把该文件加入图层管理器
|
||||
// m_FileName2Save2 保存了本次写入的 .bil 文件名(例如 "tmp_image_0.bil")
|
||||
emit ImageFileSaved(QString::fromStdString(m_FileName2Save2), m_FileSavedCounter);
|
||||
|
||||
m_FileSavedCounter++;
|
||||
@ -397,7 +397,7 @@ double ImagerOperationBase::calcFocusIndexSobelPrivate(void* pvData)
|
||||
unsigned short* psData;
|
||||
psData = (unsigned short*)pvData;
|
||||
|
||||
cv::Mat gray(iHeight, iWidth, CV_16UC1, psData);//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><EFBFBD>gray.data<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݺ<EFBFBD>psDataһ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
cv::Mat gray(iHeight, iWidth, CV_16UC1, psData);//经验证,gray.data的数据和psData一样;
|
||||
/*string rgbFilePathNoStrech = "E:\\hppa\\delete\\focusImg_";
|
||||
string tmp1 = std::to_string(m_iFocusFramesNumber);
|
||||
string tmp2 = ".png";*/
|
||||
@ -407,7 +407,7 @@ double ImagerOperationBase::calcFocusIndexSobelPrivate(void* pvData)
|
||||
//cv::imwrite(rgbFilePathNoStrech, gray);
|
||||
m_iFocusFramesNumber++;
|
||||
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˲<EFBFBD>
|
||||
//进行滤波
|
||||
//cv::Mat outputImage;
|
||||
//cv::Size kernelSize(5, 5);
|
||||
//double sigmaX = 1.5;
|
||||
@ -417,7 +417,7 @@ double ImagerOperationBase::calcFocusIndexSobelPrivate(void* pvData)
|
||||
|
||||
cv::Mat gradX, gradY, absGradX, absGradY;
|
||||
|
||||
cv::Sobel(outputImage, gradX, CV_32F, 1, 0);//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪCV_16S<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>cv::magnitude<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
cv::Sobel(outputImage, gradX, CV_32F, 1, 0);//如果参数为CV_16S,则函数cv::magnitude报错
|
||||
cv::Sobel(outputImage, gradY, CV_32F, 0, 1);
|
||||
cv::convertScaleAbs(gradX, absGradX);
|
||||
cv::convertScaleAbs(gradY, absGradY);
|
||||
@ -426,7 +426,7 @@ double ImagerOperationBase::calcFocusIndexSobelPrivate(void* pvData)
|
||||
|
||||
cv::Mat magnitude, direction;
|
||||
cv::magnitude(gradX, gradY, magnitude);//
|
||||
cv::phase(gradX, gradY, direction, true); // true<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD>ؽǶȶ<EFBFBD><EFBFBD>ǻ<EFBFBD><EFBFBD><EFBFBD>
|
||||
cv::phase(gradX, gradY, direction, true); // true表示返回角度而非弧度
|
||||
|
||||
|
||||
return cv::mean(magnitude)[0];
|
||||
@ -479,23 +479,23 @@ int ImagerOperationBase::getFocusFrameCounter() const
|
||||
|
||||
void ImagerOperationBase::set_buffer()
|
||||
{
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//如果
|
||||
if (buffer != nullptr)
|
||||
{
|
||||
std::cout << "<EFBFBD>ͷŶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>" << std::endl;
|
||||
std::cout << "释放堆上内存" << std::endl;
|
||||
free(buffer);
|
||||
}
|
||||
|
||||
m_FrameSize = getBandCount() * getSampleCount();
|
||||
//std::cout << "m_FrameSize<EFBFBD><EFBFBD>СΪ" << m_FrameSize << std::endl;
|
||||
//std::cout << "m_FrameSize大小为" << m_FrameSize << std::endl;
|
||||
|
||||
buffer = new unsigned short[m_FrameSize];
|
||||
dark = new unsigned short[m_FrameSize];
|
||||
white = new unsigned short[m_FrameSize];
|
||||
|
||||
std::cout << "buffer<EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD>ַ" << buffer << std::endl;
|
||||
std::cout << "dark<EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD>ַ" << dark << std::endl;
|
||||
std::cout << "white<EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD>ַ" << white << std::endl;
|
||||
std::cout << "buffer内存地址" << buffer << std::endl;
|
||||
std::cout << "dark内存地址" << dark << std::endl;
|
||||
std::cout << "white内存地址" << white << std::endl;
|
||||
}
|
||||
|
||||
void ImagerOperationBase::WriteHdr()
|
||||
@ -540,6 +540,6 @@ unsigned short ImagerOperationBase::GetMaxValue(unsigned short* dark, int number
|
||||
max = dark[i];
|
||||
}
|
||||
}
|
||||
//std::cout << "<EFBFBD><EFBFBD>֡<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵΪ" << max << std::endl;
|
||||
//std::cout << "本帧最大值为" << max << std::endl;
|
||||
return max;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user