从图中绘制多边形区域并获取多边形顶点坐标
支持绘制多个多边形
import cv2 as cv
import numpy as np
def get_regions(img):
regions = []
while True:
points = []
def mouse_callback(event, x, y, flags, param):
if event == cv.EVENT_LBUTTONDOWN:
points.append([x, y])
cv.circle(img, (x, y), 5, (0, 0, 255), -1)
cv.imshow('image', img)
cv.namedWindow('image', cv.WINDOW_NORMAL)
cv.setWindowProperty('image', cv.WND_PROP_FULLSCREEN, cv.WINDOW_FULLSCREEN)
cv.imshow('image', img)
cv.setMouseCallback('image', mouse_callback)
while True:
cv.imshow('image', img)
key = cv.waitKey(1) & 0xFF
if key == ord(' '):
if points:
regions.append(points.copy())
points = []
break
elif key == 27:
if points:
regions.append(points.copy())
break
if key == 27:
cv.destroyAllWindows()
break
return regions
点击屏幕形成多边形,空格键绘制下一个多边形,Esc键退出绘制。
效果展示
img = np.ones((256, 256, 3))
regions = get_regions(img)
print(regions)