Перейти к содержимому

Чем выделить контур фигуры программа

  • автор:

Чем выделить контур фигуры программа

Можно создать контур объекта для формирования ряда концентрических линий, идущих внутрь или наружу объекта. CorelDRAW также позволяет задать количество контурных линий и расстояние между ними.

Кроме создания интересных трехмерных эффектов и теней в сложных рисунках, с помощью контуров можно создавать обрезаемые абрисы для таких устройств, как плоттеры, гравировальные машины и устройства для вырезания из винила.

После создания контура для объекта можно копировать или клонировать параметры контура этого объекта в другой объект. Можно также изменить цвета заливки между контурными линиями и самими абрисами. Можно задать последовательность изменения цвета для контурного эффекта, в котором один цвет перетекает в другой. В выбранном диапазоне цветов последовательность их изменения может быть прямой, по часовой стрелке или против часовой стрелки.

Кроме того, можно выбрать способ отображения углов контура. Например, можно использовать острые или скругленные углы или применить скос к острым углам контура.

Можно разделить объект и его контурные линии.

Центральный контур уже применен к вышеуказанному объекту. Количество контурных линий, а также расстояние между ними, можно изменить.

Для изображенного выше объекта был применен внешний контур. Обратите внимание на то, что контур абриса проецируется из-за внешнего края объекта.

Создание контуров для объекта

1 В наборе инструментов выберите инструмент Контур .

2 Щелкните объект или набор сгруппированных объектов и перетащите начальный маркер к центру для создания внутреннего контура или от центра для создания контура абриса.

3 Переместите регулятор объекта для изменения количества шагов контура.
Дополнительные возможности
Добавление контурных линий в центр выбранного объекта
Нажмите кнопку К центру .
Указание количества контурных линий

На панели свойств нажмите кнопку Внутренний контур или Контур абриса и введите значение в поле Шаги контура .

Внутренний контур с двумя шагами (слева) и четырьмя шагами (справа)

Указание расстояния между контурными линиями
Введите значение в поле Смещение контура на панели свойств.
Ускорение последовательности изменения контурных линий (изменение форм контура)
Нажмите кнопку Ускорение объекта и цвета на панели свойств и переместите регулятор Объект .

Слева направо: Внутренний контур без ускорения, с более низким ускорением, с более высоким ускорением

Выбор формы углов контура
Нажмите кнопку Углы контура на панели свойств и выберите одну из следующих команд.
• Острые углы
• Закругление углов
• Скошенные углы

Создать контуры можно, нажав Эффекты Контур (вторая команда Контур в меню Эффекты ) и задав нужные параметры в окне настройки Контур .

Копирование или клонирование контура

1 Выберите объект, к которому необходимо применить контурный эффект.
2 Выберите Объект и щелкните один из следующих параметров.

• Копировать эффект Контур

• Клонировать эффект Контур

3 Выберите объект, контурный эффект которого необходимо скопировать или клонировать.

Для копирования контура можно также использовать инструмент Пипетка атрибутов . Дополнительные сведения см. в разделе Копирование эффектов из одного объекта в другой.

Установка цвета заливки для объекта контура

1 В наборе инструментов выберите инструмент Контур .
2 Выберите объект контура.
3 На панели свойств щелкните Цвет заливки и выберите цвет.

Если цвет заливки не удается применить, необходимо убедиться, что в строке состояния параметру Цвет заливки соответствует активное состояние.

Если для исходного объекта была применена фонтанная заливка, то появится второе меню выбора цвета.

Можно ускорить последовательность изменения цвета заливки, нажав кнопку Ускорение объекта и цвета на панели свойств и переместив регулятор.

Можно изменить цвет центра контура, перетащив цвет из цветовой палитры на конечный маркер заливки.

Выбор цвета абриса для объекта контура

1 В наборе инструментов выберите инструмент Контур .
2 Выберите объект контура.
3 Откройте меню выбора Цвет абриса на панели свойств и выберите цвет.

Установка последовательности изменения цвета заливки

1 В наборе инструментов выберите инструмент Контур .
2 Выберите объект контура.
3 Нажмите кнопку Цвета абриса на панели свойств и нажмите одну из следующих кнопок:
• Цвета линейного контура
• Цвета контура по часовой стрелке
• Цвета контура против часовой стрелки

Заливка слева направо: линейная, по часовой стрелке, против часовой стрелки

Отделение объектов от их контурных линий

1 С помощью инструмента Указатель выберите объект с контуром.

2 Выберите Объект Разъединить контур .

Функции, указанные в справке, доступны в полной версии CorelDRAW Graphics Suite 2021. Некоторые функции могут быть недоступны в этой версии продукта.

Чем выделить контур фигуры программа

Команда Обвести контур обводит контур в изображении. Есть два способа, с помощью которых можно обвести контур: с помощью инструментов рисования или без них. Есть несколько параметров, которые используются для того, чтобы указать, как должна выглядеть обводка.

Эта команда доступна только когда в изображении есть контур.

