本文主要是介绍跑yolov5代码想获得标注框的长宽比直方图,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
结果:
代码:
import os
from PIL import Image
import matplotlib as mpl
import matplotlib.pyplot as plt
from matplotlib.pyplot import MultipleLocator
from matplotlib import ticker
# 设置显示中文字体
mpl.rcParams["font.sans-serif"] = ["SimHei"]
# txt文件夹路径
txts_path = "自己的路径"
# 图片文件夹路径
jpgs_path = "自己的路径"
# 存储w/h比例的列表
ratios = []
# 遍历文件夹中的每个txt文件
for txt_file in os.listdir(txts_path):if txt_file.endswith(".txt"):txt_path = os.path.join(txts_path, txt_file)txtname = os.path.basename(txt_path)jpgname = txtname.replace(".txt", ".jpg")jpg_path = os.path.join(jpgs_path, jpgname)image = Image.open(jpg_path)width, height = image.sizewith open(txt_path, "r") as file:lines = file.readlines()for line in lines:category, x, y, w, h = line.strip().split(" ")w = float(w)h = float(h)aw = w * widthah = h * heightif ah > 0:ratio = aw / ahratios.append(ratio)# 生成直方图
plt.figure(figsize=(8, 5), dpi=80)
n, bins, patches = plt.hist(ratios, bins=10, rwidth=0.8, align='left')
# 打标签,在合适的位置标注每个直方图上面样本数
for i in range(len(n)):plt.text(bins[i], n[i]*1.02, int(n[i]), fontsize=12, horizontalalignment="center")
plt.ylim(0, 570)
# plt.legend()
plt.xlabel("Ratio (aw/ah)")
plt.ylabel("Frequency")
plt.title("标注框长宽比直方图")
plt.savefig('直方图'+'.png')
plt.show()
print('finish!')
这篇关于跑yolov5代码想获得标注框的长宽比直方图的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!