Поиск по сайту:

Рисование креста на изображении с помощью OpenCV


OpenCV — это библиотека компьютерного зрения с открытым исходным кодом на Python. Он предоставляет множество функций для выполнения различных операций по обработке изображений и видео. Библиотека использует модуль Numpy для представления всех видеокадров и изображений в виде типа ndarray. Ему нужна библиотека numpy, нам нужно убедиться, что модуль numpy также установлен в нашем интерпретаторе Python.

В этой статье мы увидим различные способы нарисовать крест на изображении с помощью OpenCV Python. Давайте рассмотрим сценарий ввода-вывода, чтобы понять, как нарисовать крест на изображении.

Сценарии ввода-вывода

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

Давайте обсудим, какие существуют способы нарисовать крест на изображении.

Использование функции cv2.drawMarker()

Функция рисует маркер на изображении в заранее заданной позиции. И он поддерживает несколько типов маркеров. Ниже приведен синтаксис этой функции:

cv.drawMarker(img, position, color[, markerType[, markerSize[, thickness[, line_type]]]])

Параметры

  • img: исходное изображение, на котором будет нарисован маркер.

  • позиция: позиция, в которой находится перекрестие.

  • цвет: определяет цвет маркера.

  • толщина: это необязательный параметр. Он определяет толщину линии маркера.

  • маркертипе: указывает тип маркера. Доступные типы:

    • cv2.MARKER_CROSS: форма маркера перекрестия.

    • cv2.MARKER_TILTED_CROSS: форма маркера перекрестия, наклоненная под углом 45 градусов.

    • cv2.MARKER_STAR: форма звездчатого маркера, представляющая собой комбинацию креста и наклонного креста.

    • cv2.MARKER_DIAMOND: Маркер в форме ромба.

    • cv2.MARKER_SQUARE: Маркер квадратной формы.

    • cv2.MARKER_TRIANGLE_UP: треугольный маркер, направленный вверх.

    • cv2.MARKER_TRIANGLE_DOWN: треугольный маркер, направленный вниз.

  • толщина: определяет толщину линии.

  • lineType (Необязательно): указывает тип линии, которую мы хотим использовать. Доступны 4 типа линий:

    • ЗАПОЛНЕННЫЙ

    • LINE_4

    • LINE_8

    • LINE_AA

  • markerSize: определяет длину маркера, по умолчанию она равна 20 пикселям.

Пример

В этом примере мы нарисуем черный крест на входном изображении.

import cv2
from random import randint

img = cv2.imread('Images/butterfly1.jpg')
cv2.imshow('Input image', img)

cv2.drawMarker(img, (250, 160), color=[0, 0, 0], thickness=10, 
   markerType= cv2.MARKER_TILTED_CROSS, line_type=cv2.LINE_AA,
   markerSize=100)
cv2.imshow('Output image', img)
cv2.waitKey(0)

Входное изображение

Выходное изображение

Использование функции cv2.line()

Функция рисует линию между двумя соединительными точками pt1 и pt2 на изображении. Ниже приведен синтаксис функции line():

cv.line(img, pt1, pt2, color[, thickness[, lineType[, shift]]])

Параметры

  • img: исходное изображение, на котором будет нарисован маркер.

  • pt1: кортеж с координатами x и y изображения, где должна начинаться линия.

  • pt2: кортеж с координатами x и y изображения, где должна заканчиваться линия.

  • цвет: определяет цвет маркера.

  • толщина: это необязательный параметр. Он определяет толщину линии маркера.

  • lineType (Необязательно): указывает тип линии, которую мы хотим использовать. Доступны 4 типа линий:

    • ЗАПОЛНЕННЫЙ

    • LINE_4

    • LINE_8

    • LINE_AA

  • сдвиг: он определяет количество дробных битов в координатах точки.

Пример

Давайте возьмем изображение и нарисуем крест, используя метод cv2.line().

import cv2
from random import randint

img = cv2.imread('Images/flower-black-background.jpg')
cv2.imshow('Input image', img)

coordinates = [[(420, 280), (520,280)], [(470, 220), (470,350)]]

cv2.line(img, coordinates[0][0],coordinates[0][1], color=[0, 0, 250], thickness=20)
cv2.line(img, coordinates[1][0],coordinates[1][1], color=[0, 0, 250], thickness=20)

cv2.imshow('Output image', img)
cv2.waitKey(0)

Входное изображение

Выходное изображение

Пример

В этом примере мы нарисуем пересекающиеся линии, закрыв 4 угла изображения. Первоначально мы получим размеры изображения, используя атрибут shape массива numpy (массив изображений), и по этим значениям мы сможем определить углы изображения.

import cv2
from random import randint

img = cv2.imread('Images/Lenna.png')
cv2.imshow('Input image', img)

# image height = shape[0]
# image width = shape[1]
shape = img.shape

cv2.line(img, (0,0),shape[:2], color=[0, 0, 250], thickness=20)
cv2.line(img, (shape[1], 0), (0, shape[0]), color=[0, 0, 250], thickness=20)

cv2.imshow('Output image', img)
cv2.waitKey(0)

Входное изображение

Выходное изображение

Вот как функции Python OpenCV cv2.lines() и drawMarker() рисуют крестик на конкретном изображении.

Статьи по данной тематике: