python 二维点集三角网格化
代码:
import cv2 as cv
import matplotlib.tri as tri
import numpy as np
# 获取三角顶点列表
def get_tri(x, y):
triObj = tri.Triangulation(x, y)
print(triObj.triangles)
tri_lst = []
triangles = np.array(triObj.triangles)
NC = len(triangles)
for i in range(NC):
vertices = np.zeros((3, 2), dtype=np.float64)
for j in range(3):
vertices[j, 0] = x[triangles[i, j]]
vertices[j, 1] = y[triangles[i, j]]
points = np.array(vertices, np.int32)
points = points.reshape((-1, 1, 2))
tri_lst.append(points)
return tri_lst
def main():
# 准备数据
x = np.random.randint(100, 600, [5])
y = np.random.randint(100, 600, [5])
out_point = [[50, 50], [50, 650], [650, 50], [650, 650]]
for item in out_point:
x = np.append(x, item[0])
y = np.append(y, item[1])
# 创建图片
img_base = np.zeros([700, 700], np.uint8)
# 获取三角形
tri_lst = get_tri(x, y)
# 绘制三角形
for item in tri_lst:
cv.polylines(img_base, [item], True, (255, 255, 255), 2)
# print(item)
# 显示图片
cv.imshow('base', img_base)
cv.imwrite('base.jpg', img_base)
cv.waitKey()
cv.destroyAllWindows()
if __name__ == '__main__':
main()