Создание контура кривых и фигур
Создание контура позволяет сместить контур и обводку объекта (кривой или фигуры) недеструктивным способом.
Путем создания контура можно расширить или сжать контур объекта относительно исходного контура: если обводка применена к объекту, он также будет смещен, поскольку имеет место обтекание контура объекта.
Можно изменять размеры контура путем перетаскивания. Размер обводки будет меняться автоматически и будет смещаться по мере перетаскивания по направлению вовнутрь или наружу. Также можно корректировать объединения обводки и изменять тип заливки фигуры, выбрав прозрачную или сплошную заливку.
Базовая геометрия обозначается для углубления понимания эффектов создания контура и может использоваться при редактировании объекта с помощью инструмента «Узел» .
Чтобы создать контур, выполните указанные далее действия.
- На панели Инструменты выберите инструмент «Контур» .
- Выделите кривую или фигуру, перетащите контур влево или вправо в любую область страницы, чтобы сжать или расширить его соответственно. Например, чем дальше вы перетащите его вправо, увеличивая радиус, тем более выраженным будет контур.
- (Необязательно.) Отрегулируйте настройки контекстной панели инструментов, чтобы:
- задать точный объем контура ( Радиус );
- настроить отображение объединения на острых узлах кривой или фигуры с уже примененным контуром ( Тип контура );
- (с выбранным типом контура Угловые соединения ) отрегулировать длину вытягивания стыков при создании острого или тупого угла;
- настроить отображение концов линий кривых ( Конец );
- настроить тип заливки фигуры (см. ниже).
Чтобы сделать фигуру прозрачной или заполненной, выполните указанные далее действия.
- Выделите фигуру с уже примененным контуром.
- На контекстной панели инструментов выберите пункт Принудительно разомкнутый или Принудительно замкнутый .
Команды «Принудительно разомкнутый» и «Принудительно замкнутый» позволяют достигать различных результатов и изменять способ создания контура.
- Выделите фигуру.
- На контекстной панели инструментов задайте значение «0 пикс» для параметра Радиус .
ТАКЖЕ СМ.:
- Инструмент «Контур»
- О геометрических фигурах
Чем выделить контур фигуры программа
Можно создать контур объекта для формирования ряда концентрических линий, идущих внутрь или наружу объекта. CorelDRAW также позволяет задать количество контурных линий и расстояние между ними.
Кроме создания интересных трехмерных эффектов и теней в сложных рисунках, с помощью контуров можно создавать обрезаемые абрисы для таких устройств, как плоттеры, гравировальные машины и устройства для вырезания из винила.
После создания контура для объекта можно копировать или клонировать параметры контура этого объекта в другой объект. Можно также изменить цвета заливки между контурными линиями и самими абрисами. Можно задать последовательность изменения цвета для контурного эффекта, в котором один цвет перетекает в другой. В выбранном диапазоне цветов последовательность их изменения может быть прямой, по часовой стрелке или против часовой стрелки.
Кроме того, можно выбрать способ отображения углов контура. Например, можно использовать острые или скругленные углы или применить скос к острым углам контура.
Можно разделить объект и его контурные линии.
Центральный контур уже применен к вышеуказанному объекту. Количество контурных линий, а также расстояние между ними, можно изменить.
Для изображенного выше объекта был применен внешний контур. Обратите внимание на то, что контур абриса проецируется из-за внешнего края объекта.
Создание контуров для объекта
1 В наборе инструментов выберите инструмент Контур .
2 Щелкните объект или набор сгруппированных объектов и перетащите начальный маркер к центру для создания внутреннего контура или от центра для создания контура абриса.
3 Переместите регулятор объекта для изменения количества шагов контура.
Дополнительные возможности
Добавление контурных линий в центр выбранного объекта
Нажмите кнопку К центру .
Указание количества контурных линий
На панели свойств нажмите кнопку Внутренний контур или Контур абриса и введите значение в поле Шаги контура .
Внутренний контур с двумя шагами (слева) и четырьмя шагами (справа)
Указание расстояния между контурными линиями
Введите значение в поле Смещение контура на панели свойств.
Ускорение последовательности изменения контурных линий (изменение форм контура)
Нажмите кнопку Ускорение объекта и цвета на панели свойств и переместите регулятор Объект .
Слева направо: Внутренний контур без ускорения, с более низким ускорением, с более высоким ускорением
Выбор формы углов контура
Нажмите кнопку Углы контура на панели свойств и выберите одну из следующих команд.
• Острые углы
• Закругление углов
• Скошенные углы
Создать контуры можно, нажав Эффекты Контур (вторая команда Контур в меню Эффекты ) и задав нужные параметры в окне настройки Контур .
Копирование или клонирование контура
1 Выберите объект, к которому необходимо применить контурный эффект.
2 Выберите Объект и щелкните один из следующих параметров.
• Копировать эффект Контур
• Клонировать эффект Контур
3 Выберите объект, контурный эффект которого необходимо скопировать или клонировать.
Для копирования контура можно также использовать инструмент Пипетка атрибутов . Дополнительные сведения см. в разделе Копирование эффектов из одного объекта в другой.
Установка цвета заливки для объекта контура
1 В наборе инструментов выберите инструмент Контур .
2 Выберите объект контура.
3 На панели свойств щелкните Цвет заливки и выберите цвет.
Если цвет заливки не удается применить, необходимо убедиться, что в строке состояния параметру Цвет заливки соответствует активное состояние.
Если для исходного объекта была применена фонтанная заливка, то появится второе меню выбора цвета.
Можно ускорить последовательность изменения цвета заливки, нажав кнопку Ускорение объекта и цвета на панели свойств и переместив регулятор.
Можно изменить цвет центра контура, перетащив цвет из цветовой палитры на конечный маркер заливки.
Выбор цвета абриса для объекта контура
1 В наборе инструментов выберите инструмент Контур .
2 Выберите объект контура.
3 Откройте меню выбора Цвет абриса на панели свойств и выберите цвет.
Установка последовательности изменения цвета заливки
1 В наборе инструментов выберите инструмент Контур .
2 Выберите объект контура.
3 Нажмите кнопку Цвета абриса на панели свойств и нажмите одну из следующих кнопок:
• Цвета линейного контура
• Цвета контура по часовой стрелке
• Цвета контура против часовой стрелки
Заливка слева направо: линейная, по часовой стрелке, против часовой стрелки
Отделение объектов от их контурных линий
1 С помощью инструмента Указатель выберите объект с контуром.
2 Выберите Объект Разъединить контур .
Функции, указанные в справке, доступны в полной версии CorelDRAW Graphics Suite 2021. Некоторые функции могут быть недоступны в этой версии продукта.
Цветной контур
Векторные инструменты предназначены для создания разнообразных фигур, которые находятся на отдельном векторном слое. Границы векторных фигур могут быть выделены цветом. Цветной контур будет добавлен ко всем фигурам выбранного векторного слоя.
Параметры обводки фигуры
Настройки обводки фигур будут показаны при нажатии значка справа от названия выбранного векторного слоя или кнопки на Панели опций в закладке Контур.
Типы обводки:
Нет обводки На границе фигуры не будет контура.
Нет обводки
Цветной контур Граница выбранной фигуры будет выделена цветным контуром.
Цветной контур
Цвет контура выбирается в спектральном поле — при подведении к нему курсор принимает форму пипетки. Чтобы установить новый цвет, достаточно щёлкнуть пипеткой внутри поля.
В прямоугольной пластине ниже указывается выбранный цвет. При двойном клике по ней вызывается диалог выбора цвета. Последние выбранные цвета находятся в полях рядом.
Параметр Ширина (1-100) определяет толщину цветного контура.
Ширина = 5
Ширина = 25
С помощью выпадающих меню настроить вид линии обводки:
Выбрать тип линии обводки.
Сплошная линия
Пунктирная линия
Указать вид края штрихов несплошной линии обводки.
Короткий штрих
Длинный штрих
Скругленный штрих
Выбрать вид контура в углах фигуры.
Острый угол
Скошенный угол
Скругленный угол
Чтобы изменить цвет фигуры, нужно в диалоговом окне настроить параметры в закладке Заливка.
OpenCV на python: выделение контуров
Освоив работу с цветовыми фильтрами приступим к изучению ещё одного важного инструмента машинного зрения — функции выделения контуров.
Контур объекта — это его видимый край, который отделяет объект от фона. В действительности, большинство методов анализа изображений работают именно с контурами, а не с пикселями как таковыми. Совокупность методов работы с контурами называется контурным анализом.
Возьмём в качестве подопытного изображения что-нибудь такое, где есть ярко выраженные вложенные контуры, какой-нибудь диск. И попробуем применить к нему стандартные функции OpenCV для поиска и визуализации контуров объектов.
1. Функция OpenCV для поиска контуров findContours
В OpenCV для поиска контуров имеется функцией findContours, которая имеет вид:
findContours( кадр, режим_группировки, метод_упаковки [, контуры[, иерархия[, сдвиг]]])
кадр — должным образом подготовленная для анализа картинка. Это должно быть 8-битное изображение. Поиск контуров использует для работы монохромное изображение, так что все пиксели картинки с ненулевым цветом будут интерпретироваться как 1, а все нулевые останутся нулями. На уроке про поиск цветных объектов была точно такая же ситуация.
режим_группировки — один из четырех режимов группировки найденных контуров:
- CV_RETR_LIST — выдаёт все контуры без группировки;
- CV_RETR_EXTERNAL — выдаёт только крайние внешние контуры. Например, если в кадре будет пончик, то функция вернет его внешнюю границу без дырки.
- CV_RETR_CCOMP — группирует контуры в двухуровневую иерархию. На верхнем уровне — внешние контуры объекта. На втором уровне — контуры отверстий, если таковые имеются. Все остальные контуры попадают на верхний уровень.
- CV_RETR_TREE — группирует контуры в многоуровневую иерархию.
метод_упаковки — один из трёх методов упаковки контуров:
- CV_CHAIN_APPROX_NONE — упаковка отсутствует и все контуры хранятся в виде отрезков, состоящих из двух пикселей.
- CV_CHAIN_APPROX_SIMPLE — склеивает все горизонтальные, вертикальные и диагональные контуры.
- CV_CHAIN_APPROX_TC89_L1,CV_CHAIN_APPROX_TC89_KCOS — применяет к контурам метод упаковки (аппроксимации) Teh-Chin.
контуры — список всех найденных контуров, представленных в виде векторов;
иерархия — информация о топологии контуров. Каждый элемент иерархии представляет собой сборку из четырех индексов, которая соответствует контуру[i]:
- иерархия[i][0] — индекс следующего контура на текущем слое;
- иерархия[i][1] — индекс предыдущего контура на текущем слое:
- иерархия[i][2] — индекс первого контура на вложенном слое;
- иерархия[i][3] — индекс родительского контура.
сдвиг — величина смещения точек контура.
2. Функция OpenCV для отображения контуров drawContours
Полученные с помощью функции findContours контуры хорошо бы каким-то образом нарисовать в кадре. Машине это не нужно, зато нам это поможет лучше понять как выглядят найденные алгоритмом контуры. Поможет в этом ещё одна полезная функция — drawContours.
drawContours( кадр, контуры, индекс, цвет[, толщина[, тип_линии[, иерархия[, макс_слой[, сдвиг]]]]])
кадр — кадр, поверх которого мы будем отрисовывать контуры;
контуры — те самые контуры, найденные функцией findContours;
индекс — индекс контура, который следует отобразить. -1 — если нужно отобразить все контуры;
цвет — цвет контура;
толщина — толщина линии контура;
тип_линии — тип соединения точек вектора;
иерархия — информация об иерархии контуров;
макс_слой — индекс слоя, который следует отображать. Если параметр равен 0, то будет отображен только выбранный контур. Если параметр равен 1, то отобразится выбранный контур и все его дочерние контуры. Если параметр равен 2, то отобразится выбранный контур, все его дочерние и дочерние дочерних! И так далее.
сдвиг — величина смещения точек контура.
3. Программа поиска и отображения контуров
Теперь напишем программу, которая будет искать контуры предметов в кадре с пончиком. Прежде всего, следует подготовить изображение. Помним, что функция findContours работает с монохромной картинкой, и нам потребуется обработать наш пончик цветовым фильтром, чтобы сам пончик стал абсолютно белым, а фон — чёрным.
import sys import numpy as np import cv2 as cv # параметры цветового фильтра hsv_min = np.array((2, 28, 65), np.uint8) hsv_max = np.array((26, 238, 255), np.uint8) if __name__ == '__main__': print(__doc__) fn = 'image.jpg' # путь к файлу с картинкой img = cv.imread(fn) hsv = cv.cvtColor( img, cv.COLOR_BGR2HSV ) # меняем цветовую модель с BGR на HSV thresh = cv.inRange( hsv, hsv_min, hsv_max ) # применяем цветовой фильтр # ищем контуры и складируем их в переменную contours _, contours, hierarchy = cv.findContours( thresh.copy(), cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE) # отображаем контуры поверх изображения cv.drawContours( img, contours, -1, (255,0,0), 3, cv.LINE_AA, hierarchy, 1 ) cv.imshow('contours', img) # выводим итоговое изображение в окно cv.waitKey() cv.destroyAllWindows()
В результате работы программы мы получим пончики с выделенными внешними и вложенными границами.
Теперь разберёмся как параметры кадр и макс_слой влияют на отображаемые контуры.
Алгоритм findContours нашел у пончиков четыре замкнутых контура. Если вывести иерархию в консоль с помощью обычного print, то мы увидим следующую таблицу:
[ 2 -1 1 -1] - внешний контур первого бублика [-1 -1 -1 0] - дырка первого бублика [-1 0 3 -1] - внешний контур второго бублика [-1 -1 -1 2] - дырка второго бублика
На верхнем уровне иерархии имеется два контура. Эти контуры легко вычислить по значению четвертой величины = -1, которая отвечает за указатель на родительский контур. Также имеются два вложенных контура. Один вложен в первый внешний контур, а второй вложен во второй внешний контур.
В программе параметр контур = -1, следовательно drawContours должна вывести все четыре найденных контура. Но есть ещё второй параметр макс_слой, как он будет влиять на вывод? Посмотрим его поведение на анимации:
Примечание! На верхнем бегунке contour = 0, хотя мы почему-то говорим про -1. Это не ошибка! На самом деле в этом положении бегунка в функцию поступает параметр контур = -1. Это несоответствие возникло из-за особенностей бегунка в OpenCV — он не может принимать отрицательные значения, поэтому в программе из значения бегунка contour каждый раз принудительно вычитается единица.
Вернёмся к параметрам.
При макс_слой = 0 отображается первый попавшийся контур на верхнем уровне иерархии. Такая комбинация параметров вообще нетипичная и бесполезная, она эквивалентна комбинации контур = 0, макс_слой=0.
При макс_слой = 1 отобразятся все контуры на самом верхнем уровне иерархии — это уже полезно. Так мы сможем увидеть все бублики в кадре.
Наконец, при макс_слой = 2 отобразятся контуры на верхнем уровне и все контуры на следующем уровне — то есть дырки.
Теперь наоборот, зафиксируем макс_слой = 0, и будем менять контур в диапазоне от 0 до 3.
Тут опять видна путающая всех первая комбинация: контур = -1, макс_слой = 0, игнорируем её. Но затем всё становится логично. Как и ожидалось, мы просто перебираем контуры на всех слоях, внутренних и внешних.
Чтобы самостоятельно поэкспериментировать с параметрами можно написать программу, которая добавит в окно два бегунка для изучаемых параметров. Подобное мы делали на уроке про цветовые фильтры.
import sys import numpy as np import cv2 as cv hsv_min = np.array((2, 28, 65), np.uint8) hsv_max = np.array((26, 238, 255), np.uint8) if __name__ == '__main__': fn = 'donuts.jpg' img = cv.imread(fn) hsv = cv.cvtColor( img, cv.COLOR_BGR2HSV ) thresh = cv.inRange( hsv, hsv_min, hsv_max ) _, contours0, hierarchy = cv.findContours( thresh.copy(), cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE) index = 0 layer = 0 def update(): vis = img.copy() cv.drawContours( vis, contours0, index, (255,0,0), 2, cv.LINE_AA, hierarchy, layer ) cv.imshow('contours', vis) def update_index(v): global index index = v-1 update() def update_layer(v): global layer layer = v update() update_index(0) update_layer(0) cv.createTrackbar( "contour", "contours", 0, 7, update_index ) cv.createTrackbar( "layers", "contours", 0, 7, update_layer ) cv.waitKey() cv.destroyAllWindows()
К размышлению
Теперь мы можем находить контуры и отображать их прямо в картинке. Имея готовые контуры можно приступить к дальнейшему анализу, включая: поиск геометрических фигур, вычисление их координат и положения, детектирование лиц и жестов.
На следующем уроке начнем с простого — займемся поиском прямоугольников в кадре и вычислением угла их наклона.