- Как изменить размер окна в opencv2 python
- 4 ответа
- Похожие вопросы:
- OpenCV в Python. Часть 2
- Введение
- Изменение размера изображения
- Смещение изображения вдоль осей
- Вырез фрагмента изображения
- Поворот изображения
- Введение в OpenCV — библиотеку компьютерного зрения на Python
- Введение
- Установка библиотеки
- Windows
- MacOS
- Linux
- Основные операции с изображениями
- Вывод изображения на экран
- Сохранение изображений
- Арифметика изображений
- Сложение изображений
- Смешение изображений
- Сглаживание изображений
- Преобразование изображений
- Масштабирование
- Вращение
- Выводы
Как изменить размер окна в opencv2 python
Я использую opencv 2 с webcam. Я могу получить видеопоток и обработать его, но, похоже, не могу найти способ изменить размер окна дисплея. У меня есть несколько видеоизображений, сложенных горизонтально, но размер изображения очень мал,и его трудно увидеть.
Мой код довольно прост, и примерно так:
Но у бэкендов qt, по-видимому, есть дополнительные флаги. У меня нет бэкенда qt. Есть ли способ увеличить размер изображений, чтобы я мог их видеть?
4 ответа
Я создаю GUI для своего сценария python в EasyGUI. Кто-нибудь знает, как я могу изменить размер окна по умолчанию? Значение по умолчанию слишком велико. Спасибо за помощь.
Как изменить размер окна оповещения? Я использую следующую кодировку. В Firefox размер окна оповещения автоматически изменяется, но в chrome он не меняется? Пожалуйста, дайте решение. window.alert(You answered all questions. Press OK to continue.);
Да, к сожалению, вы не можете вручную изменить размер окна nameWindow без бэкенда Qt. Ваши варианты:
- используйте функцию cv2.resize для изменения размера изображения до нужного размера перед отображением изображения
- установите OpenCV с поддержкой бэкенда Qt и используйте cv2.namedWindow(«main», CV_WINDOW_NORMAL)
а затем вручную измените его размер до нужного вам размера
Вы можете использовать флаг WINDOW_NORMAL при вызове функции namedWindow , как показано ниже. Это позволит вам изменить размер вашего окна.
Проверьте функцию namedWindow , задокументированную здесь
Я использую графическую библиотеку Зелле для выполнения некоторых онлайн-курсовых работ. Часть задания, над которым я работаю, похоже, предполагает, что я могу изменить размер существующего окна GraphWin. Но это не было затронуто ранее в курсе, и, просматривая документацию для graphics.py, я не.
Я хочу автоматически изменить размер приведенного выше изображения на размер, показанный ниже, когда пользователь изменяет размер главного окна. Есть ли какая-нибудь функция для этого в pyqt4 ? Я искал ответ на эту проблему. но я не могу найти что-то связанное. Я пытался установить фиксированный.
Согласно документам, вам нужно создать свое окно с autosize true.
Ваш призыв к imshow затем автоматически изменяет размер окна, чтобы соответствовать вашему имиджу.
Похожие вопросы:
Я хотел бы изменить размер значка окна в окне xaml. Я знаю, что могу скрыть строку заголовка окна и создать пользовательскую строку заголовка, но есть ли способ изменить размер значка самостоятельно.
Я хочу изменить размер окна с помощью WinAPI. Я использую функцию WinAPI: SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int x, int y, int cx, int cy, uint uFlags); Размер окна изменяется, но его.
Программа Panda3D открывается с определенным размером окна. Я не могу найти ни одного вызова в GraphicsWindow , чтобы установить или изменить размер окна. Как изменить размер окна?
Я создаю GUI для своего сценария python в EasyGUI. Кто-нибудь знает, как я могу изменить размер окна по умолчанию? Значение по умолчанию слишком велико. Спасибо за помощь.
Как изменить размер окна оповещения? Я использую следующую кодировку. В Firefox размер окна оповещения автоматически изменяется, но в chrome он не меняется? Пожалуйста, дайте решение.
Я использую графическую библиотеку Зелле для выполнения некоторых онлайн-курсовых работ. Часть задания, над которым я работаю, похоже, предполагает, что я могу изменить размер существующего окна.
Я хочу автоматически изменить размер приведенного выше изображения на размер, показанный ниже, когда пользователь изменяет размер главного окна. Есть ли какая-нибудь функция для этого в pyqt4 ? Я.
Я пытаюсь создать свой первый плагин для Sublime Text 3. Как установить размер видового экрана? Я обычно делю макет на два, что я хочу сделать, так это изменить размер видового экрана для.
Я использую Spyder Python IDE, который поставляется в комплекте с Anaconda 4.4.0 в Windows 10, и пытаюсь изменить размер окна редактора так, чтобы оно заполняло доступное вертикальное пространство.
OpenCV в Python. Часть 2
Привет, Хабр! Продолжаем туториал по библиотеке opencv в python. Для тех кто не читал первую часть, сюда: Часть 1, а всем остальным — увлекательного чтения!
Введение
Теперь, когда вы ознакомились с основами данной библиотеки, пора приступить к базовым преобразованиям изображений: изменение размера, смещение вдоль осей, кадрирование(обрезка), поворот.
Изменение размера изображения
Первый метод, который мы изучим — это как поменять высоту и ширину у изображения. Для этого в opencv есть такая функция как resize():
Данная функция первым аргументом принимает изображение, размер которого мы хотим изменить, вторым — кортеж, который должен содержать в себе ширину и высоту для нового изображения, третьим — метод интерполяции(необязательный). Интерполяция — это алгоритм, который находит неизвестные промежуточные значения по имеющемуся набору известных значений. Фактически, это то, как будут заполняться новые пиксели при модификации размера изображения. К примеру, интерполяция методом ближайшего соседа (cv2.INTER_NEAREST) просто берёт для каждого пикселя итогового изображения один пиксель исходного, который наиболее близкий к его положению — это самый простой и быстрый способ. Кроме этого метода в opencv существуют следующие: cv2.INTER_AREA, cv2.INTER_LINEAR( используется по умолчанию), cv2.INTER_CUBIC и cv2.INTER_LANCZOS4. Наиболее предпочтительным методом интерполяции для сжатия изображения является cv2.INTER_AREA, для увелечения — cv2.INTER_LINEAR. От данного метода зависит качество конечного изображения, но как показывает практика, если мы уменьшаем/увеличиваем изображение меньше, чем в 1.5 раза, то не важно каким методом интерполяции мы воспользовались — качество будет схожим. Данное утверждение можно проверить на практике. Напишем следующий код:
Слева — изображение с интерполяцией методом ближайшего соседа, справа — изображение с билинейной интерполяцией:
Очень важно при изменении размера изображения учитывать соотношение сторон. Соотношение сторон — это пропорциональное соотношение ширины и высоты изображения.Если мы забудем о данном понятии, то получим изображение такого плана:
Поэтому текущую функцию для изменения размера необходимо модифицировать:
Соотношение сторон мы вычисляем в переменной ratio. В зависимости от того, какой параметр не равен None, мы берём установленную нами новую высоту/ширину и делим на старую высоту/ширину. Далее, в переменной dimension мы определяем новые размеры изображения и передаём в функцию cv2.resize().
Смещение изображения вдоль осей
С помощью функции cv2.warpAffine() мы можем перемещать изображение влево и вправо, вниз и вверх, а также любую комбинацию из перечисленного:
Сначала, в переменной translation_matrix мы создаём матрицу преобразований как показано ниже:
Первая строка матрицы — [1, 0, tx ], где tx — количество пикселей, на которые мы будем сдвигать изображение влево или вправо. Отрицательное значения tx будет сдвигать изображение влево, положительное — вправо.
Вторая строка матрицы — [ 0, 1, ty], где ty — количество пикселей, на которые мы будем сдвигать изображение вверх или вниз. Отрицательное значения ty будет сдвигать изображение вверх, положительное — вниз. Важно помнить, что данная матрица определяется как массив с плавающей точкой.
На следующей строчке и происходит сдвиг изображения вдоль осей, с помощью, как я писал выше, функции cv2.warpAffine(), которая первым аргументом принимает изображение, вторым — матрицу, третьим — размеры нашего изображения. Если вы запустите данный код, то увидите следующее:
Вырез фрагмента изображения
Для того, чтобы вырезать интересующий вас фрагмент из изображения, достаточно воспользоваться следующим кодом:
В данной строчке мы предоставляем массив numpy для извлечения прямоугольной области изображения, начиная с (300, 10) и заканчивая (750, 450), где 10 — это начальная координата по y, 300 — начальная координата по x, 450 — конечная координата по y и 750 — конечная координата по x.Выполнив код выше, мы увидим, что обрезали лицо девочке:
Поворот изображения
И, последнее, что мы на сегодня рассмотрим — это как повернуть изображение на некоторый угол:
Когда мы поворачиваем изображение, нам нужно указать, вокруг какой точки мы будем вращаться, именно это принимает первым аргументом функция cv2.getRotationMatrix2D(). В данном случае я указал центр изображения, однако opencv позволяет указать любую произвольную точку, вокруг которой вы захотите вращаться. Следующим аргументом данная функция принимает угол, на который мы хотим повернуть наше изображение, а последним аргументом — коэффициент масштабирования. Мы используем 0.6, то есть уменьшаем изображение на 40%, для того, чтобы оно поместилось в кадр. Данная функция возвращает массив numpy, который мы передаём вторым аргументом в функцию cv2.warpAffine(). В итоге, у вас на экране должно отобразиться следующее изображение:
Вот и вторая часть подошла к концу, исходный код доступен на github. Спасибо за уделённое внимание! До скорой встречи!
Введение в OpenCV — библиотеку компьютерного зрения на Python
Введение
В этом руководстве мы изучим, как использовать библиотеку OpenCV в Python.
OpenCV — это библиотека с открытым кодом, поддерживающая множество платформ, включая Windows, MacOs и Linux. Также эта библиотека существует и для многих языков программирования. Но наиболее часто она используется для написания приложений машинного обучения на языке Python, особенно в сфере компьютерного зрения.
Помимо кроссплатформенности и поддержки многих языков программирования, которые позволяют использовать приложения на различных системах, библиотека OpenCV весьма эффективна (по сравнению с другими похожими библиотеками) с точки зрения вычислений, так как почти все функции и операторы в ней векторизированны.
В этой статье мы научим вас устанавливать библиотеку OpenСV на платформы Windows, MacOS и Linux. Также мы расскажем про операции с изображениями, арифметику изображений, сглаживание изображений и геометрические трансформации изображений при помощи библиотеки OpenCV. Приступим!
Установка библиотеки
Замечание: так как мы рассматриваем использование библиотеки OpenСV для языка Python, то неявно подразумевается, что сам Python ( версии 3) у вас уже установлен. Для установки библиотеки OpenCV выполните одну из следующих команд, в зависимости от вашей операционной системы.
Windows
$ pip install opencv-python
MacOS
$ brew install opencv3 —with-contrib —with-python3
Linux
$ sudo apt-get install libopencv-dev python-opencv
Для проверки результата установки просто введите в терминале Python следующую команду:
Если не появилось сообщение об ошибке, значит библиотека была установлена успешно.
Основные операции с изображениями
Установив OpenCV, давайте теперь, так сказать, пощупаем основные функциональные возможности данной библиотеки.
Вывод изображения на экран
Процесс вывода изображения на экран состоит из двух шагов. Сначала мы должны загрузить изображение, а после этого вывести его на экран. Эти операции выполняются последовательно, и для каждой из них предназначена отдельная функция.
Для вывода изображения на экран нам необходимо задать две вещи:
- Путь к файлу, в котором содержится изображение (подойдет как относительный, так и абсолютный путь).
- Режим чтения файла (только чтение, запись, и т.д.).
Функция, при помощи которой мы считываем изображение, называется cv2.imread() . У нее есть три режима работы. Первый — это IMREAD_GRAYSCALE . Как видно из названия, он преобразует изображение в черно-белое с оттенками серого. Второй — IMREAD_UNCHANGED , он загружает изображение без обрезания альфа-канала. И третий, используемый по умолчанию, — IMREAD_COLOR . Он просто загружает цветное изображение, используя RGB-каналы.
Вот пример кода:
Таким образом мы загружаем изображение велосипеда из файла bike.png и сохраняем его в переменную my_bike для дальнейшей работы.
Замечание: если в результате выполнения данного кода возникла ошибка, есть только три возможных причины для этого. Первая — вы неправильно задали путь к файлу. Вторая — такого файла просто не существует, и третья — тип изображения (jpg/jpeg/png) задан неверно.
Теперь давайте выведем на экран только что загруженное изображение. Для этого используется функция cv2.imshow() . Если вы пользовались Matlab, ее работа должны быть вам знакома.
Первый параметр функции imshow() — это строка, которую мы хотим использовать в качестве заголовка к нашему изображению. Второй параметр — это переменная, содержащая загруженное нами изображение.
Сохранение изображений
Для сохранения результатов нашей работы с изображениями в библиотеке OpenCV существует функция cv2.imwrite() .
Вот пример ее использования:
Здесь мы задали название файла и переменную, в которой содержится изображение. Оно будет сохранено в текущую рабочую директорию.
Арифметика изображений
Арифметика изображений включает в себя сложение, вычитание, деление и умножение различных изображений и используется для получения нового изображения при помощи арифметических операций со входными изображениями. Арифметика изображений имеет множество практических применений, как например нанесение водяного знака на картинку, смешение двух изображений, применение к картинкам различных фильтров и так далее.
Из всего множества возможных операций мы рассмотрим только два примера, которые помогут нам понять концепцию арифметических операций в библиотеке OpenСV. В качестве первого примера мы возьмем сложение двух изображений, а в качестве второго — их смешение (blending).
Давайте рассмотрим код этих примеров.
Сложение изображений
Команда waitkey используется для остановки выполнения кода до нажатия любой кнопки клавиатуры. Это весьма удобно, так как в противном случае выведенное на экран изображение только на долю секунды мелькнуло бы на экране, а затем программа завершила бы свое исполнение.
Смешение изображений
Смешение изображений весьма похоже на их сложение, за исключением того, что теперь мы можем контролировать вклад каждого из входящих изображений в результирующее. В общем случае, если мы хотим, чтобы одно из входящих изображений было более контрастным, а другое более размытым при их слиянии, мы должны вместо сложения изображений использовать их смешение.
Чтобы прояснить это, давайте рассмотрим код:
Сумма весов, передающихся в функцию cv2.addWeighted() , должна быть равна 1 . Также в конце в функцию можно передать скалярную величину, которая будет добавлена к значению каждого пикселя результирующего изображения.
Замечание: изображения могут быть любого типа, но тип всех изображений должен быть одинаковым. Например, если вы используете формат PNG, то все изображения должны быть именно в этом формате.
Сглаживание изображений
Сглаживание изображений является крайне полезной операцией и очень часто используется перед тем как передать картинку для обработки в модель машинного обучения. В основном это нужно делать для фильтрации высокочастотных шумов, применяя для этого низкочастотный фильтр. Существует множество различных фильтров, например усредняющий фильтр (box filter), медианный фильтр (median filter), фильтр типов волн (модовый фильтр, mode filter), фильтр Гаусса (Gaussian filter) и многие другие. Но для понимания сглаживания изображений и его применения в библиотеке OpenCV, мы рассмотрим только первый, усредняющий фильтр (box filter).
Допустим, у вас есть изображение размером 10X10 и вы хотите его пропустить через усредняющий фильтр размером 3Х3. Как вы будете действовать?
Мы начнем с крайнего левого угла нашего изображения, поместим туда фильтр размером 3Х3 и заменим центральный элемент на среднее по всем девяти элементам (сумма элементов, попавших в фильтр, деленная на 9). Это будет только первым этапом. Далее мы сдвинем фильтр на один шаг вправо и повторим эту процедуру. Ниже этот пример наглядно проиллюстрирован.
Фильтр или маска:
Применение фильтра к изображению размером 10Х10:
Давайте теперь посмотрим, как можно организовать фильтрацию изображения при помощи библиотеки OpenCV. Пожалуйста, внимательно прочитайте все комментарии к каждой строчке данного кода.
Чтобы увидеть результат на экране, выполните следующий вспомогательный код:
Преобразование изображений
Последней, но одной из самых важных тем, поднятых нами в данном обзоре библиотеки OpenCV, является преобразование изображений. Эта тема находит применение в самых разных приложениях, но отдельно следует упомянуть задачу аугментации данных для моделей машинного обучения. Речь идет о ситуациях, когда в нашем датасете для полноценного обучения недостаточно данных, и мы, дополняя и видоизменяя существующие картинки, увеличиваем первоначальный датасет до нужного размера. Это помогает нам серьезно увеличить точность работы обучаемой модели.
Список возможных преобразований весьма велик и включает в себя масштабирование, афинное преобразование изображений, вращение, транспонирование и многое другое. Мы кратко расскажем только про масштабирование и вращение, но в библиотеке OpenСV есть поддержка всех возможных преобразований. Начнем с масштабирования.
Масштабирование
Попросту говоря, масштабирование — это не что иное как изменение размеров изображения, его увеличение либо уменьшение. В библиотеке OpenCV для этого существует функция resize. У этой функции, в свою очередь, есть три метода: INTER_CUBIC , INTER_LINEAR и INTER_AREA . Давайте на примере конкретного кода разберем, как это все работает. Пожалуйста, внимательно изучите код, комментарии к нему и описание ниже.
Здесь в функции resize параметр fx определяет масштаб изменений по ширине, fy — по высоте, а параметр interpolation отвечает за сам способ изменений (то есть расширение или сжатие).
Вращение
Вращение позволяет нам перемещать изображение вокруг определенной оси на заданный угол.
Перед тем как мы научимся вращать наши изображения при помощи библиотеки OpenСV, давайте вспомним, что существует линейный оператор под названием матрица поворота, который как раз и осуществляет преобразования такого рода. Мы не будем вдаваться в математические детали, так как в библиотеке OpenCV эта матрица вычисляется при помощи одного вызова функции. Вы это увидите в следующем коде:
В функции getRotationMatrix2D 180 — это угол, на который наше изображение должно быть повернуто, 1 — это масштабный коэффициент. Данная функция возвращает матрицу поворота, которая записывается в переменную matrix .
Далее функция warpAffine , используя вычисленную на предыдущем шаге матрицу поворота, поворачивает наше изображение в соответствии с заданной спецификацией.
Выводы
Подводя итоги, давайте еще раз пройдемся по наиболее важным местам в нашей статье. Библиотека OpenCV доступна на многих языках и часто используется вместе с библиотеками NumPy, SciPy и Matplotlib, как мы могли заметить в приведенных примерах. Некоторые функции библиотеки взяты из Matlab и также поддерживают векторные вычисления, что сильно повышает вычислительную эффективность.
Кроме того, OpenCV является одной из лучших библиотек для компьютерного зрения, и после прочтения этой статьи вы сможете найти много приложений машинного обучения, которые были разработаны с использованием OpenCV.
Также надо сказать, что данная статья приоткрывает лишь самую малость того, что есть в библиотеке OpenСV. Ее прочтение должно вдохновить вас еще глубже погрузиться в изучение этой библиотеки и узнать о многих других продвинутых функциях в ней.