我使用 4 个固定相机。相机不会相对于彼此移动。我想将它们中的视频图像实时拼接成一个视频图像。
我用于这个 OpenCV 2.4.10 和cv:stitcher
类,如下所示:
// use 4 video-cameras
cv::VideoCapture cap0(0), cap1(1), cap2(2), cap3(3);
bool try_use_gpu = true; // use GPU
cv::Stitcher stitcher = cv::Stitcher::createDefault(try_use_gpu);
stitcher.setWarper(new cv::CylindricalWarperGpu());
stitcher.setWaveCorrection(false);
stitcher.setSeamEstimationResol(0.001);
stitcher.setPanoConfidenceThresh(0.1);
//stitcher.setSeamFinder(new cv::detail::GraphCutSeamFinder(cv::detail::GraphCutSeamFinderBase::COST_COLOR_GRAD));
stitcher.setSeamFinder(new cv::detail::NoSeamFinder());
stitcher.setBlender(cv::detail::Blender::createDefault(cv::detail::Blender::NO, true));
//stitcher.setExposureCompensator(cv::detail::ExposureCompensator::createDefault(cv::detail::ExposureCompensator::NO));
stitcher.setExposureCompensator(new cv::detail::NoExposureCompensator());
std::vector<cv::Mat> images(4);
cap0 >> images[0];
cap1 >> images[1];
cap2 >> images[2];
cap3 >> images[3];
// call once!
cv::Stitcher::Status status = stitcher.estimateTransform(images);
while(true) {
// **lack of speed, even if I use old frames**
// std::vector<cv::Mat> images(4);
//cap0 >> images[0];
//cap1 >> images[1];
//cap2 >> images[2];
//cap3 >> images[3];
cv::Stitcher::Status status = stitcher.composePanorama(images, pano_result);
}
我只有 10 FPS(每秒帧数),但我需要 25 FPS。我怎样才能加速这个例子?
当我使用stitcher.setWarper(new cv::PlaneWarperGpu());
然后我得到一个非常放大的图像,我不需要这个。
我只需要 - 翻译。
例如,我准备不使用:
- 透视变换
- 规模经营
- 甚至可能是 Rotations
我该怎么做?或者我如何从每个图像的翻译cv::Stitcher stitcher
参数中获取?x,y
更新 - 在 Windows 7 x64 上的 MSVS 2013 中进行分析: