Автор оригинала: Pankaj Kumar.
В этой статье мы поговорим о рисунке с Opencv. Если вы еще этого не сделали, обязательно прочитайте предыдущую статью о настройках пикселей с Python OpenCV.
Большая часть работы с обработкой изображений связана с идентификацией объектов и контуров в предоставленном изображении.
Это может быть сделано путем маркировки этих форм во время обработки.
Но как мы это делаем?
Тот же вопрос, который устроил ученых, работающих над обработкой изображений, привел к развитию рисунка в OpenCV.
Мы будем использовать несколько из этих функций, чтобы начать работу с рисунком в OpenCV в этой статье.
Обратите внимание, что это третья статья серии обработки изображений, и она могла бы хорошая идея посмотреть в вступительную сессию, прежде чем пройти через эту статью!
Рисование с Python Opencv
Давайте начнем рисовать с модулем OpenCV.
Настроить все это
Чтобы начать, нам сначала нужно импортировать модули, которые мы будем использовать для рисования в OpenCV.
Это, конечно, состоит из CV2
Модуль, но другой модуль, который мы будем использовать, это Numpy модуль Отказ
Если у вас нет Numpy, уже установленного в вашей системе, вот команда для установки его через PIP:
pip install numpy
Затем мы будем приступить к использованию этих модулей в коде, импортируя их в скрипт:
# importing the numpy module to create a canvas of 0 value pixels. import numpy as np # importing the OpenCV module import cv2
Для того, чтобы сделать что-либо, мы сначала нам нужно будет что-то нарисовать, поэтому давайте инициализируем холст, чтобы сделать это.
Мы будем делать это, создав холст, используя Numpy
модуль и сделать то, что имеет 300 × 300 пикселей со значением каждого пикселя, установленного на 0 Отказ
Это означает, что мы будем представлены на 900 пикселей Black Canvas, как Значение для 0 черного в изображениях.
# setting up a black canvas of 900 pixels canvas = np.zeros((300, 300, 3), dtype="uint8")
Мы также настроим цвет в переменной, который позволяет нам использовать его, когда мы рисуем объекты в холсте.
# setting the color green to a variable. green = (0, 255, 0)
Теперь, когда мы все настроили, давайте приложим рисовать предметы на холсте!
Давайте нарисуем линии
Теперь мы нарисуем две строки как диагонали, используя линия ()
функция.
Чтобы показать разницу между толщиной, мы будем изменять цвет для другой диагонали.
# To draw a green line across the canvas whose size you have to adjust through the editor? cv2.line(canvas, (0, 0), (300, 300), green) cv2.imshow("Canvas", canvas) cv2.waitKey(0) # Draws a three-inch red line across the other diagonal red = (0, 0, 255) cv2.line(canvas, (300, 0), (0, 300), red, 3) cv2.imshow("Canvas", canvas) cv2.waitKey(0)
Выход, который вы должны получить, должен выглядеть так, как это так,
Работа с коробками
Выходя вперед, мы можем использовать Прямоугольник ()
Функция из CV2
Модуль для рисования прямоугольников в холсте.
# While this command draws a rectangle given the right dimensions cv2.rectangle(canvas, (10, 10), (60, 60), green) cv2.imshow("Canvas", canvas) cv2.waitKey(0) # Draws a rectangle when specified the co-ordinates, with a thickness for the edges cv2.rectangle(canvas, (20, 20), (70, 70), red, 5) cv2.imshow("Canvas Red", canvas) # The duration for which the canvas stays by the defined value cv2.waitKey(0) blue = (255, 0, 0) # -1 thickness causes the entire box to get filled. cv2.rectangle(canvas, (200, 50), (225, 125), blue, -1) cv2.imshow("Canvas Blue", canvas) cv2.waitKey(0)
Выход, который вы должны получать при этом, следует посмотреть что-то подобное:
Круги и рандомизация
Смешивая вещи, мы теперь будем приступить к работе с кругами. Вот два примера работы с кругами.
Концентрические круги
Здесь мы центрируем точку происхождения для всех кругов, и рисуя их с приращими радиуса.
# centers the canvas to the center and forms rings based on the increment of the radius canvas = np.zeros((300, 300, 3), dtype="uint8") (centerX, centerY) = (int(canvas.shape[1] / 2), int(canvas.shape[0] / 2)) white = (255, 255, 255) for r in range(0, 175, 25): cv2.circle(canvas, (centerX, centerY), r, white) cv2.imshow("Canvas White", canvas) cv2.waitKey(0)
Выход, который вы получаете, должен выглядеть что-то подобное,
Случайные круги
Здесь мы используем модуль Numpy, чтобы рандомизировать размер кругов и точек, при которых они будут размещены в холсте.
Мы также разместим Waitkey ()
Таким, что мы можем просмотреть каждый круг индивидуально, прежде чем перейти к следующему.
# Drawing circles on random with varying radii, # throughout the canvas for i in range(0, 25): radius = np.random.randint(5, high=200) color = np.random.randint(0, high=256, size=(3,)).tolist() pt = np.random.randint(0, high=300, size=(2,)) cv2.circle(canvas, tuple(pt), radius, color, -1) cv2.imshow("Canvas", canvas) cv2.waitKey(0)
Работая с кругами, выход, который вы получаете, будет случайным, и как таковой, лучше проверить его самостоятельно 😉
Изменяя существующие изображения
Мы можем изменить существующие изображения, загрузив их в переменную, используя cv2.imread ()
функция.
# reading the image into a variable using the imread() function image = cv2.imread( "D:\\image-processing\\assets\\ey.jpg" ) # drawing three circles and a rectangle on the image cv2.circle(image, (168, 188), 90, (0, 0, 255), -2) cv2.circle(image, (150, 164), 10, (0, 0, 255), -1) cv2.circle(image, (192, 174), 10, (0, 0, 255), -1) cv2.rectangle(image, (134, 200), (186, 218), (0, 0, 255), -1) # showing the output of the process cv2.imshow("Output", image) cv2.waitKey(0)
Я вводит изображение, которое присутствует в активах репозитория, но вы можете использовать свое собственное изображение.
Это можно сделать, изменяя расположение изображения!
Заключение
Мы научились выполнять рисунок с OpenCV. Случаи использования для работы с рисунком в OpenCV определенно не бесполезны.
На протяжении всего процесса работы с обработкой изображений мы можем рисовать контуры на изображениях, рисовать коробки при идентификации объектов и использовать его для объектов живого отслеживания в видео.
Реализации чертежа в OpenCV позволяет нам работать с моделями машинного обучения в будущем.
Хотите посмотреть на будущее, где мы работаем с обработкой изображений в более широком масштабе?
Посмотрите в OpenCV и распознавание лица и реализация Java Android и Camerax Opencv!