以下函数在感兴趣区域周围绘制一个不完整的矩形。我cv2.line()为每个提供的点使用了两次。另外我还利用了cv2.circle()标记4点。
有一个约束。您必须按以下顺序提供 4 个点:左上角、左下角、右上角、右下角。
还有一个选项可以改变要绘制的线的长度line_length。
代码:
def draw_border(img, point1, point2, point3, point4, line_length):
x1, y1 = point1
x2, y2 = point2
x3, y3 = point3
x4, y4 = point4
cv2.circle(img, (x1, y1), 3, (255, 0, 255), -1) #-- top_left
cv2.circle(img, (x2, y2), 3, (255, 0, 255), -1) #-- bottom-left
cv2.circle(img, (x3, y3), 3, (255, 0, 255), -1) #-- top-right
cv2.circle(img, (x4, y4), 3, (255, 0, 255), -1) #-- bottom-right
cv2.line(img, (x1, y1), (x1 , y1 + line_length), (0, 255, 0), 2) #-- top-left
cv2.line(img, (x1, y1), (x1 + line_length , y1), (0, 255, 0), 2)
cv2.line(img, (x2, y2), (x2 , y2 - line_length), (0, 255, 0), 2) #-- bottom-left
cv2.line(img, (x2, y2), (x2 + line_length , y2), (0, 255, 0), 2)
cv2.line(img, (x3, y3), (x3 - line_length, y3), (0, 255, 0), 2) #-- top-right
cv2.line(img, (x3, y3), (x3, y3 + line_length), (0, 255, 0), 2)
cv2.line(img, (x4, y4), (x4 , y4 - line_length), (0, 255, 0), 2) #-- bottom-right
cv2.line(img, (x4, y4), (x4 - line_length , y4), (0, 255, 0), 2)
return img
line_length = 15
img = np.zeros((512,512,3), np.uint8)
cv2.imshow('img', img)
point1, point2, point3, point4 = (280,330), (280,390), (340,330), (340,390)
fin_img = draw_border(img, point1, point2, point3, point4, line_length)
cv2.imshow('fin_img', fin_img)
cv2.waitKey()
cv2.destroyAllWindows()
Run Code Online (Sandbox Code Playgroud)
结果: