前面两篇介绍了labelme安装及的将json文件转化为png,这篇介绍怎么将png转化为Lanenet数据集所需~
主要是将labelme生成的json批量转化的文件转化为训练数据,源文件中每个文件夹中所包含数据如图:
转化为目标文件夹目录:
代码参考了别人转化后图像不对,自己修改了下,如下:
import sys
import copy
import os
import cv2
import numpy as np
from skimage import measure,color
#将label.png转化为二值图,instance图,未采用
def skimageFilter(gray):
binary_warped = copy.deepcopy(gray)
gray = (np.dstack((gray, gray, gray)) * 255).astype('uint8')
labels = measure.label(gray[:, :, 0], connectivity=1)
dst = color.label2rgb(labels, bg_label=0, bg_color=(0, 0, 0))
gray = cv2.cvtColor(np.uint8(dst * 255), cv2.COLOR_RGB2GRAY)
return binary_warped, gray
#灰度图转化为二值图像
def png_to_binary(gray):
# b,g,r = cv2.split(gray)
# r[np.where(r != 0)] = 255
ret,thresh = cv2.threshold(gray,1,255,cv2.THRESH_BINARY)
return thresh
#将训练图像转存至目标路径中
def moveImageTodir(path,targetPath,name):
if os.path.isdir(path):
image_name = (targetPath + "/image/" + str(name) + ".png")
binary_name = (targetPath + "/gt_image_binary/" + str(name) + ".png")
instance_name = (targetPath + "/gt_image_instance/" + str(name) + ".png")
train_rows = image_name + "" + binary_name + "" +instance_name +"\n"
origin_img = cv2.imread(path + "/img.png")
origin_img = cv2.resize(origin_img,(1280,720))
cv2.imwrite(image_name, origin_img)
img = cv2.imread(path+"/label.png")
img = cv2.resize(img, (1280,720))
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
binary_warped = png_to_binary(gray)
# binary_warped, instance = skimageFilter(gray)
cv2.imwrite(binary_name, binary_warped)
cv2.imwrite(instance_name, gray)
print("success create data name is:",train_rows)
return train_rows
return None
if __name__ == "__main__":
print('11')
path = 'C:/testjsontodata/'
destPath = 'C:/MyProect/path/trainData'
root = os.getcwd()
print(root)
count = 1
with open("./train.txt", 'w+') as file:
for images_dir in os.listdir(path):
dir_name = os.path.join(path, images_dir)
train_rows = moveImageTodir(dir_name,destPath,images_dir.split('_')[0])
file.write(train_rows)
count += 1