Рисование креста на изображении с помощью 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() рисуют крестик на конкретном изображении.