Я использую библиотеку OpenCV в среде CUDA C ++, чтобы изменить размер изображения, полученного обработкой GPU. Важный этап обработки включает в себя повторную выборку изображения и ОБРАЩЕНИЕ с соотношением сторон.
Пример проблемы:
Измените размер 2000 x 500 и преобразуйте его в изображение 500 x 2000, используя CUDA
Это делается с помощью следующего OpenCV команда:
cv::cuda::resize(d_src,d_dst,cv::Size(500,2000),cv::INTER_CUBIC);
Где d_src
и d_dst
- соответствующие GpuMats размером 2000 x 500 и 500 x 2000. Максимально допустимый размер - квадрат 2000x2000 или 500x500. Функция ведет себя как ожидалось, пока соотношение сторон не инвертировано. Я также попытался выполнить интерполяцию в два этапа, либо путем расширения и уменьшения:
- Переход от 2000x500 к 2000x2000 до 500x2000.
cv::cuda::resize(d_src,d_buffer,cv::Size(2000,2000),cv::INTER_CUBIC);
cv::cuda::resize(d_buffer,d_dst,cv::Size(500,2000),cv::INTER_CUBIC);
- Переход от 2000x500 к 500x500 до 500x2000.
cv::cuda::resize(d_src,d_buffer,cv::Size(500,500),cv::INTER_CUBIC);
cv::cuda::resize(d_buffer,d_dst,cv::Size(500,2000),cv::INTER_CUBIC);
Оба эти подхода терпят неудачу и не являются предпочтительными, поскольку они потребляют значительное количество дополнительной памяти GPU.
Кто-нибудь испытывал подобную проблему с этой функцией? Может ли кто-нибудь помочь мне?
Заранее спасибо