代码运行显示'NoneType' object has no attribute 'shape'

import os
import cv2
import numpy as np
#将json文件label转换为到data文件夹
n=10 #n为总共标注的图片数
for i in range(n):
    os.system("labelme_json_to_dataset E:/labelme/json/(%d).json -o E:/labelme/data/(%d)_json"%(i,i))
#dst_w=512
#dst_h=512
#dst_shape=(dst_w,dst_h,3)
train_image = "E:/train_image/"
if not os.path.exists(train_image):
    os.makedirs(train_image)
train_label = "E:/train_label/"
if not os.path.exists(train_label):
    os.makedirs(train_label)
 
for i in range(n):
    print(i)
    img=cv2.imread("E:/labelme/data/(%d)_json/img.png"%i)
    label=cv2.imread("E:/labelme/data/(%d)_json/label.png"%i)
    print (img.shape)
    label=label/np.max(label[:,:,2])*255
    label[:,:,0]=label[:,:,1]=label[:,:,2]
    print(np.max(label[:,:,2]))
    # cv2.imshow('l',label)
    # cv2.waitKey(0)
    print(set(label.ravel()))
    cv2.imwrite(train_image+'(%d).png'%i,img)
    cv2.imwrite(train_label+'(%d).png'%i,label)

 

能给出改过的程序吗!!!

你的图像路径不存在,所以cv2.imread返回为空,所以img.shape会报NonetType Object的错。可以加一个判断,如果文件路径不存在,忽略直接进下一轮循环

检查以下图像路径是不是正确的。

import os
import cv2
import numpy as np

# 将json文件label转换为到data文件夹
n = 10  # n为总共标注的图片数
for i in range(n):
    os.system("labelme_json_to_dataset E:/labelme/json/(%d).json -o E:/labelme/data/(%d)_json" % (i, i))
# dst_w=512
# dst_h=512
# dst_shape=(dst_w,dst_h,3)
train_image = "E:/train_image/"
if not os.path.exists(train_image):
    os.makedirs(train_image)
train_label = "E:/train_label/"
if not os.path.exists(train_label):
    os.makedirs(train_label)

for i in range(n):
    print(i)
    if not os.path.exits("E:/labelme/data/(%d)_json/img.png" % i):
        print("E:/labelme/data/(%d)_json/img.png   :not exits!" % i)
        continue
    else:
        img = cv2.imread("E:/labelme/data/(%d)_json/img.png" % i)
        label = cv2.imread("E:/labelme/data/(%d)_json/label.png" % i)
        print(img.shape)
        label = label / np.max(label[:, :, 2]) * 255
        label[:, :, 0] = label[:, :, 1] = label[:, :, 2]
        print(np.max(label[:, :, 2]))
        # cv2.imshow('l',label)
        # cv2.waitKey(0)
        print(set(label.ravel()))
        cv2.imwrite(train_image + '(%d).png' % i, img)
        cv2.imwrite(train_label + '(%d).png' % i, label)

 

os.system("labelme_json_to_dataset E:/labelme/json/(%d).json -o E:/labelme/data/(%d)_json" % (i, i) 

这行代码你应该是通过labelme_json_to_dataset实现将labelme的.json文件解析,然后提取实现2个功能:

1,解析图片。并将图片复制保存到E:/labelme/data/(%d)_json/img.png

2,解析label, 保存label图像到E:/labelme/data/(%d)_json/label.png

 

接下来对label.png进一步处理,将img.png和label.png分别保存在E:/train_image/和E:/train_label/文件夹下。

所以,json文件转换到data是空的,是因为你的labelme_json_to_dataset没有写好。这个要看你的具体json文件的内容写代码……,基于你上文贴的代码,不能修改啥了

不知道理解的是否正确