简单总结一下:这个函数的主要目的是从配置文件中读取和设置与相机图像尺寸相关的各种参数。它会根据需要调整图像的宽度和高度,并根据这些调整更新相机的校准参数。如果是立体相机或带IMU的相机,还会同时更新第二个相机的校准参数。最终,这些调整确保图像和相机校准信息的一致性。
void Settings::readImageInfo(cv::FileStorage &fSettings)
首先读取原始图像的信息,在将信息赋值给一个用于表示新图像的变量,以便用于后续处理用。
// Read original and desired image dimensions
int originalRows = readParameter(fSettings, "Camera.height", found);
int originalCols = readParameter(fSettings, "Camera.width", found);
originalImSize_.width = originalCols;
originalImSize_.height = originalRows;
newImSize_ = originalImSize_;
int newHeigh = readParameter(fSettings, "Camera.newHeight", found, false);
如果需要调整图像高度,更新图像尺寸及相关校准参数
新高度比上老高度作为缩放因子scaleRowFactor,调整y轴方向上的两个参数。
if (found)
{
bNeedToResize1_ = true;
newImSize_.height = newHeigh;
if (!bNeedToRectify_)
{
// Update calibration
float scaleRowFactor = (float)newImSize_.height / (float)originalImSize_.height;
calibration1_->setParameter(calibration1_->getParameter(1) * scaleRowFactor, 1);
calibration1_->setParameter(calibration1_->getParameter(3) * scaleRowFactor, 3);
if ((sensor_ == System::STEREO || sensor_ == System::IMU_STEREO) && cameraType_ != Rectified)
{
calibration2_->setParameter(calibration2_->getParameter(1) * scaleRowFactor, 1);
calibration2_->setParameter(calibration2_->getParameter(3) * scaleRowFactor, 3);
}
}
}
int newWidth = readParameter(fSettings, "Camera.newWidth", found, false);
如果需要调整图像宽度,更新图像尺寸及相关校准参数
新宽度比上老宽度作为缩放因子scaleRowFactor,调整x轴方向上的两个参数。
if (found)
{
bNeedToResize1_ = true;
newImSize_.width = newWidth;
if (!bNeedToRectify_)
{
// Update calibration
float scaleColFactor = (float)newImSize_.width / (float)originalImSize_.width;
calibration1_->setParameter(calibration1_->getParameter(0) * scaleColFactor, 0);
calibration1_->setParameter(calibration1_->getParameter(2) * scaleColFactor, 2);
if ((sensor_ == System::STEREO || sensor_ == System::IMU_STEREO) && cameraType_ != Rectified)
{
calibration2_->setParameter(calibration2_->getParameter(0) * scaleColFactor, 0);
calibration2_->setParameter(calibration2_->getParameter(2) * scaleColFactor, 2);
if (cameraType_ == KannalaBrandt)
{
static_cast(calibration1_)->mvLappingArea[0] *= scaleColFactor;
static_cast(calibration1_)->mvLappingArea[1] *= scaleColFactor;
static_cast(calibration2_)->mvLappingArea[0] *= scaleColFactor;
static_cast(calibration2_)->mvLappingArea[1] *= scaleColFactor;
}
}
}
}
fps_ = readParameter(fSettings, "Camera.fps", found);
bRGB_ = (bool)readParameter(fSettings, "Camera.RGB", found);
void Settings::readImageInfo(cv::FileStorage &fSettings)
{
bool found;
// Read original and desired image dimensions
int originalRows = readParameter(fSettings, "Camera.height", found);
int originalCols = readParameter(fSettings, "Camera.width", found);
originalImSize_.width = originalCols;
originalImSize_.height = originalRows;
newImSize_ = originalImSize_;
int newHeigh = readParameter(fSettings, "Camera.newHeight", found, false);
if (found)
{
bNeedToResize1_ = true;
newImSize_.height = newHeigh;
if (!bNeedToRectify_)
{
// Update calibration
float scaleRowFactor = (float)newImSize_.height / (float)originalImSize_.height;
calibration1_->setParameter(calibration1_->getParameter(1) * scaleRowFactor, 1);
calibration1_->setParameter(calibration1_->getParameter(3) * scaleRowFactor, 3);
if ((sensor_ == System::STEREO || sensor_ == System::IMU_STEREO) && cameraType_ != Rectified)
{
calibration2_->setParameter(calibration2_->getParameter(1) * scaleRowFactor, 1);
calibration2_->setParameter(calibration2_->getParameter(3) * scaleRowFactor, 3);
}
}
}
int newWidth = readParameter(fSettings, "Camera.newWidth", found, false);
if (found)
{
bNeedToResize1_ = true;
newImSize_.width = newWidth;
if (!bNeedToRectify_)
{
// Update calibration
float scaleColFactor = (float)newImSize_.width / (float)originalImSize_.width;
calibration1_->setParameter(calibration1_->getParameter(0) * scaleColFactor, 0);
calibration1_->setParameter(calibration1_->getParameter(2) * scaleColFactor, 2);
if ((sensor_ == System::STEREO || sensor_ == System::IMU_STEREO) && cameraType_ != Rectified)
{
calibration2_->setParameter(calibration2_->getParameter(0) * scaleColFactor, 0);
calibration2_->setParameter(calibration2_->getParameter(2) * scaleColFactor, 2);
if (cameraType_ == KannalaBrandt)
{
static_cast(calibration1_)->mvLappingArea[0] *= scaleColFactor;
static_cast(calibration1_)->mvLappingArea[1] *= scaleColFactor;
static_cast(calibration2_)->mvLappingArea[0] *= scaleColFactor;
static_cast(calibration2_)->mvLappingArea[1] *= scaleColFactor;
}
}
}
}
fps_ = readParameter(fSettings, "Camera.fps", found);
bRGB_ = (bool)readParameter(fSettings, "Camera.RGB", found);
}
以上就是我学习到的内容,如果对您有帮助请多多支持我,如果哪里有问题欢迎大家在评论区积极讨论,我看到会及时回复。