生成四条线围成一个矩形,并对其进行平移旋转,对四条边进行延长、缩短和旋转。
def buildRealRect(W, H):
#先搞四个点
p0 = np.array([150, 100])
p2 = np.array([H-50, H-100])
p1 = np.array([p0[1], p2[0]])
p3 = np.array([p2[1], p0[1]])
center = (p0+p2) / 2
p = np.array([p0, p1, p2, p3])#四个点放到一个4x2的矩阵里方便操作
angle = np.random.random()*np.pi #0-pi/2
#旋转矩阵
R = np.array([[np.cos(angle), -np.sin(angle)], [np.sin(angle), np.cos(angle)]])
center = np.vstack([center]*4)
p = (p-center).dot(R)+center#旋转后新的点坐标
lines = np.vstack([p0, p1, p1, p2, p2, p3, p3, p4, p4, p1]).reshape(-1, 4)#点组成的四条线
r1 = np.random.randn(4, 4)*20
lines += r1
lines = lines.astype(np.int32)
canvas = np.zeros((H, W, 3), dtype=np.uint8)
for i, line in enumerate(lines):
x1,y1,x2,y2 = line
cv2.line(canvas, (x1, y1), (x2, y2), (255,255,255), 3)
cv2.imshow('GT', canvas)
直接用矩阵操作比用循环更快,代码也更短。