3.21.1. Активация команды
  • Получить доступ к этой команде можно через меню изображения Правка → Обвести контур .
  • Также её можно вызвать, нажав на кнопку с аналогичным именем в диалоге контуров.
3.21.2. Описание окна диалога

Рисунок 16.24. Окно диалога « Выбрать стиль обводки »

Окно диалога «Выбрать стиль обводки»

Диалог Выбрать стиль обводки позволяет выбрать параметры обводки вручную или с инструментом рисования. Если для обводки используется активный инструмент рисования, то все настройки заимствуются из этого инструмента.

Линия обводки

Обводка рисуется активным цветом переднего плана, установленным на панели инструментов. Однако, при нажатии на треугольник рядом с параметром Стиль линии появляются дополнительные параметры:

Введите ширину границы выделения. Пиксели выбраны как единица измерения по умолчанию, но можно выбрать другие единицы из списка.

Здесь можно выбрать, рисовать ли обводку сплошным цветом или шаблоном . Здесь сплошной стиль и шаблон отличаются от пунктирного шаблона. Если выбрать сплошную линию без пунктирного шаблона, то будет нарисована непрерывная линия цветом переднего плана из панели инструментов. Если выбрать линию из шаблона без пунктирного шаблона, то будет нарисована непрерывная линия шаблоном из панели инструментов. Если выбрать линию с пунктирным шаблоном, цвет или шаблон всё равно определяются цветом или шаблоном переднего плана на панели инструментов. То есть, если выбрать мраморный шаблон и шаблонную пунктирную линию, то будет нарисована пунктирная линия шаблоном из мрамора.

Этот выпадающий список предоставляет следующий выбор:

  • Стиль конца : позволяет выбрать форму наконечника незакрытого контура, которая может быть тупая , круглая и квадратная .
  • Стиль соединения : позволяет выбрать форму углов контура, которая может быть в « ус » , круглая и фаска .
  • Предел в УС : когда для сегмента контура сходятся, закругленность угла определяется этим параметром. Если обводка широкая, а предел не установлен, получится острое соединение. Предел углового соединения (УС) определяет как заполнить промежуток, получаемый продолжением внешних краёв обводки до их пересечения. Диапазон значений — от 0,0 до 100,0 — устанавливается ползунком, полем ввода или стрелками.

Рисунок 16.25. Пример предела углового соединения

Пример предела углового соединения

Слева: Предел=0; Справа: Предел=5;
Обводка инструментом рисования
Инструмент рисования

Инструмент для рисования обводки можно выбрать из списка. В этом случае, все настройки для рисования обводки заимствуются у этого инструмента.

Эмулировать динамическую кисть

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()

В результате работы программы мы получим пончики с выделенными внешними и вложенными границами.

OpenCV на python: поиск контуров

Теперь разберёмся как параметры кадр и макс_слой влияют на отображаемые контуры.

Алгоритм 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()

К размышлению

Теперь мы можем находить контуры и отображать их прямо в картинке. Имея готовые контуры можно приступить к дальнейшему анализу, включая: поиск геометрических фигур, вычисление их координат и положения, детектирование лиц и жестов.

На следующем уроке начнем с простого — займемся поиском прямоугольников в кадре и вычислением угла их наклона.

Цветной контур

Векторные инструменты предназначены для создания разнообразных фигур, которые находятся на отдельном векторном слое. Границы векторных фигур могут быть выделены цветом. Цветной контур будет добавлен ко всем фигурам выбранного векторного слоя.

Параметры обводки фигуры

Параметры обводки фигуры

Настройки обводки фигур будут показаны при нажатии значка справа от названия выбранного векторного слоя или кнопки на Панели опций в закладке Контур.

Типы обводки:

Нет обводки На границе фигуры не будет контура.

Нет обводки

Нет обводки

Цветной контур Граница выбранной фигуры будет выделена цветным контуром.

Цветной контур

Цветной контур

Цвет контура выбирается в спектральном поле — при подведении к нему курсор принимает форму пипетки. Чтобы установить новый цвет, достаточно щёлкнуть пипеткой внутри поля.

В прямоугольной пластине ниже указывается выбранный цвет. При двойном клике по ней вызывается диалог выбора цвета. Последние выбранные цвета находятся в полях рядом.

Параметр Ширина (1-100) определяет толщину цветного контура.

Ширина = 5

Ширина = 5

Ширина = 25

Ширина = 25

С помощью выпадающих меню настроить вид линии обводки:

Выбрать тип линии обводки.

Сплошная линия

Сплошная линия

Пунктирная линия

Пунктирная линия

Указать вид края штрихов несплошной линии обводки.

Короткий штрих

Короткий штрих

Длинный штрих

Длинный штрих

Скругленный штрих

Скругленный штрих

Выбрать вид контура в углах фигуры.

Острый угол

Острый угол

Скошенный угол

Скошенный угол

Скругленный угол

Скругленный угол

Чтобы изменить цвет фигуры, нужно в диалоговом окне настроить параметры в закладке Заливка.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *