From 2e7bf50737c3be28d47fb5704fec98728d380be6 Mon Sep 17 00:00:00 2001 From: tangchao0503 <735056338@qq.com> Date: Mon, 7 Sep 2026 09:16:51 +0800 Subject: [PATCH] =?UTF-8?q?fix=EF=BC=9AIR=E5=92=8CIR=20L=201=E3=80=81IR=20?= =?UTF-8?q?L=E9=87=87=E9=9B=86=E5=88=B0=E7=9A=84=E4=B8=80=E5=B8=A7?= =?UTF-8?q?=E6=9C=89=E5=BC=82=E5=B8=B8=EF=BC=8C=E6=9C=AC=E6=9D=A514?= =?UTF-8?q?=E4=BD=8D=EF=BC=8C=E6=9C=80=E5=A4=A7=E5=80=BC=E5=BA=94=E8=AF=A5?= =?UTF-8?q?=E4=B8=BA16383=EF=BC=8C=E4=BD=86=E6=98=AF=E6=9C=80=E5=8F=B3?= =?UTF-8?q?=E8=BE=B9=E6=9C=89=E5=BC=82=E5=B8=B8=E5=A4=A7=E7=9A=84=E5=80=BC?= =?UTF-8?q?=EF=BC=88=E5=A4=A7=E6=A6=8250000=EF=BC=89=EF=BC=8C=E5=AF=BC?= =?UTF-8?q?=E8=87=B4=E8=87=AA=E5=8A=A8=E6=9B=9D=E5=85=89=E5=A4=B1=E8=B4=A5?= =?UTF-8?q?=EF=BC=9B=202=E3=80=81IR(=E4=BB=A5=E5=89=8D=E7=9A=84NIR)?= =?UTF-8?q?=E5=92=8CIR=20L=E9=83=BD=E6=98=AF14=E4=BD=8D=E7=9A=84=EF=BC=8C?= =?UTF-8?q?=E4=BF=AE=E6=94=B9WriteHdr()=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HPPA/ResononNirImager.cpp | 31 ++++++++++++++++++++++++++----- HPPA/ResononNirImager.h | 2 ++ 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/HPPA/ResononNirImager.cpp b/HPPA/ResononNirImager.cpp index afb9750..0536461 100644 --- a/HPPA/ResononNirImager.cpp +++ b/HPPA/ResononNirImager.cpp @@ -104,20 +104,25 @@ void ResononNirImager::setSpectraBin(int new_spectral_bin) double ResononNirImager::auto_exposure() { //第一步:先设置曝光时间为在当前帧率情况下最大 - double x = 1 / getFramerate() * 1000;//获取最大毫秒曝光时间 + double f = getFramerate(); + double x = 1 / f * 1000;//获取最大毫秒曝光时间 + std::cout << f << "hz帧率下,最大曝光时间为" << x << std::endl; + reConnectImage(); setIntegrationTime(x); //第二步:通过循环寻找最佳曝光时间 imagerStartCollect(); + double tmpTime; while (true) { getFrame(buffer); - if (GetMaxValue(buffer, m_FrameSize) >= 4095) + if (GetMaxValue(buffer, m_FrameSize) >= 16383) { - setIntegrationTime(getIntegrationTime() * 0.8); - std::cout << "自动曝光-----------" << std::endl; + tmpTime = getIntegrationTime() * 0.8; + setIntegrationTime(tmpTime); + std::cout << "自动曝光-----------:" << tmpTime << std::endl; } else { @@ -136,6 +141,22 @@ double ResononNirImager::auto_exposure() return exposureTime; } +unsigned short ResononNirImager::GetMaxValue(unsigned short* dark, int number) +{ + unsigned int max = 0; + for (size_t i = 0; i < number; i++) + { + if (dark[i] > 16383) continue;//IR L为14位 + + if (dark[i] > max) + { + max = dark[i]; + } + } + std::cout << "本帧最大值为" << max << std::endl; + return max; +} + double ResononNirImager::getWavelengthAtBand(int band) { return m_ResononNirImager.get_wavelength_at_band(band); @@ -412,7 +433,7 @@ void ResononNirImager::WriteHdr() outfile << "ENVI\n"; outfile << "interleave = bil\n"; outfile << "data type = 12\n"; - outfile << "bit depth = 12\n"; + outfile << "bit depth = 14\n"; outfile << "byte order = 0\n"; outfile << "samples = " << getSampleCount() << "\n"; outfile << "bands = " << getBandCount() << "\n"; diff --git a/HPPA/ResononNirImager.h b/HPPA/ResononNirImager.h index e518888..b4aab30 100644 --- a/HPPA/ResononNirImager.h +++ b/HPPA/ResononNirImager.h @@ -38,6 +38,8 @@ public: void WriteHdr(); protected: + unsigned short GetMaxValue(unsigned short* dark, int number); + private: void reConnectImage();