python用opencv将标注提取画框到对应的图像中

2022-08-23 11:01:05
目录
前言相应的思路读取前缀列表找出json结构中对应框坐标位置,画出对应的框

前言

问题需求:

拥有两个文件夹,一个保存图片image,一个保存标签文件,要求把标签文件中的标注提取出来,并在图片中画出来

相应的思路

    首先提出各个文件的路径;然后将解析json文件,将其中的标注文件提取,并将对应的图像读取在图像上将对应的框画出来;由于图像以及标签的文件前缀都是一样的,所以只要一个前缀列表提取出来,然后将图像的路径与其进行拼接(图像路径+前缀+.jpeg)就可以读取对应的图像,而写入的图像也是一样(写入图像路径+前缀+.jpeg),标签文件也是一样(标签路径+前缀+.json)

    读取前缀列表

      通过os.walk()迭代读取文件夹以及相应的文件列表通过os.listdir直接读取文件夹下的文件列表
      # 通过os.walk()读取文件夹以及相应的文件列表
      def get_file_list(path):
          file_list=[]
          for dir_list,folder,file in os.walk(path):
              file_list=file
          return file_list
      
      #通过os.listdir()读取文件夹下的文件列表
      def get_file_list2(path):
          file_list=os.listdir(path)
          return file_list
      file_list=get_file_list2(r"E:\temp\AI\label")
      print(file_list)

      找出json结构中对应框坐标位置,画出对应的框

      查看json文件结构,对应找到坐标所在的位置:

        可以看到json文件中坐标是在shapes对应的points里的列表,而且是列表第0项表示左上位置,而第一项表示右上位置,所以在cv2的画框的两个参数参数pt1和pt2就定下来cv2.rectangle(img,>
        {
          "version": "3.16.5",
          "flags": {},
          "shapes": [
            {
              "label": "0",
              "line_color": null,
              "fill_color": null,
              "points": [
                [
                  2720.0,
                  1094.0
                ],
                [
                  2768.0,
                  1158.0
                ]
              ],
              "shape_type": "rectangle",
              "flags": {}
            }
          ],
        ...
        }

        那么代码就如下所示:

        import json
        import cv2
        path_label=r"E:\temp\AI\label"
        path_img=r"E:\temp\AI\image"
        path_result=r"E:\temp\AI\result"
        # 通过遍历将图像纷纷画框
        for file in file_list:
            txt=open(os.path.join(path_label,file))
            load_json=json.load(txt)
            for shape in load_json["shapes"]:
                left_top=(int(shape["points"][0][0]),int(shape["points"][0][1]))
                right_bottom=(int(shape["points"][1][0]),int(shape["points"][1][1]))
                #对象进行画框
                img_name=file.split(".")[0]+".jpeg"
                img=cv2.imread(os.path.join(os.path.join(path_img,img_name)))
                cv2.rectangle(img, left_top,right_bottom, (0, 255, 0), 2)
                cv2.imwrite(os.path.join(path_result,img_name), img)

        比如其中一个图像的一个缺陷位置就被标注出来

        到此这篇关于python用opencv将标注提取画框到对应的图像中的文章就介绍到这了,更多相关python opencv标注提取内容请搜索易采站长站以前的文章或继续浏览下面的相关文章希望大家以后多多支持易采站长站!