python 实现udacity图片截取

# -*- coding: utf-8 -*-
import cv2
import os
import sys
import pdb
import numpy as np
import tensorflow
import math
import csv
def checkedge(image_path,image_savepath,label_path,label_savepath):
    print(image_path)
    image_savepath = image_savepath
    label_ls = os.listdir(label_path)
    print(label_ls)
    for ls in label_ls:
        name = ls[0 : -4]
        image = cv2.imread(image_path +'/' +name+ '.jpg')
        height, width, channel = image.shape              
        label_file_name = os.path.join(label_path, ls)   
        print(label_savepath+ '/' +"00" + ls[0 : -4] + ".txt")
        label_file_1 = open(label_savepath+ '/'  +"15" + ls[0 : -4] + ".txt", 'w')  
        with open(label_file_name) as f:
            reader = csv.reader(f)
            data =[]
            xmin =[]
            xmax =[]
            ymin =[]
            ymax =[]
            before=[]
            after =[]
           
            for row in reader:
                obj = row[0].strip().split(' ')
                box = [obj[4], obj[5], obj[6], obj[7]]  
                xmin.append(float(box[0]))
                ymin.append(float(box[1]))
                xmax.append(float(box[2]))
                ymax.append(float(box[3]))
                before.append(obj[:4])
                after.append(obj[8:])

            l = np.min(xmin)
            r = np.max(xmax)
            low = np.min(ymin)
            up = np.max(ymax)
          
            if int(r-l<300) and int(l-(300-(r-l))/2) >0 and int(r+(300-(r-l))/2)< width:
                c = (300-(r-l))/2
                r = r +  c
                l = l - c
                print(r-l)
            if int(up-low<300) and int(low-(300-(up-low))/2)>0 and int(up+(300-(up-low))/2) < height:
                c = (300-(up-low))/2
                up = up +  c
                low = low - c
                print(up-low)
            if l == 0:
                l+=1
         
            for i in range(len(xmin)):
                if xmin[i] == l:
                    xmin[i] = 0
                else:
                    xmin[i] = xmin[i]-l
            for i in range(len(ymin)):
                if ymin[i] == low:
                    ymin[i] = 0
                else:
                    ymin[i] = ymin[i]-low
            xmax = [x-l for x in xmax ]
            ymax = [y-low for y in ymax]
            for i in range(len(xmin)):
                label_file_1.write(before[i][0] + ' '+before[i][1] + ' '+before[i][2] + ' ' +before[i][3] + ' '+ str(xmin[i]) + ' ' + str(ymin[i]) + ' ' + str(xmax[i]) + ' ' + str(ymax[i]) + ' '+after[i][0] + ' '+after[i][1] + ' '+after[i][2] + ' ' +after[i][3] + ' '+after[i][4] + ' '+after[i][5] + ' '+after[i][6]+ '\n')
                
            label_file_1.close()
            image_2 = image[int(low):int(up),int(l):int(r)]
            print(int(low),int(up))
            print(int(l),int(r))
            
            for i in range(len(xmin)):
                #print(int(xmin[i]),int(ymin[i]),int(xmax[i]),int(ymax[i]))
                cv2.rectangle(image_2, (int(xmin[i]),int(ymin[i])), (int(xmax[i]),int(ymax[i])), (0,0,0),2)
             
        cv2.imwrite(image_savepath +'/'+"00" + name + ".jpg", image_2)

image_path = r"/data1/dataset/udacity/half/training/image_2"
image_savepath = r"/data1/dataset/udacity/half2/training/image_3"
label_path = r"/data1/dataset/udacity/half/training/label_2"
label_savepath= r"/data1/dataset/udacity/half2/training/label_3"
checkedge(image_path,image_savepath,label_path,label_savepath)

猜你喜欢

转载自blog.csdn.net/pwtd_huran/article/details/80724757