python實現批量根據坐標按比例截圖


三流程序員的辛酸史,自我折磨許久之后終於寫出了符合領導需求的代碼。

批量輸入圖片,此圖片的內容的坐標信息文檔,截取坐標范圍內並再截取比坐標小一圈的圖片,

類似下圖1,坐標文檔截出圖片如圖2,然后按比例截出圖3所示圖片

 

具體代碼如下:

import cv2
import os

RAT = 0.9

def walk_dir(*paths):
    x_list = []

    for path in paths:
        for (root, dirs, files) in os.walk(path):
            files = sorted(files)
            for item in files:
                x_list.append(item)

            return x_list


def new_cut_image(picture_name, input_dir, output_dir, txt_dir):
    txt_path = os.path.join( txt_dir, str(picture_name.split('.')[0]) + '.txt')
    f = open(txt_path)
    i =1
    for line in f.readlines():
        boxes = []
        linesp = line.split()
        x1 = linesp[1]
        y1 = linesp[2]
        x2 = linesp[3]
        y2 = linesp[4]

        boxes.append(x1)
        # print(boxes[0])
        boxes.append(y1)
        boxes.append(x2)
        boxes.append(y2)

        yr = int((int(boxes[3])-int(boxes[1]))*(1-RAT)/2)
        xr = int((int(boxes[2])-int(boxes[0]))*(1-RAT)/2)
        xmin = int(boxes[0])+xr
        ymin = int(boxes[1])+yr
        xmax = int(boxes[2])-xr
        ymax = int(boxes[3])-yr

        srcImage = cv2.imread(input_dir + picture_name)

        imageROI = srcImage[ymin:ymax, xmin:xmax]  # [ymin:ymax, xmin:xmax]
        output_path = os.path.join(output_dir, str(picture_name.split('.')[0]) + "%03d.jpg" % i)
        i += 1
        cv2.imwrite(output_path, imageROI)



if __name__ == '__main__':
    IMAGE_DIR = r'/home/stt/桌面/s/img/'
    OUTPUT_DIR = r'/home/stt/桌面/s/9/'
    txt_dir = '/home/stt/桌面/s/txt/'

    image_list = walk_dir(IMAGE_DIR)

    for image in image_list:

        new_cut_image(image, IMAGE_DIR, OUTPUT_DIR, txt_dir)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM