zl程序教程

您现在的位置是:首页 >  其他

当前栏目

yolov3检测结果txt文件转存det.txt(用于目标跟踪)

文件 检测 结果 目标 用于 跟踪 txt yolov3
2023-09-27 14:20:15 时间

代码思路

在这里插入图片描述

代码说明

file_name() 函数获取txt文件路径信息
这里使用的图片大小是 960x600 的尺寸
txt2det() 函数把txt载入矩阵,把(x,y,w,h)信息转化成(x1,y1,x2,y2)格式,并转成跟踪txt文件

第一张图片检测结果截图(相对坐标)

在这里插入图片描述

det.txt文件截图

在这里插入图片描述

完整代码

from PIL import Image
import os
import glob
import numpy as np

#读取图片,修改图片,另存图片
def convertjpg(jpgfile,outdir,img_sum=0):
    img=Image.open(jpgfile)#提取目录下所有图片
    try:
        img_sum=str('%08d'%img_sum)#图片保存成00000001格式
        img.save(os.path.join(outdir)+img_sum+'.jpg')#保存到另一目录
    except Exception as e:
        print(e)

#读取文件名
def file_name(file_dir):   
    L=[]#保存文件名
    img_num=0#计算图片总数
    for root, dirs, files in os.walk(file_dir):
        img_num=img_num+len(files)
        one=os.path.basename(str(root))#获取路径最后的/或者\后的文件名
        L.append(one) 
    num=len(L)-1  #获取路径下文件个数  
    print('%s路径下有%d个文件'%(L[0],num))
    return L ,num ,img_num


def txt2det(txt_dir,out_dir,txt_num):   
    data = np.loadtxt(txt_dir,dtype='float')
    for k in data[:,0]:
        print(k)
    print(len(data[:,1]))#第2列
    data[:,0]=txt_num
    data[:,1]=(data[:,1]-0.5*data[:,3])*960#左上角坐标x
    data[:,2]=(data[:,2]-0.5*data[:,4])*600#左上角坐标y
    data[:,3]=(data[:,1]+data[:,3]*960)#右下角坐标x
    data[:,4]=(data[:,2]+data[:,4]*600)#右下角坐标y
    a=np.linspace(-1,-1,len(data))
    data=np.insert(data,1,a,axis=1)#行矩阵插入
    a=a.reshape((len(a),1))
    data=np.concatenate((data,a,a,a),axis = 1)#补充-1
    print(data,'\n')        
    np.savetxt(out_dir,data,fmt="%d,%d,%.3f,%.3f,%.3f,%.3f,%.3f,%d,%d,%d",delimiter="\n")


def main():    
    i=0
    for txtfile in glob.glob('C:/Users/Chengguo/Desktop/py_study/xcg_det/to_det/'+'*.txt'):
        i=i+1
        txt2det(txtfile,'C:/Users/Chengguo/Desktop/py_study/xcg_det/all_det/'+str(i)+'.txt',i)
    print('det.txt生成完成')
    det=open('C:/Users/Chengguo/Desktop/py_study/xcg_det/det/det.txt','w')
    for txts in range(200):
        print(txts)
        one_det=open('C:/Users/Chengguo/Desktop/py_study/xcg_det/all_det/'+str(txts+1)+'.txt').read()
        det.write(one_det)
       
    det.close()
    

if __name__ == '__main__':
    main()