Python은 폴더 아래의 xml 형식 태그 파일을 사용하여 그림의 대상을 일괄 적으로 잘라냅니다 (폴더, 그림 이름, 대상 상자의 수는 제한이 없으며 줄 단위 주석).

이 시간 동안 작은 작업은 그림에서 손 개체를 추출하는 것이었고 labelimg 마킹 소프트웨어를 사용하여 일부 그림을 표시 (xml 레이블 파일 생성)하고 원본 그림에서 이러한 대상을 제거하는 작은 스크립트를 작성했습니다. 중간에 효과가 아래에 나와 있으며 괜찮습니다.

원본 그림 (예 1) :
여기에 사진 설명 삽입
자르기 효과 (예 1) :
여기에 사진 설명 삽입
원본 그림 (예 2) :
여기에 사진 설명 삽입
자르기 효과 (예 2, 여기에 마킹을위한 빈 손이 있으므로 잘리지 않음) :
여기에 사진 설명 삽입

완전한 코드

이 코드는 다음 문제를 해결합니다.

1. 동일한 xml 파일에 여러 개의 대상 상자가 있음
2. 그림과 xml 파일이 서로 다르거 나 같은 폴더에 있음
3. 일부 그림이 표시되지 않고 해당 xml 파일이 존재하지 않음
4 . 그림 폴더 (png, jpg) 파일
의 그림 5. 불규칙한 그림 이름 지정

import cv2
import xml.etree.ElementTree as ET
import os 

img_path = r'D:\Dataset\HoldingObject\11\color_S000C000P001R000A011' #图片路径
xml_path = r'D:\Dataset\HoldingObject\11\color_S000C000P001R000A011' #标签路径
obj_img_path = r'D:\Dataset\HoldingObject\11\11-1'   #目标裁剪图片存放路径

for img_file in os.listdir(img_path):    #遍历图片文件夹
    if img_file[-4:] in ['.png', '.jpg']:    #判断文件是否为图片格式
        img_filename = os.path.join(img_path, img_file)  #将图片路径与图片名进行拼接
        img_cv = cv2.imread(img_filename)  #读取图片
        
        img_name = (os.path.splitext(img_file)[0])  #分割出图片名,如“000.png” 图片名为“000”
        xml_name = xml_path + '\\' + '%s.xml'%img_name  #利用标签路径、图片名、xml后缀拼接出完整的标签路径名
        
        if os.path.exists(xml_name):  #判断与图片同名的标签是否存在,因为图片不一定每张都打标
            root = ET.parse(xml_name).getroot() #利用ET读取xml文件
            count = 0 #目标框个数统计,防止目标文件覆盖
            for obj in root.iter('object'):  #遍历所有目标框
                name = obj.find('name').text   #获取目标框名称,即label名
            
                xmlbox = obj.find('bndbox')   #找到框目标
                x0 = xmlbox.find('xmin').text  #将框目标的四个顶点坐标取出
                y0 = xmlbox.find('ymin').text
                x1 = xmlbox.find('xmax').text
                y1 = xmlbox.find('ymax').text
                
                obj_img = img_cv[int(y0):int(y1), int(x0):int(x1)]  #cv2裁剪出目标框中的图片
                
                cv2.imwrite(obj_img_path + '\\' + '%s_%s'%(img_name, count) + '.jpg', obj_img)  #保存裁剪图片
                count += 1 #目标框统计值自增1

추천

출처blog.csdn.net/weixin_44414948/article/details/110521474