Как подключить opencv к python
Установка OpenCV + CUDA на Windows
Введение
В данной статье речь пойдет о сборке и установке OpenCV 4 для C/C++, Python 2 и Python 3 из исходных файлов с дополнительными модулями CUDA 10 на ОС Windows.
Я постарался включить сюда все тонкости и нюансы, с которыми можно столкнуться в ходе установки, и про которые не написано в официальном мануале.
Сборка тестировалась для:
Что потребуется для установки
В моей сборке использовались следующие инструменты:
Установка
Так как установка производится через консольные команды, то следует внимательно и аккуратно выполнять все шаги. Также, при необходимости, меняйте установочные пути на свои.
Для начала необходимо установить требуемое ПО, причем Visual Studio должна быть установлена до CUDA:
Далее загружаем архивы исходников opencv-4.1.1 и opencv-contrib-4.1.1 в желаемое место (в моем случае это C:\OpenCV\).
Создаем папку build/ внутри opencv-4.1.1.
Далее сгенерируем файлы сборки с помощью cmake. Мы будем использовать консольный вариант cmake, так как cmake-gui путает типы некоторых переменных (например, OPENCV_PYTHON3_VERSION) и, как следствие, неправильно генерирует файлы.
Открываем консоль по пути C:\OpenCV\ и прописываем переменные.
Примечание. Для Visual Studio 2017 генератор пишется как «Visual Studio 15 2017 Win64» и без флага -A.
Также можно явно указать питоновские библиотеки для python 2 и python 3 на случай, если сборщик не сможет найти их автоматически.
Примечание. Обратите внимание на то, что библиотека NumPy должна быть той же разрядности, что и OpenCV. Проверить это легко:
Выполняем генерацию файлов сборки с помощью длинной команды ниже. При неудачной генерации или наличии ошибок после выполнения команды, повторную генерацию следует производить вычистив все файлы в build/ и .cache/.
Спустя примерно 10 минут в консоле должна появиться информация о сборке и завершающие строки «Configuring done» и «Generating done». Проверяем всю информацию, особенно разделы NVIDIA CUDA, Python 2, Python 3.
Далее собираем решение. На сборку может уйти несколько часов в зависимости от вашего процессора и версии Visual Studio.
После успешной установки создаем системную переменную OPENCV_DIR со значением C:\OpenCV\opencv-4.1.1\build\install\x64\vc15\bin и также добавляем ее в PATH.
Проверим работоспособность OpenCV с модулем CUDA на простом примере умножения матриц.
Пример на Python 3
Удаление
Чтобы удалить OpenCV, нужно выполнить команду.
и удалить системную переменную OPENCV_DIR и убрать путь до OpenCV из PATH.
Заключение
В статье мы рассмотрели установку OpenCV 4 для ОС Windows 10. Данный алгоритм тестировался на Windows 8.1 и Windows 10, но, в теории, может собираться и на Windows 7. За дополнительной информацией можно обратиться к списку источников ниже.
OpenCV в Python. Часть 1
Привет, Хабр! Запускаю цикл статей по библиотеке OpenCV в Python. Кому интересно, добро пожаловать под кат!
Введение
OpenCV — это open source библиотека компьютерного зрения, которая предназначена для анализа, классификации и обработки изображений. Широко используется в таких языках как C, C++, Python и Java.
Установка
Будем считать, что Python и библиотека OpenCV у вас уже установлены, если нет, то вот инструкция для установки python на windows и на ubuntu, установка OpenCV на windows и на ubuntu.
Немного про пиксели и цветовые пространства
Перед тем как перейти к практике, нам нужно разобраться немного с теорией. Каждое изображение состоит из набора пикселей. Пиксель — это строительный блок изображения. Если представить изображение в виде сетки, то каждый квадрат в сетке содержит один пиксель, где точке с координатой ( 0, 0 ) соответствует верхний левый угол изображения. К примеру, представим, что у нас есть изображение с разрешением 400×300 пикселей. Это означает, что наша сетка состоит из 400 строк и 300 столбцов. В совокупности в нашем изображении есть 400*300 = 120000 пикселей.
В большинстве изображений пиксели представлены двумя способами: в оттенках серого и в цветовом пространстве RGB. В изображениях в оттенках серого каждый пиксель имеет значение между 0 и 255, где 0 соответствует чёрному, а 255 соответствует белому. А значения между 0 и 255 принимают различные оттенки серого, где значения ближе к 0 более тёмные, а значения ближе к 255 более светлые:
Цветные пиксели обычно представлены в цветовом пространстве RGB(red, green, blue — красный, зелёный, синий), где одно значение для красной компоненты, одно для зелёной и одно для синей. Каждая из трёх компонент представлена целым числом в диапазоне от 0 до 255 включительно, которое указывает как «много» цвета содержится. Исходя из того, что каждая компонента представлена в диапазоне [0,255], то для того, чтобы представить насыщенность каждого цвета, нам будет достаточно 8-битного целого беззнакового числа. Затем мы объединяем значения всех трёх компонент в кортеж вида (красный, зеленый, синий). К примеру, чтобы получить белый цвет, каждая из компонент должна равняться 255: (255, 255, 255). Тогда, чтобы получить чёрный цвет, каждая из компонент должна быть равной 0: (0, 0, 0). Ниже приведены распространённые цвета, представленные в виде RGB кортежей:
Импорт библиотеки OpenCV
Теперь перейдём к практической части. Первое, что нам необходимо сделать — это импортировать библиотеку. Есть несколько путей импорта, самый распространённый — это использовать выражение:
Также можно встретить следующую конструкцию для импорта данной библиотеки:
Загрузка, отображение и сохранение изображения
Для загрузки изображения мы используем функцию cv2.imread(), где первым аргументом указывается путь к изображению, а вторым аргументом, который является необязательным, мы указываем, в каком цветовом пространстве мы хотим считать наше изображение. Чтобы считать изображение в RGB — cv2.IMREAD_COLOR, в оттенках серого — cv2.IMREAD_GRAYSCALE. По умолчанию данный аргумент принимает значение cv2.IMREAD_COLOR. Данная функция возвращает 2D (для изображения в оттенках серого) либо 3D (для цветного изображения) массив NumPy. Форма массива для цветного изображения: высота x ширина x 3, где 3 — это байты, по одному байту на каждую из компонент. В изображениях в оттенках серого всё немного проще: высота x ширина.
С помощью функции cv2.imshow() мы отображаем изображение на нашем экране. В качестве первого аргумента мы передаём функции название нашего окна, а вторым аргументом изображение, которое мы загрузили с диска, однако, если мы далее не укажем функцию cv2.waitKey(), то изображение моментально закроется. Данная функция останавливает выполнение программы до нажатия клавиши, которую нужно передать первым аргументом. Для того, чтобы любая клавиша была засчитана передаётся 0. Слева представлено изображение в оттенках серого, а справа в формате RGB:
И, наконец, с помощью функции cv2.imwrite() записываем изображение в файл в формате jpg(данная библиотека поддерживает все популярные форматы изображений:png, tiff,jpeg,bmp и т. д., поэтому можно было сохранить наше изображение в любом из этих форматов), где первым аргументом передаётся непосредственно само название и расширение, а следующим параметром изображение, которое мы хотим сохранить.
Доступ к пикселям и манипулирование ими
Для того, чтобы узнать высоту, ширину и количество каналов у изображения можно использовать атрибут shape:
Важно помнить, что у изображений в оттенках серого img.shape[2] будет недоступно, так как данные изображения представлены в виде 2D массива.
Чтобы получить доступ к значению пикселя, нам просто нужно указать координаты x и y пикселя, который нас интересует. Также важно помнить, что библиотека OpenCV хранит каналы формата RGB в обратном порядке, в то время как мы думаем в терминах красного, зеленого и синего, то OpenCV хранит их в порядке синего, зеленого и красного цветов:
Cначала мы берём пиксель, который расположен в точке (0,0). Данный пиксель, да и любой другой пиксель, представлены в виде кортежа. Заметьте, что название переменных расположены в порядке b, g и r. В следующей строке выводим значение каждого канала на экран. Как можно увидеть, доступ к значениям пикселей довольно прост, также просто можно и манипулировать значениями пикселей:
В первой строке мы устанавливаем значение пикселя (0, 0) равным (255, 0, 0), затем мы снова берём значение данного пикселя и выводим его на экран, в результате мне на консоль вывелось следующее:
На этом у нас конец первой части. Если вдруг кому-то нужен исходный код и картинка, то вот ссылка на github. Всем спасибо за внимание!
Как подключить opencv к python
Below steps are tested in a Windows 7-64 bit machine with Visual Studio 2010 and Visual Studio 2012. The screenshots shows VS2012.
Installing OpenCV from prebuilt binaries
Building OpenCV from source
Download and install necessary Python packages to their default locations
Click on Configure.
It will open a new window to select the compiler. Choose appropriate compiler (here, Visual Studio 11) and click Finish.
You will see all the fields are marked in red. Click on the WITH field to expand it. It decides what extra features you need. So mark appropriate fields. See the below image:
Now click on BUILD field to expand it. First few fields configure the build method. See the below image:
Remaining fields specify what modules are to be built. Since GPU modules are not yet supported by OpenCV-Python, you can completely avoid it to save time (But if you work with them, keep it there). See the image below:
Now click on ENABLE field to expand it. Make sure ENABLE_SOLUTION_FOLDERS is unchecked (Solution folders are not supported by Visual Studio Express edition). See the image below:
Also make sure that in the PYTHON field, everything is filled. (Ignore PYTHON_DEBUG_LIBRARY). See image below:
Again, right-click on INSTALL and build it. Now OpenCV-Python will be installed.
Additional Resources
Exercises
If you have a windows machine, compile the OpenCV from source. Do all kinds of hacks. If you meet any problem, visit OpenCV forum and explain your problem.
OpenCV в Python: Часть 1 — Работа с изображениями и видео
Добро пожаловать! Перед вами первая статья из серии OpenCV в Python, которая, как вы уже догадались по названию, посвящена тому, как научиться комфортно работать в OpenCV.
Я понимаю, что у каждого свой стиль обучения, но я настоятельно рекомендую вам вместе со мной следовать за мыслью и писать код по мере прохождения уроков. Все файлы кода и данных будут доступны в конце каждой статьи. Если у вас будут появляться вопросы, не стесняйтесь их задавать.
Не будем терять времени, начнем!
Начало работы с OpenCV
Поскольку мы начинаем с самого начала, в этом разделе мы поговорим об основах обработки изображений. Чтобы начать работать с OpenCV, надо сначала ее установить. Для этого введите команду в терминале (на Windows):
Как только установка будет завершена, можно начинать писать код.
Для начала давайте импортируем необходимые библиотеки.
Модуль cv2 – это и есть OpenCV. Его мы будем использовать для анализа изображений и видео. Модуль argparse будет полезен при работе с аргументами, передаваемыми через терминал. Если вам неудобно работать с командой строкой, можете почитать это руководство (https://www.pyimagesearch.com/2018/03/12/python-argparse-command-line-arguments/), в котором все очень хорошо объясняется.
Работать мы будем с этим изображением.
Разместите это изображение (или любое другое на выбор) в директорию, где находится ваш файл с программой.
В терминале мы передадим это изображение в качестве аргумента, поэтому в файле с исходным кодом нужно сделать парсер аргументов.
Второй аргумент конвертирует изображение в оттенки серого. Этот шаг мы будем часто выполнять при работе с изображениями и видео, потому что обработка цветных изображений намного сложнее и занимает много времени, тогда как зачастую изображений в оттенках серого вполне достаточно для многих задач. Следовательно, нам нет необходимости использовать более сложные и трудные в обработке цветные изображения.
Для отображения изображений используется метод imshow. Первый аргумент – заголовок отображаемого изображения, а второй – сама переменная изображения.
cv2.waitKey(0) будет ждать, пока пользователь не нажмет любую клавишу, после чего окно с изображением закроется.
Помимо вывода самого изображения, эту переменную image можно использовать для отображения некоторой базовой информации, такой как высота и ширина изображения.
Метод imwrite принимает путь к выходному изображению, которое будет сохранено в качестве первого аргумента, и переменную с изображением в качестве второго. Если вы хотите изменить тип файла, просто измените его в имени пути, а OpenCV позаботится об остальном.
А вот и полный код:
Команда для выполнения файла:
Примечание: Я назвал файл с программой app.py, а файл с изображением photo_one.jpeg, не забудьте вставить свои названия.
После выполнения этого файла, вы получите исходное изображение в оттенках серого:
В вашем основном каталоге создастся папка с изображениями, в которой вы увидите то же изображение, что и в файле newimage.png.
Работа с видео в OpenCV
Теперь, когда мы закончили с изображениями, пришло время познакомиться с основами взаимодействия с веб-камерой или видеофайлами в OpenCV. Работа с видео мало чем отличается от работы с изображениями, поскольку видео состоит из кадров, которые по сути являются изображениями.
Для начала импортируем библиотеки.
Число, которое мы передаем, означает источник. 0 – первая веб-камера в вашей системе, 1 – вторая и т.д.
Если вы хотите загрузить уже существующий видеофайл вместо захвата прямой трансляции, просто на место номера вставьте путь к нему.
Функция cap.read() возвращает логическое значение (True/False) и кадр. Если кадр был считан верно, то возвращается True.
cv2.imshow() используется для отображения видео. Название видео будет первым аргументом.
Поскольку мы сделали бесконечный цикл, нам нужно что-то, что его прервет.
Поначалу этот фрагмент кода может показаться странным, но как только вы разберетесь в деталях, станет легче.
В этом сценарии 0xFF – это 8-битный двоичный код 11111111, поскольку для представления символа «q». В результате вы получите целое число меньшее 255.
После того, как мы закончим использовать камеру, ее нужно «освободить». Если мы этого не сделаем, то в следующий раз при попытке ее использовать, вы получите ошибку.
Теперь пришло время запустить файл. На всякий случай, если вы не проследили, приведу весь код этого раздела:
После выполнения файла, вы увидите изображение с веб-камеры в окне под названием «video feed». Чтобы закрыть окно, нажмите «q».
Помните, как мы преобразовали наше цветное изображение в оттенки серого и сохранили его на диске? То же самое можно сделать и с видео. Нужно просто внести несколько незначительных изменений.
В цикл while добавьте следующие инструкции:
После сохранения и выполнения файла вы получите два окна:
Версию в оттенках серого.
Теперь мы можем выводить два или более окон, когда хотим сравнить наши изменения с исходным файлом/потоком. Так проще обнаруживать изменения, которые мы внесли.
Имя выходного файла будет первым аргументом. Затем нужно передать количество кадров в секунду (fps) и размер кадра.
Чтобы сохранить видео, нужно записать каждый кадр в цикле while.
После выполнения этого кода вы заметите, что видео с именем «output.avi» будет присутствовать в вашем главном каталоге. Вот видео, которое мы только что записали и сохранили на диск.
Итоги
В этой статье мы поговорили о самом простейшем – загрузке и записи мультимедийного контента. OpenCV – очень мощный инструмент, который можно использовать для гораздо более высокоуровневых работ.
На данный момент, я надеюсь, что вам стало гораздо удобнее работать с OpenCV. На самом деле, я бы посоветовал вам почитать официальную документацию и повозиться с кодом, пока я пишу следующую статью этой серии, которую посвящу более сложному контенту.
Ссылки на следующие статьи будут появляться здесь же, так что следите.
Уроки компьютерного зрения на Python + OpenCV с самых азов
В этом цикле уроков я расскажу о том, как использовать библиотеку OpenCV в языке Python. Но для начала несколько слов о самом компьютерном зрении. Как компьютер вообще видит? Если подключить к нему видеокамеру, это еще не значит, что он будет видеть. Мы получим просто набор нулей и единиц. А человек видит что-то осмысленное. Как же из этих нулей и единиц извлечь что-то осмысленно? В этом и состоит задача компьютерного зрения.
Как правило, анализ изображения алгоритмами компьютерного зрения проходит следующие этапы (но некоторых этапов может и не быть):
1. Предобработка изображения. На этом этапе может происходить улучшения качества изображения, такое как увеличение контрастности, повышение резкости или наоборот, размытие изображения, чтобы удалить из него шумы и мелкие незначительные детали. Все это нужно для того, чтобы в дальнейшем было легче производить анализ изображения.
2. Промежуточная фильтрация. На этом этапе к изображению применяют различные фильтры, для того, чтобы обозначить на изображения области интереса или облегчить работу специальным алгоритмам анализа изображения.
3. Выявление специальных признаков (фич). Это может быть выделение особых точек, выделение контуров или еще каких-либо признаков.
4. Высокоуровневый анализ. На этом этапе по найденным признакам на изображения определяться конкретные объекты, и, как правило, их координаты. Так же на этом этапе может происходить сегментация либо какая-то иная высокоуровневая обработка.
Ну а теперь перейдем к делу. Мы рассмотрим работу с Python + OpenCV в среде PyCharm. Сначала нам надо установить OpenCV. Для этого идем в Settings:
Далее в ProjectInterpreter и там жмем на плюсик:
Ищем там opencv и устанавливаем его:
Теперь напишем наш «Hello, World» — программу, которая отобразит картинку:
Вот такое вот окно откроет данная программа:
Что делает программа? Она загружает изображение из файла, отображает его и ждет нажатие клавиши ESC для завершения работы.
Давайте попробуем что-нибудь сделать с этим изображением. Например, можно изменить его размер. Допустим, мы хотим сделать изображение шириной 200. Для этого вычислим его высоту, и применим эти данные для масштабирования:
Вот что у нас получилось:
Часто для облегчения анализа изображения требуется сделать картинку черно-белой. Один из способов – это загрузить картинку сразу в черно-белом цветом пространстве:
Если нужно преобразовать уже загруженную картинку, то можно воспользоваться функцией cvtColor, которая преобразует изображение из одного цветового пространства в другое:
Вот как это будет выглядеть:
Итак, подытожим.
Мы научились устанавливать OpenCV, загружать из файла и отображать изображение, а так же делать в нем простейшие преобразования, такие как масштабирования и конвертацию цветного изображения в черно белое. Если данный урок «зайдет» то будет продолжение.















