coco数据集大概有8w张以上的图片,而且每幅图都有精确的边缘mask标注。

后面后分享一个labelme标注的json或xml格式转二值图的源码(以备以后使用)

而我现在在研究显著性目标检测,需要的是边缘mask的二值图像。搜了很久,并没有人做过这种工作,只能得到如下的掩膜图

而我需要的图像为二值图,如下

说下 我的过程 并附上代码:

首先,coco数据集将所有的8w多张图片标注信息整合到一个json文件中,所以我们需要将单张图片标注信息json文件提取出来,以下是批量提取脚本。

注: 需要改动地方 1)第6行:将json_file改为原coco数据集json文件的地址 (coco/annotations/xxxxx.json)

2)  第13行:设置需要提取的图片数量 我是提取82000张

3)第37行:设置存储json文件的目录 需要新建空文件夹 我是放在./coco_single_object下

4)第33-35行:可选 将图片的名称写入data.txt中 不需要的话可以注释掉

 # -*- coding:utf-8 -*-
from __future__ import print_function
import json #json文件的地址 需要手动设置
json_file='../pycocotools/instances_train2014.json' # # Object Instance 类型的标注
# person_keypoints_val2017.json # Object Keypoint 类型的标注格式
# captions_val2017.json # Image Caption的标注格式 data=json.load(open(json_file,'r')) #设置需要提取的图片数量 我设置提取82000张
for i in range(82000):
data_2 = {}
data_2['info'] = data['info']
data_2['licenses'] = data['licenses']
data_2['images'] = [data['images'][i]] # 只提取第一张图片
data_2['categories'] = data['categories']
annotation = [] # 通过imgID 找到其所有对象
imgID = data_2['images'][0]['id']
for ann in data['annotations']:
if ann['image_id'] == imgID:
annotation.append(ann) data_2['annotations'] = annotation
# 保存到新的JSON文件,便于查看数据特点
#img_file 获取图片名称
img_file=data_2['images'][0]['file_name']
img_first=img_file.split(".")[0]
#将提取出的图片写入data.txt文件中并换行 (optional)
# with open('./coco_single_object/data.txt',mode='a') as f:
# f.write(img_file)
# f.write("\n")
#设置存储目录 我的是存在当前目录下coco_single_object文件夹下 需要手动创建空文件夹
json.dump(data_2, open('./coco_single_object/'+img_first+'.json', 'w'), indent=4) # indent=4 更加美观显示

最后的结果是82000张 json文件

---------------------------------------------------------------------------------------------------------------------------------------

有了单张json文件之后,就是将mask掩膜提取出二值图片的过程了

注:函数传入4个参数 json_path,img_path,color_img_save,binary_img_save

分别对应  json_path: 上一步提取出的json文件的文件夹路径

img_path: coco数据集下载时原图目录

color_img_save: 存放原图的目录 (需要新建此文件夹)

binary_img_save: 存放二值图的目录(需要新建此文件夹)

 from __future__ import print_function
from pycocotools.coco import COCO
import os, sys, zipfile
import urllib.request
import shutil
import numpy as np
import skimage.io as io
import matplotlib.pyplot as plt
import pylab
pylab.rcParams['figure.figsize'] = (8.0, 10.0)
import os
def get_single_binaryImg(json_path,img_path,color_img_save,binary_img_save):
# json_path json文件路径 从coco数据集的annotations标注json文件中提取出的单个json文件
# img_path 原图目录 下载coco数据集时的原图目录
# color_img_save 原图存放目录
# binary_img_save 二值图存放目录
dir=os.listdir(json_path)
for jfile in dir:
annFile =os.path.join(json_path,jfile)
coco = COCO(annFile)
imgIds = coco.getImgIds()
img = coco.loadImgs(imgIds[0])[0]
dataDir = img_path
shutil.copy(os.path.join(dataDir, img['file_name']), color_img_save) # load and display instance annotations
# 加载实例掩膜
catIds = []
for ann in coco.dataset['annotations']:
if ann['image_id'] == imgIds[0]:
catIds.append(ann['category_id']) annIds = coco.getAnnIds(imgIds=img['id'], catIds=catIds, iscrowd=None)
width = img['width']
height = img['height']
anns = coco.loadAnns(annIds)
mask_pic = np.zeros((height, width))
for single in anns:
mask_single = coco.annToMask(single)
mask_pic += mask_single for row in range(height):
for col in range(width):
if (mask_pic[row][col] > 0):
mask_pic[row][col] = 255 imgs = np.zeros(shape=(height, width, 3), dtype=np.float32)
imgs[:, :, 0] = mask_pic[:, :]
imgs[:, :, 1] = mask_pic[:, :]
imgs[:, :, 2] = mask_pic[:, :]
imgs = imgs.astype(int)
img_name = img['file_name'].split(".")[0]
plt.imsave(binary_img_save + "/" + img_name + ".png", imgs) if __name__ == '__main__': json_path =r"G:\jianfeng\code\dataset\cocoapi-master\PythonAPI\get_json\test"
img_path=r"G:\jianfeng\code\dataset\coco\train2014"
color_img_save = r"G:\jianfeng\code\dataset\cocoapi-master\PythonAPI\get_json\color_img"
binary_img_save = r"G:\jianfeng\code\dataset\cocoapi-master\PythonAPI\get_json\binary_img" get_single_binaryImg(json_path,img_path,color_img_save,binary_img_save)

最终出现这些结果:

     

最后在搜索得到二值图方法时,也找到了一个不错的源码,但是他是将labelme格式的json或者xml转为二值图,虽然不是将coco格式转为二值图,但是记录下也许以后也会用的到

