用opencv写一个画虚线的函数
时间: 2024-05-07 11:22:25 浏览: 10
以下是用 OpenCV 在图片上画虚线的函数:
```python
import numpy as np
import cv2
def draw_dashed_line(img, pt1, pt2, color=(0, 0, 255), thickness=2, dash_length=10, gap_length=5):
"""在图片上画虚线"""
dist = np.sqrt((pt2[0] - pt1[0])**2 + (pt2[1] - pt1[1])**2)
pts = []
for i in np.arange(0, dist, dash_length + gap_length):
r = i / dist
x = int((1 - r) * pt1[0] + r * pt2[0])
y = int((1 - r) * pt1[1] + r * pt2[1])
pts.append((x, y))
if len(pts) % 2 == 1:
pts = pts[:-1]
for i in range(0, len(pts), 2):
cv2.line(img, pts[i], pts[i+1], color, thickness)
# 测试
img = np.zeros((512, 512, 3), np.uint8)
draw_dashed_line(img, (50, 50), (200, 200), (0, 255, 0), 3, 10, 5)
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
这个函数的参数包括:
- `img`: 要画虚线的图片,必须是一个 OpenCV 的 `numpy.ndarray` 对象。
- `pt1` 和 `pt2`: 虚线的起点和终点,坐标可以是整数或浮点数。
- `color`: 虚线的颜色,可以是一个三个元素的元组或列表,分别对应蓝色、绿色和红色的值,范围是 0~255。
- `thickness`: 虚线的粗细,整数类型。
- `dash_length` 和 `gap_length`: 虚线和空白部分的长度,两个参数都是整数类型。
在上面的例子中,我们在一个黑色的图片上画了一条起点为 (50, 50)、终点为 (200, 200)、颜色为绿色、粗细为 3、虚线长度为 10、空白长度为 5 的虚线。你可以根据需要修改参数来画出不同的虚线。