import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
# 旋转矩形
vertices=cv.boxPoints(((200,200),(90,150),-30))
# 打印四个点
print(vertices.dtype)
print(vertices) # 打印四个点
img= np.zeros((400,400),np.uint8)
for i in range(4): # 矩形要画四条线
p1=vertices[i,:]
cv.line(img, tuple(p1), tuple(p1), 255, 15) # 将P1转换为元组
j=(i+1)%4 # 取余数
p2=vertices[j,:]
# 画出直线
cv.line(img,(p1[0],p1[1]),(p2[0],p2[1]),255,2)
# 计算最小外包圆
circle=cv.minEnclosingCircle(vertices)
print('circle=',circle)
cv.circle(img,(200,200),int(circle[1]),(255),1)
# cv.circle() 图片 圆心 半径(整数) 颜色 线粗细(-1为实心 否则为圆)
plt.imshow(img,cmap='gray')
plt.title('circle')
plt.show()
# 构建凸包型
points=np.random.randint(100,300,(80,2),np.int32)
img_convex=np.zeros((400,400),np.uint8)
for i in points:
cv.line(img_convex,tuple(i),tuple(i),255,10)
con=cv.convexHull(points) # 返回[n,1,2] n是点数,2是坐标点
for i in range(con.shape[0]-1):
cv.line(img_convex,tuple(con[i,0,:]),tuple(con[i+1,0,:]),255,4)
cv.line(img_convex,tuple(con[0,0,:]),tuple(con[con.shape[0]-1,0,:]),255,4)
plt.imshow(img_convex, cmap='gray')
plt.title('convexhull')
plt.show()
points=np.random.randint(250,550,(80,1,2),np.int32)
area,triangle=cv.minEnclosingTriangle(points)
img_triangle=np.zeros((800,800), np.uint8)
for i in range(points.shape[0]): # 将每个点划在图片中
cv.line(img_triangle, tuple(points[i, 0, :]), tuple(points[i, 0, :]), 255, 5)
cv.line(img_triangle, tuple(triangle[0,0,:]),tuple(triangle[1,0,:]),255,3)
cv.line(img_triangle, tuple(triangle[1,0,:]),tuple(triangle[2,0,:]),255,3)
cv.line(img_triangle, tuple(triangle[2,0,:]),tuple(triangle[0,0,:]),255,3)
plt.imshow(img_triangle,cmap='gray')
plt.title('triangle')
plt.show()