https://github.com/samr28/labelme-to-binary-image

参考:

https://blog.csdn.net/wc781708249/article/details/79603522

https://blog.csdn.net/u013735511/article/details/79099483

coco数据集标注图转为二值图python(附代码)的更多相关文章

  1. c语言实现灰度图转换为二值图

    将上篇得到的灰度图转换为二值图,读取像素数据,低于某一值置0,否则设置为255,为得到更好的效果不同图片应采用不同的值 /* 2015年6月2日11:16:22 灰度图转换为二值图 blog:http ...

  2. C语言实现将彩色BMP位图转化为二值图

    CTF做了图片的隐写题,还没有形成系统的认识,先来总结一下BMP图的组成,并通过将彩色图转为二值图的例子加深下理解. 只写了位图二进制文件的格式和代码实现,至于诸如RGB色彩和调色板是什么的一些概念就 ...

  3. S0.4 二值图与阈值化

    目录 二值图的定义 二值图的应用 阈值化 二值化/阈值化方法 1,无脑简单判断 opencv3函数threshold()实现 2,Otsu算法(大律法或最大类间方差法) OpenCV3 纯代码实现大津 ...

  4. 用 Python 通过马尔可夫随机场(MRF)与 Ising Model 进行二值图降噪

    前言 这个降噪的模型来自 Christopher M. Bishop 的 Pattern Recognition And Machine Learning (就是神书 PRML……),问题是如何对一个 ...

  5. 使用OpenCV查找二值图中最大连通区域

    http://blog.csdn.net/shaoxiaohu1/article/details/40272875 使用OpenCV查找二值图中最大连通区域 标签: OpenCVfindCoutour ...

  6. opencv删除二值图中较小的噪点色块

    CvSeq* contour = NULL; double minarea = 100.0; double tmparea = 0.0; CFileDialog dlg(true); if (dlg. ...

  7. zw·准专利·高保真二值图细部切分算法

    zw·准专利·高保真二值图细部切分算法     高保真二值图细部切分算法,是中国字体协会项目的衍生作品.     说准专利算法,是因为对于图像算法的标准不了解,虽然报过专利,但不是这方面的,需要咨询专 ...

  8. 超越OpenCV速度的MorphologyEx函数实现(特别是对于二值图,速度是CV的4倍左右)。

    最近研究了一下opencv的 MorphologyEx这个函数的替代功能, 他主要的特点是支持任意形状的腐蚀膨胀,对于灰度图,速度基本和CV的一致,但是 CV没有针对二值图做特殊处理,因此,这个函数对 ...

  9. BMP彩色转成黑色二值图

    一天半把彩色bmp转成黑白了. 原理是: 第一步:读出位图数据的偏移位置:即第11个字节,用fseek即可. 然后将偏移位置之前的数据全部写入新的bmp图中. 第二步:用fseek移到位图数据这前,判 ...

随机推荐

  1. Day2 - Python基础2 列表、字符串、字典、集合、文件、字符编码

    本节内容 列表.元组操作 数字操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码 1. 列表.元组操作 列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储.修改等操作 ...

  2. acwing 60. 礼物的最大价值

    地址 https://www.acwing.com/problem/content/56/ 在一个m×n的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于0). 你可以从棋盘的左上角开始拿 ...

  3. 剑指Offer-36.数字在排序数组中出现的次数(C++/Java)

    题目: 统计一个数字在排序数组中出现的次数. 分析: 给定一个已经排好序的数组,统计一个数字在数组中出现的次数. 那么最先想到的可以遍历数组统计出现的次数,不过题目给了排序数组,那么一定是利用了排序这 ...

  4. CF620C Pearls in a Row

    CF620C Pearls in a Row 洛谷评测传送门 题目描述 There are nn pearls in a row. Let's enumerate them with integers ...

  5. IT人的立功,立言,立德三不朽

    最近几个月很忙,忙着当奶爸,忙着做加班狗,忙着补裤裆学技术……以至于快忘了要思考人生了! 古人立志穷极一生追求“立德”,“立功”,“立言”,以求不朽,为万世所景仰,为后人所传颂,实现人生的意义.立德者 ...

  6. golang+vscode开发环境的搭建

    一.windows下安装golang开发环境 (1)配置GOROOT变量,在系统变量中点击新建,变量值是golang安装文件夹目录 (2)配置Path变量,选中Path点编辑即可,在变量值后面追加;% ...

  7. 第04组 Beta冲刺(4/5)

    队名:new game 组长博客 作业博客 组员情况 鲍子涵(队长) 过去两天完成了哪些任务 地图移动 接下来的计划 素材和脚本相连 引入声音素材 还剩下哪些任务 让游戏本体运行 遇到了哪些困难 时间 ...

  8. 你想了解的「SpringCloud」都在这里

    前言: 之前我们已经了解了「什么是微服务?」,现在我们开始了解「微服务」关键字下比较热门的「Spring Cloud」... 一.传统架构发展史 部分引用自:从架构演进的角度聊聊Spring Clou ...

  9. 抓包工具之fiddler实战3-接口测试

    Fiddler实现接口测试 Fiddler提供了进行接口测试的功能,找到composer界面,选择接口方法,填写接口URL地址,发送请求. 例子:全国天气预报的接口 http://v.juhe.cn/ ...

  10. python接口自动化10-excel设计模式实战

    前言 一.简介 1.环境准备:python+requests+excel+unittest+ddt,主要安装以下环境,其它一般都有了,没有自行安装: pip install xlrd pip inst ...