[Python]目标检测中已知一个图像中的多个框坐标,将框图片切割并保存(for循环)

通过输入xy的最大值和最小值,运用for循环并通过修改图片名来避免保存图片时的覆盖现象,达到实现切割出一张图中想要部分的目的

之前实现了单个框的切割(可见博文:https://blog.csdn.net/m0_54065225/article/details/115333426?spm=1001.2014.3001.5501)

现在“贪心”想一次性切割出一张图中所有的框改怎么办呢?Now let me show u the answer:
First and foremost,给大家看看保存坐标的txt文件的样子:
切割所用的txt文件
这里的数据分别是:框左上角x坐标,左上角y坐标,框宽l,框高h

Secondly,废话少说直接上代码(注释已经说的很明白了哦)

# -*- coding: utf-8 -*-
"""
Created on Mon Apr  5 22:47:44 2021

@author: Alan
"""

import os   
import cv2 
import numpy as np

# 遍历指定目录,显示目录下的所有文件名(文件路径在代码最后)
def CropImage4File(filepath,destpath):
    pathDir =  os.listdir(filepath) # 列出文件路径中的所有路径或文件
    i = 0
    with open('D:/Spyder_result/data.txt','r') as f: 
        data = f.readlines()   #将txt中所有字符串读入data
       
    for line in data:
        i = i+1    #通过每次循环增加i的值来达到后面改名的目的
        numbers = line.split()  #分隔数据
        numbers_float = list(map(float, numbers)) #将字符串转化为浮点数
        numbers_int = np.array(numbers_float, dtype=np.int) #将浮点数数组转换为整型数组
        print(numbers_int)       #显示出数组      
        for allDir in pathDir:
            child = os.path.join(filepath, allDir)  #拼接路径
            dest = os.path.join(destpath,allDir)   #因为要改输出的文件名,这里的输出路径没用上
            if os.path.isfile(child):
               image = cv2.imread(child)
               x=numbers_int[0]
               y=numbers_int[1]
               l=numbers_int[2]
               h=numbers_int[3]   #因为txt中放入的不是xy的最小最大值,所以下面进行了一个转换
               a=y # ymin
               b=y+h # ymax
               c=x # xmin
               d=x+l # xmax
               cropImg = image[a:b,c:d] #裁剪图像
               filename = [50]    #建立一个50行的数组,储存数据
               filename = 'D:/cut/{i}.jpg'.format_map(vars())       #为避免每次循环图片覆盖,每个循环输出的图片我们对其进行改名   
               cv2.imwrite(filename,cropImg) # 把切出来的图像写在目标路径中
    
            
            
if __name__ == '__main__':
    filepath ='D:/cori/' # source images
    destpath='D:/cut/' # resized images saved here
    CropImage4File('D:/cori/','D:/cut/')

Additionally,给大家看看效果图吧
效果图就不发了哦,希望大家觉得上面的代码有用噢~

Last but not least,大家觉得有帮助的话点个赞哦~
(接下来的话是我自己的记录,不喜勿喷鸭)

日常用喜欢的句子结尾:脚踏实地,然后,仰望星空。
希望自己能在以后的生活中多一份踏实,做好现在的每一件事情,一步一个脚印积累起来!
(想起来了为了高考而沉下心来刷的无数道题,以前的刷题又何尝不是现在甚至以后学习的方法呢,不过高中的时候可没想这么多,现在是真的越来越发现生活中的一切都有科学的因素哈哈哈,正所谓——相信科学)

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值