Цель
- Научитесь рисовать различные геометрические фигуры с помощью OpenCV
- Вы изучите следующие функции:cv.line(),cv.circle(),cv.rectangle(),cv.ellipse(),cv.putText()Ждать.
код
Во всех вышеперечисленных функциях вы увидите следующие общие параметры:
- img: изображение, к которому вы хотите нарисовать фигуру
- цвет: цвет фигуры. Для BGR передайте его как кортеж, например: (255,0,0) для синего. Для оттенков серого просто передайте скалярное значение.
- Толщина: Толщина линии или окружности и т. д. Если передано замкнутой фигуре (например, кругу)
-1
, он заполнит форму.Толщина по умолчанию = 1 - lineType: тип линии, будь то 8 соединительных линий, линии сглаживания и т. д.по умолчанию, на 8 соединительных линий.cv.LINE_AAДает сглаженные линии, идеально подходящие для кривых.
рисование линий
Чтобы нарисовать линию, вам нужно передать начальную и конечную координаты линии. Мы создадим черное изображение и проведем на нем синюю линию из левого верхнего угла в правый нижний угол.
import numpy as np
import cv2 as cv
# 创建黑色的图像
img = np.zeros((512,512,3), np.uint8)
# 绘制一条厚度为5的蓝色对角线
cv.line(img,(0,0),(511,511),(255,0,0),5)
нарисовать прямоугольник
Чтобы нарисовать прямоугольник, вам понадобятся верхний левый и нижний правый углы прямоугольника. На этот раз мы нарисуем зеленый прямоугольник в правом верхнем углу изображения.cv.rectangle(img,(384,0),(510,128),(0,255,0),3)
рисовать круги
Чтобы нарисовать круг, вам нужны координаты его центра и радиус. Мы нарисуем круг внутри прямоугольника, нарисованного выше.cv.circle(img,(447,63), 63, (0,0,255), -1)
нарисовать эллипс
Чтобы нарисовать эллипс, нам нужно передать несколько параметров. Одним из параметров является центральное положение (x, y). Следующий параметр — длина оси (длина большой оси, длина короткой оси). угол - это угол, на который эллипс повернут против часовой стрелки. startAngle и endAngle представляют начало и конец эллиптической дуги, измеренные по часовой стрелке от главной оси. т. е. указание 0 и 360 дает полный эллипс. Подробнее см.cv.ellipseдокументация. В следующем примере в центре изображения рисуется овал.
cv.ellipse(img,(256,256),(100,50),0,0,180,255,-1)
рисовать многоугольники
Чтобы нарисовать многоугольник, вам сначала нужны координаты вершин. Составляя эти точки в видеROWSx1x2
массив из которыхROWS
является количеством вершин и должен иметь тип int32. Здесь мы рисуем маленький желтый многоугольник с четырьмя вершинами.
pts = np.array([[10,5],[20,30],[70,20],[50,10]], np.int32)
pts = pts.reshape((-1,1,2))
cv.polylines(img,[pts],True,(0,255,255))
Уведомление
Если третий параметр равен False, вы получите ломаную линию, соединяющую все точки, а не замкнутую фигуру.
cv.polylines() можно использовать для рисования нескольких линий. Просто создайте список всех линий, которые вы хотите нарисовать, и передайте его функции. Все линии будут нарисованы индивидуально. с вызовом для каждой строкиcv.lineРисование набора линий является лучшим и более быстрым методом, чем .
Добавьте текст к изображению:
Чтобы поместить текст в изображение, необходимо указать следующее.
- Текстовые данные, которые вы хотите записать
- Координаты места, где вы хотите его разместить (т. е. нижний левый угол, где начинаются данные).
- тип шрифта (отметьтеcv.putTextдокументацию по поддерживаемым шрифтам)
- масштаб шрифта (указать размер шрифта)
- Общие сведения, такие как цвет, толщина, тип линии и т. д. Для лучшего просмотра рекомендуется использовать lineType=cv.LINE_AA.
Мы будем писать на белом изображенииOpenCV.
font = cv.FONT_HERSHEY_SIMPLEX
cv.putText(img,'OpenCV',(10,500), font, 4,(255,255,255),2,cv.LINE_AA)
результат
Теперь пришло время увидеть окончательный результат нашего рисунка. Как вы узнали из предыдущих статей, отобразите изображение, чтобы увидеть его.
Другие источники
- Углы, используемые в функции эллипса, не являются нашими закругленными углами. Для получения дополнительной информации посетите это обсуждение: http://answers.opencv.org/question/14541/angles-in-ellipse-function/.
практические вопросы
- Попытка создать логотип OpenCV, используя функции рисования, доступные в OpenCV.