使用 OpenCV 在图像上绘制十字


OpenCV 是一个 Python 中的开源计算机视觉库。它提供了许多函数来执行各种图像和视频处理操作。该库使用 Numpy 模块将所有视频帧和图像表示为 ndarray 类型。它需要 numpy 库,我们需要确保 numpy 模块也安装在我们的 Python 解释器中。

在本文中,我们将了解使用 OpenCV Python 在图像上绘制十字的不同方法。让我们观察输入输出场景以了解如何在图像上绘制十字。

输入输出场景

假设我们有一个输入图像,在输出中,我们将看到在…上绘制的十字

让我们讨论一下在图像上绘制十字的不同方法。

使用 cv2.drawMarker() 函数

该函数通过预定义的位置在图像上绘制标记。它支持多种标记类型。以下是此函数的语法 -

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

参数

  • img:要绘制标记的源图像。

  • position:十字准线所在的位置。

  • color:指定标记的颜色。

  • thickness:这是一个可选参数。它指定标记的线宽。

  • markerType:指定标记类型。可用的类型有

    • 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:向下指向的三角形标记形状。

  • thickness:指定线宽。

  • lineType(可选):它指定我们要使用的线类型。可用的 4 种 LineTypes 为

    • FILLED

    • 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 坐标的元组。

  • color:指定标记的颜色。

  • thickness:这是一个可选参数。它指定标记的线宽。

  • lineType(可选):它指定我们要使用的线类型。可用的 4 种 LineTypes 为

    • FILLED

    • LINE_4

    • LINE_8

    • LINE_AA

  • shift:它指定点坐标中的分数位数。

示例

让我们获取一个图像,并使用 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 个角来绘制十字线。最初,我们将使用 numpy 数组(图像数组)的 shape 属性获取图像的尺寸,并根据这些值,我们可以识别图像的角。

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() 如何在特定图像上绘制十字的方式。

更新于:2023 年 5 月 30 日

2K+ 次浏览

启动你的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.