根据label-Image的.txt标签提取图片中相应的内容

 

#from PIL import Image
import cv2
import sys

for i in range(1,9):
     txt_path = "C:\\Users\\PC\\Desktop\\tiqu\\tiqushuju\\heselabels\\" + str(i) + '.txt' #标签存放位置   
     dir = open(txt_path)
     lines = dir.readlines()
     lists = []  # 直接用一个数组存起来就好了
     for line in lines:
         lists.append(line.split())
     print(lists)

        
     im_path = "C:\\Users\\PC\\Desktop\\tiqu\\tiqushuju\\heisesuliaodai\\"+str(i)+'.jpg' #图片存放位置
     picture = cv2.imread(im_path)
     print(picture.shape[0]) #高 H y
     print(picture.shape[1]) #宽 x
     im = cv2.imread(im_path)

     for j in range(0, len(lists)):
         #h = lists[j][0] #标签 火15;烟16
         a = lists[j][1]  #宽
         b = lists[j][2] #高
         c = lists[j][3] #宽度
         d = lists[j][4] #高度


        #将标签中归一化的坐标还原为图片的大小尺寸
         e = int((float(a) * picture.shape[1]) - (float(c) * picture.shape[1]/2))
         f = int((float(b) * picture.shape[0]) - (float(d) * picture.shape[0]/2))
         q = int((float(a) * picture.shape[1]) + (float(c) * picture.shape[1]/2))
         s = int((float(b) * picture.shape[0]) + (float(d) * picture.shape[0]/2))
         #cropedIm = im[374:429,685:837]
         cropedIm = im[f:s,e:q]
         # cropedIm = im.crop((700, 100, 1200, 1000))
         path1 = 'C:\\Users\\PC\\Desktop\\tiqu\\tiqushuju\\hei\\' + str(i) + str(j) + '.jpg' #提取的图片存放位置
         #path2 = 'F:/results/smoke/' + str(i) + str(j) + '.jpg'
         #{提取火和烟目标
         #if int(h) == 15:
         #   cv2.imwrite(path1,cropedIm)
         #else:
         #   cv2.imwrite(path2, cropedIm)
         #   }
         #只提取火区域
         cv2.imwrite(path1,cropedIm)



 关于label-image标注图片时,出现   ZeroDivisionError: float division by zero 的情况,解决办法:

以下为引用部分

链接:https://github.com/tzutalin/labelImg/issues/386

使用如下代码:

import cv2
import os

def loadImages(path = r"C:\Users\ldx\Desktop\1111\picture"):
    return [os.path.join(path, f) for f in os.listdir(path) if f.endswith('.jpeg')]
filenames = loadImages()
images = []
for file in filenames:
    images.append(cv2.imread(file, cv2.IMREAD_UNCHANGED))

num = 64
for image in images:
    cv2.imwrite(str(num)+".jpg",image)
    num += 1

修改版:

import cv2
import os


def crop(labeltxt_path,image_path,label_dict,save_path):
    label_list = os.listdir(labeltxt_path)
    label_list = sorted(label_list, key=lambda item:item[0:1])
    img_list = os.listdir(image_path)
    img_list = sorted(img_list, key=lambda item: item[0:1])
    for i in range(len(label_list)):
        txt_path = os.path.join(labeltxt_path,label_list[i])
        dir = open(txt_path)
        lines = dir.readlines()
        lists = []  # 直接用一个数组存起来就好了
        for line in lines:
            lists.append(line.split())
        #print(lists)

        im_path = os.path.join(image_path,img_list[i])

        picture = cv2.imread(im_path)
        #print(picture.shape[0])  # 高 H y
        #print(picture.shape[1])  # 宽 x
        im = cv2.imread(im_path)

        for j in range(0, len(lists)):
            label = lists[j][0] #标签
            a = lists[j][1]  # x
            b = lists[j][2]  # y
            c = lists[j][3]  # 宽度
            d = lists[j][4]  # 高度

            if int(label) in label_dict.values():
                # 将标签中归一化的坐标还原为图片的大小尺寸
                e = int((float(a) * picture.shape[1]) - (float(c) * picture.shape[1] / 2))
                f = int((float(b) * picture.shape[0]) - (float(d) * picture.shape[0] / 2))
                q = int((float(a) * picture.shape[1]) + (float(c) * picture.shape[1] / 2))
                s = int((float(b) * picture.shape[0]) + (float(d) * picture.shape[0] / 2))
                # cropedIm = im[374:429,685:837]
                cropedIm = im[f:s, e:q]
                # cropedIm = im.crop((700, 100, 1200, 1000))
                path1 = save_path + str(i) + str(j) + '.jpg'  # 提取的图片存放位置
                cv2.imwrite(path1, cropedIm)
            else:
                continue

