OpenCV resize возвращает пустое изображение, когда соотношение сторон инвертировано - PullRequest
0 голосов
/ 03 февраля 2020

Я использую библиотеку 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.

Кто-нибудь испытывал подобную проблему с этой функцией? Может ли кто-нибудь помочь мне?

Заранее спасибо

1 Ответ

1 голос
/ 03 февраля 2020

Nevermind. Эту проблему можно решить, установив для параметров размера значение auto:

cv::cuda::resize(d_src,d_dst,d_dst.size(),0,0,cv::INTER_CUBIC);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...