在图像上用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种类型是:
- 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种线类型为:
- 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)
输入图片
输出图片
示例
在这个示例中,我们将通过覆盖图像的四个角来绘制交叉线。最初,我们将使用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()在特定图片上绘制十字的方法。