import matplotlib.pyplot as plt
import matplotlib.patches as patches
#将csv文件绘制为图片,B显为长方形绘制
import glob
import math
import cv2 as cv
import numpy as np
import csv
import os
def draw_rotated_rectangle(canvas, pt, angle, width, height, color):
center_x = pt[0]
center_y = pt[1]
# 创建旋转矩阵
rotation_matrix = cv.getRotationMatrix2D((center_x, center_y), angle, 1)
# 坐标点加上偏移,得到旋转后的坐标点
rotated_points = cv.transform(np.array([[(center_x - width / 2, center_y - height / 2),
(center_x + width / 2, center_y - height / 2),
(center_x + width / 2, center_y + height / 2),
(center_x - width / 2, center_y + height / 2)]],
dtype=np.float32),
rotation_matrix)
# 转换为整数坐标点
rect_points = np.int0(rotated_points)
# 绘制轮廓
cv.drawContours(canvas, [rect_points], 0, color, thickness=1)
def drawpicture(file_path):
# file_path = 'F:\\zhengwangwork\\test csv\\1'
q = os.listdir(file_path)
print(q)
files = glob.glob(os.path.join(file_path, "*.csv"))
w = 0
for file2 in files:
file = open(file2, encoding='utf-8') # 打开csv文件
reader = csv.reader(file) # 读取csv文件
data = list(reader) # 将csv数据转化为列表
length_h = len(data) # 得到数据行数
x = list()
y = list()
z = list()
# 绘制散点图
for i in range(0, length_h): # 从第一行开始读取
# print(data[i][0])
x.append(int(eval(data[i][0])) + 7) # 将第一列数据从第一行读取到最后一行付给列表x
y.append(int(eval(data[i][2])) + 12) # 将第三列数据从第一行读取到最后一行付给列表y
z.append(eval(data[i][1]))
# print(max(x))
a = max(x)
# b=max(y)
if a >= 1600:
canvas = np.zeros((300, a + 20, 3), dtype=np.uint8)
else:
canvas = np.zeros((300, 1620, 3), dtype=np.uint8)
pts = zip(x, y)
col = []
dict = {"0": (0, 255, 255), "1": (0, 0, 255), "2": (255, 192, 255), "3": (255, 127, 255), "4": (255, 64, 255),
"5": (127, 255, 0),
"6": (127, 0, 255), "7": (64, 0, 255), "8": (0, 255, 0), "9": (0, 127, 0), "10": (255, 192, 0),
"11": (255, 127, 0), "12": (255, 64, 0), "13": (127, 55, 255), "14": (127, 0, 0), "15": (64, 0, 0),
"16": (0, 0, 127), "17": (255, 0, 255), "18": (255, 0, 0), "19": (127, 240, 0), "20": (127, 240, 255),
"21": (255, 15, 255), "22": (255, 15, 0), "23": (0, 0, 120), "24": (255, 255, 255), "25": (255, 255, 0),
"26": (255, 240, 255), "27": (255, 240, 0)}
# # 通过循环将不同的通道值对应的颜色加到col数组中,其中data1就是db数组
for i in range(0, len(z)):
print(str(z[i]))
col.append(dict[str(z[i])])
i = 0
for pt in pts:
# 前项45度(绿色的)
if z[i] == 5 or z[i] == 6 or z[i] == 19:
draw_rotated_rectangle(canvas, pt, 142.5, 20, 6, col[i])
# 绘制前项45度的第二个长方形
draw_rotated_rectangle(canvas, pt, 142.5, 20, 2, col[i])
# 后向45度
elif z[i] == 13 or z[i] == 14 or z[i] == 20:
draw_rotated_rectangle(canvas, pt, 37.5, 20, 6, col[i])
# 绘制前项45度的第二个长方形
draw_rotated_rectangle(canvas, pt, 37.5, 20, 2, col[i])
# 前项70度
elif z[i] == 2 or z[i] == 3 or z[i] == 4 or z[i] == 7 or z[i] == 17 or z[i] == 21 or z[i] == 24 or z[
i] == 26:
draw_rotated_rectangle(canvas, pt, 67.5, 20, 6, col[i])
# 绘制前项45度的第二个长方形
draw_rotated_rectangle(canvas, pt, 67.5, 20, 2, col[i])
# 后项70度
elif z[i] == 10 or z[i] == 11 or z[i] == 12 or z[i] == 15 or z[i] == 18 or z[i] == 22 or z[i] == 25 or z[
i] == 27:
draw_rotated_rectangle(canvas, pt, 112.5, 20, 6, col[i])
# 绘制前项45度的第二个长方形
draw_rotated_rectangle(canvas, pt, 112.5, 20, 2, col[i])
# 0度[0,1,8,9,16,23]
else:
draw_rotated_rectangle(canvas, pt, 0, 20, 6, col[i])
# 绘制前项45度的第二个长方形
draw_rotated_rectangle(canvas, pt, 0, 20, 2, col[i])
i = i + 1
str2 = "F:/png/" + q[w]
w = w + 1
str2 = str2[:-4]
# str2 = str2[:-1]
print(str2)
cv.imwrite(str2 + '.png', canvas)
cv.waitKey()
if __name__ == '__main__':
# input_folder="F:\\3"
input_folder = "F:\\7"
drawpicture(input_folder)
Python绘制倾斜图形
最新推荐文章于 2023-11-23 16:55:24 发布