Я использую 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 кадров в секунду. Как ускорить этот пример?
Когда я использую stitcher.setWarper(new cv::PlaneWarperGpu());
, тогда я получаю очень увеличенное изображение, мне это не нужно.
Мне нужен только - Перевод.
К примеру, я готов не использовать:
- преобразования Perspective
- Масштабные операции
- и может быть даже Ротации
Как я могу это сделать? Или как я могу получить от cv::Stitcher stitcher
параметров x,y
переводов для каждого изображения?
ОБНОВЛЕНИЕ - профилирование в МСВС 2013 на Windows 7 x64:
Какую машину вы используете? У вас включен tbb? Кроме того, можете ли вы представить несколько изображений в качестве примера для сшивания вместе? – Antonio
@ Антонио 8 ГБ оперативной памяти + процессор (Intel Core i5 760 - 4 ядра) + графический процессор (nVidia GeForce GTX 970 - 1664). TBB отключен. OpenCV 2.4.10 скомпилирован с CUDA 6.5 и отключен OpenMP/TBB. – Alex
TBB может помочь в многопоточности процесса ... Для какой системы вы создали и с помощью каких средств сборки? Кроме того, одна быстрая задача - поместить объявление/определение массива изображений из цикла while. (Вы распределяете и освобождаете при каждом цикле). Я предлагаю вам установить таймер вокруг вашей функции строчки, чтобы проверить, что этот вызов функции является фактическим узким местом. – Antonio