if __name__ =="__main__":
    '''
    target 0
    fire   1
    smoke  2
    target标签的顺序是0   添加想要提取的标签类型
    '''
    label_dict = {"target":0}   
    labeltxt_path = "./111/label/"
    image_path = "./111/image/"
    save_path = "./111/save/"
    crop(labeltxt_path,image_path,label_dict,save_path)
    



 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: labelimg-script.py是一个用于图像标注的Python脚本,它可以帮助用户在图像上创建标签。图像标注是将物体或感兴趣区域在图像进行标记的过程,常用于机器学习和计算机视觉领域。 该脚本主要提供了一个图形用户界面(GUI),使用户可以方便地绘制各种形状的标签,如矩形、圆形、多边形等。用户可以通过点击图像上的坐标点或拖动鼠标来绘制标签,还可以对标签进行编辑和调整。 除了绘制标签外,该脚本还提供了一些其他功能,如保存和加载标签数据,自动调整窗口大小以适应图像大小,查看标签的详细信息等。用户还可以通过快捷键来操作,提高工作效率。 该脚本适用于各种标注任务,如目标检测、图像分割、姿态估计等。用户可以根据自己的需求进行相应的修改和定制。 总之,labelimg-script.py是一个灵活实用的图像标注工具,可以帮助用户快速准确地完成标注任务,为后续的机器学习和计算机视觉工作提供支持。 ### 回答2: labelimg-script.py是一个用Python编写的脚本文件,它用于自动化一种名为LabelImg的图像标注工具的标注过程。LabelImg是一个开源的图像标注工具,它允许用户绘制边界框来标注图像的目标物体。但是,对于大量的图像标注任务来说,手动绘制边界框是一个非常耗时且繁琐的过程。因此,labelimg-script.py的目的就是为了简化这个过程,提高标注的效率。 该脚本可以通过命令行接受输入参数,例如输入要标注的图像文件夹路径、标注结果输出文件夹路径等。它可以自动遍历指定的图像文件夹,将每张图像自动加载到LabelImg工具,然后通过调用模拟用户操作的方式来完成边界框的绘制。一旦完成绘制,脚本将自动保存标注结果,并将结果导出到指定的输出文件夹。 使用labelimg-script.py可以极大地减少人工标注的工作量,特别是对于需要标注大量图像的任务来说。例如在计算机视觉领域的目标检测任务,通常需要对许多图像进行标注。使用该脚本可以自动完成大部分标注工作,从而节省了大量的时间和劳力。 总之,labelimg-script.py是一个实用的工具,通过自动化图像标注过程,提高了标注的效率和准确性,为图像处理和机器学习任务提供了便利。 ### 回答3: labelimg-script.py 是一个用于图像标注的 Python 脚本。它可以帮助用户在图像上绘制边界框或者创建标注文件,以便用于对象检测任务的训练和评估。该脚本提供了一个用户友好的图形界面,使得图像标注相对简单和高效。 使用该脚本,用户可以打开图像文件,然后使用鼠标绘制矩形框来标记图像的物体或目标。这些矩形框充当了标注框,用于表示图像感兴趣的区域。用户可以选择添加不同类别的标签,并为每个标注框分配相应的类别。 此外,该脚本还提供了一些基本的编辑功能,如移动和调整标注框的大小、删除和添加标注框等。用户还可以导出标注信息,生成常见的标注文件格式,例如 PASCAL VOC、YOLO 和 TensorFlow Object Detection API 等格式,以便进行进一步的训练或模型评估。 labelimg-script.py 提供了一种简单但实用的方法来处理图像标注任务,用户只需要少量的编程知识即可进行标注工作。它的灵活性使得它成为许多计算机视觉研究者和从业者的首选工具之一。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值