网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
else
#endif
{
#ifdef HAVE_OPENCV_NONFREE //表示可以使用NONFREE
//设置全局变量features_finder_为SurfFeaturesFinder(),features_finder_表示特征检测的方法,在这里是用SURF算法
stitcher.setFeaturesFinder(new detail::SurfFeaturesFinder());
#else //表示不可以使用NONFREE
//设置全局变量features_finder_为OrbFeaturesFinder(),在这里用的是ORB算法
stitcher.setFeaturesFinder(new detail::OrbFeaturesFinder());
#endif
//设置全局变量warper_为SphericalWarper(),warper_表示图像投影变换的方法,在这里是球面投影方法
stitcher.setWarper(new SphericalWarper());
//设置全局变量seam_finder_为GraphCutSeamFinderBase::COST_COLOR,seam_finder_表示寻找接缝线的算法,在这里是图割法,而且误差表面函数是直接法
stitcher.setSeamFinder(new detail::GraphCutSeamFinder(detail::GraphCutSeamFinderBase::COST_COLOR));
}
//设置全局变量exposure_comp_为BlocksGainCompensator(),exposure_comp_表示曝光补偿方法,在这里是分块增益补偿方法
stitcher.setExposureCompensator(new detail::BlocksGainCompensator());
//设置全局变量blender_为MultiBandBlender(),blender_表示融合算法,在这里是多频段融合方法
stitcher.setBlender(new detail::MultiBandBlender(try_use_gpu));
return stitcher; //返回Stitcher类
}
estimateTransform函数用于匹配图像,并评估相机的旋转参数:
Stitcher::Status Stitcher::estimateTransform(InputArray images)
//images表示待拼接的输入图像
{
//调用另一种形式的estimateTransform函数
return estimateTransform(images, vector<vector
}
Stitcher::Status Stitcher::estimateTransform(InputArray images, const vector<vector
//images表示待拼接的输入图像
//rois表示输入图像中感兴趣的矩形区域,即只对该区域进行拼接
{
images.getMatVector(imgs_); //图像赋值
rois_ = rois; //赋值
Status status;
//调用matchImages函数,用于匹配图像,该函数在后面给出介绍
if ((status = matchImages()) != OK)
return status;
//调用estimateCameraParams函数,用于评估相机参数,该函数在后面给出介绍
estimateCameraParams();
return OK;
}
composePanorama函数用于合并拼接图像:
Stitcher::Status Stitcher::composePanorama(OutputArray pano)
//pano表示最终得到的全景图像
{
//调用另一种形式的composePanorama函数
return composePanorama(vector(), pano);
}
Stitcher::Status Stitcher::composePanorama(InputArray images, OutputArray pano)
//images表示经过变形处理后的图像
//pano表示最终得到的全景图像
{
LOGLN("Warping images (auxiliary)… ");
vector<Mat> imgs;
images.getMatVector(imgs); //赋值
//如果imgs不为空,即输入参数images有值,则需要把images的相关值赋予imgs_
if (!imgs.empty()) //如果imgs不为空,即有值
{
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
**
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!