马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
假设有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[a][1])*width - 0.5*float(data[a][3])*width)
ymin = int(float(data[a][2])*height - 0.5*float(data[a][4])*height)
xmax = int(float(data[a][1])*width + 0.5*float(data[a][3])*width)
ymax = int(float(data[a][2])*height + 0.5*float(data[a][4])*height)
print(xmin,ymin,xmax,ymax)
dst0 = img[0:height, xmin:xmax] # 裁剪坐标为[y0:y1, x0:x1]
size0 =dst0.shape
print(size0)
cv2.imshow('image',dst0)
b = 370 #图片的高是370,所以先试着从左边开始截,但是这样只能避开一个目标,因为只把b和data[a][1]比较了
if not b in (xmin,xmax):
print(b)
dst1 = img[0:height, 0:b]
cv2.imshow('image1',dst1)
else:
b = xmax + 10
|