求资专用 发表于 2020-12-9 22:56:52

假如每个txt文件有未知行数据,每行代表一个目标

假设有7000个txt文件,没个文件里有不知道多少行数据。一行数据格式例如:3 0.6217320261437909 0.6081081081081081 0.08006535947712419 0.44324324324324327,5个按空格隔开的数字分别代表 1:目标类别 2:目标x轴中心点 3:目标y轴中心点 4:目标的宽度 5:目标的高度(都是归一化数字,分别乘以图片的宽高width height获得真实的像素值)
如何分别对每一个目标解除归一化(这里我会),储存每个目标的左右边缘值xmin xmax(这里我不知道要存多少个,每多一个都要设置两个变量吗?),并在之后用某个数值(比如370)分别与每个目标比较判断其是否在其中某个目标范围内(也就是对所有的目标都不满足 xmin《370《xmax)?主要是用矩阵的话,一是不好确认维度,二是用变量存储的数据不知道要多少个变量,要多少次循环。(是不是可以用数组存储来?)
import cv2
#打开标签
f = open('.\\label\\000006.txt')
f1 = open('10000001.txt','w')
f2 = open('10000002.txt','w')
f3 = open('10000003.txt','w')
#读取标签中目标的坐标
data = []
for line in f.readlines():
      temp = line.split()
      data.append(temp)

#这一段是裁剪图片的代码
img = cv2.imread('000006.png',1)
a=0#读取标签中的第一个目标的数据,在标签数量不同的时候怎么确定要读取多少遍呢?后面也不知道data矩阵的维度啊。
height, width, depth = img.shape
xmin = int(float(data)*width - 0.5*float(data)*width)
ymin = int(float(data)*height - 0.5*float(data)*height)
xmax = int(float(data)*width + 0.5*float(data)*width)
ymax = int(float(data)*height + 0.5*float(data)*height)
print(xmin,ymin,xmax,ymax)
dst0 = img   # 裁剪坐标为
size0 =dst0.shape
print(size0)
cv2.imshow('image',dst0)
b = 370 #图片的高是370,所以先试着从左边开始截,但是这样只能避开一个目标,因为只把b和data比较了
if not b in (xmin,xmax):
      print(b)
      dst1 = img
      cv2.imshow('image1',dst1)
else:
      b = xmax + 10

求资专用 发表于 2020-12-9 22:59:06

我的需求是这样的:做目标检测时数据集中有很多张按000000.png 000001.png排序命名的图片,每张图片中有数量不等的目标,这些目标所在的位置有对应的标签000000.txt等记录。格式例如3 0.6217320261437909 0.6081081081081081 0.08006535947712419 0.44324324324324327,5个按空格隔开的数字分别代表 1:目标类别 2:目标x轴中心点 3:目标y轴中心点 4:目标的宽度 5:目标的高度(都是归一化数字,分别乘以图片的宽高获得真实的像素值)由于数据集中的图片太长太矮影响使用,需要剪切成多个尽量正方形的图片(按宽高比大概竖着切成三份吧,切出来的图宽高差不多就可以)但不要截断目标。
页: [1]
查看完整版本: 假如每个txt文件有未知行数据,每行代表一个目标