Используя OpenCV, как мне изменить разрешение, а не размер изображения?

#ios #opencv

#iOS #opencv

Вопрос:

Это может быть основным вопросом, но я новичок в OpenCV, и я нахожу документацию очень плохой. Я думаю, что хотел бы использовать функцию изменения размера, чтобы получить новое изображение того же размера, что и оригинал, но с меньшим разрешением.

Вся документация, которую я нахожу, действует так, как будто разрешение и размер — это одно и то же, и я понятия не имею, что означают эти параметры. Кажется, что разные источники показывают другую версию изменения размера, чем то, что я вижу в заголовках:

 CV_EXPORTS_W void resize( InputArray src, OutputArray dst,
                      Size dsize, double fx=0, double fy=0,
                      int interpolation=INTER_LINEAR );
 

Если я сохраню размер dsize того же размера, что и мой оригинал, что представляют x и y и как я получу разрешение, скажем, 72 dpi?

Комментарии:

1. разрешение и размер — это одно и то же для самого изображения / структуры данных. Только для печати / отображения размер может отличаться. Если вы хотите получить доступ к пикселю (это то, что делается при обработке изображений), как бы вы получили доступ к местоположению пикселя, если вы работаете с размером изображения в дюймах и dpi?

Ответ №1:

Позвольте мне объяснить кое-что прямо: когда вы загружаете свое изображение в память, у вас есть, в хорошем приближении, матрица чисел с заданным количеством строк и столбцов. И из определения dpi, которое представляет собой количество отдельных точек, которые могут быть размещены в строке в один дюйм, вам не хватает «дюйма» в памяти. Как бы вы определили dpi в случае матрицы, хранящейся в памяти? Нет смысла говорить об этом только в соответствии с памятью. Таким образом, в opencv (и, возможно, в любой другой библиотеке обработки) у вас одинаковые понятия разрешения и размера.

Может быть, вы хотели бы добиться чего-то вроде «искусственного» снижения dpi? Что-то, что «выглядит как» изображение, печатаемое с меньшим разрешением на дюйм? В таком случае, почему бы вам не попробовать итеративно изменять размер одного и того же изображения для достижения этого результата.

И cv::resize() функция изменяет размер либо на заданный размер назначения (параметр dsize ), либо на масштабные коэффициенты ( fx и fy ).