VOC2012

第一步:将VOC数据集的类别标签放入Label文件夹中,使用以下代码将VOC2012数据集的图片按照类别分组保存新的文件夹

import os
import shutil

# 文件目录结构:
# D:/VOC2012/JPEGImages
# D:/VOC2012/Label
# D:/VOC2012/SegmentationClass
# D:/VOC2012/VOC2012-CoSaliency

Set_Data_Dir = 'D:/VOC2012/Label/'

for group_file in os.listdir(Set_Data_Dir):

    Group_File_Dir = Set_Data_Dir + group_file
    with open(Group_File_Dir) as f:
        lines = f.read().splitlines()

    for line in lines:

        if line[-2:] != '-1':

            origin_gt = 'D:/VOC2012/SegmentationClass/' + line[:-3] + '.png'

            if os.path.exists(origin_gt):

                origin_image = 'D:/VOC2012/JPEGImages/' + line[:-3] + '.jpg'

                new_fold = 'D:/VOC2012/VOC2012-CoSaliency-Origin/' + str(group_file[:-13])
                if not os.path.exists(new_fold):
                    os.mkdir(new_fold)

                new_image = 'D:/VOC2012/VOC2012-CoSaliency-Origin/' + str(group_file[:-13]) + '/' + line[:-3] + '.jpg'
                new_gt = 'D:/VOC2012/VOC2012-CoSaliency-Origin/' + str(group_file[:-13]) + '/' + line[:-3] + '.png'

                shutil.copyfile(origin_image, new_image)
                shutil.copyfile(origin_gt, new_gt)

第二步 转化语义分割真值图为显著性检测真值图

import os
import shutil
import cv2
from PIL import Image
import numpy as np


Set_Data_Dir = 'D:/VOC2012/VOC2012-CoSaliency-Origin/'
New_Data_Dir = 'D:/VOC2012/VOC2012-CoSaliency/'

i = 0

for group_file in os.listdir(Set_Data_Dir):

    i = i + 1

    for imgPath in [imgName for imgName in os.listdir(Set_Data_Dir + group_file + "/") if 'jpg' in imgName]:

        origin_image = Set_Data_Dir + group_file + "/" + imgPath
        new_fold = New_Data_Dir + group_file

        if not os.path.exists(new_fold):
            os.mkdir(new_fold)
        newImg = New_Data_Dir + group_file + "/" + imgPath

        shutil.copyfile(origin_image, newImg)

    for gtPath in [gtName for gtName in os.listdir(Set_Data_Dir + group_file + "/") if 'png' in gtName]:

        origin_gt_path = Set_Data_Dir + group_file + "/" + gtPath

        origin_gt = Image.open(origin_gt_path)
        origin_gt = np.array(origin_gt)


        origin_gt[origin_gt != i] = 0
        origin_gt[origin_gt == i] = 255

        newGt_path = New_Data_Dir + group_file + "/" + gtPath

        cv2.imwrite(newGt_path, origin_gt)

第三步 每张图片在组中与最相似的一张组成新组

import cv2
import os
import numpy as np
import shutil
import random

def CopyPic(img_path, j, Set_dir_len, group_dir_len, img_dir_len):

    rgbOld = img_path
    rgbFolder = "D:/VOC2012/processed_datasets/" + img_path[Set_dir_len:group_dir_len-1] + '_' + str(j)
    print(rgbFolder)
    if not os.path.exists(rgbFolder):
        os.mkdir(rgbFolder)
    rgbNew = "D:/VOC2012/processed_datasets/" + img_path[Set_dir_len:group_dir_len-1] + '_' + str(j) + "/" + img_path[group_dir_len:-4] + ".jpg"
    print(rgbNew)
    gtOld = img_path[:-4] + ".png"
    print(gtOld)
    gtNew = "D:/VOC2012/processed_datasets/" + img_path[Set_dir_len:group_dir_len-1] + '_' + str(j) + "/" + img_path[group_dir_len:-4] + ".png"
    print(gtNew)

    print()

    shutil.copyfile(rgbOld, rgbNew)
    shutil.copyfile(gtOld, gtNew)
    return

Set_Data_Dir = "D:/VOC2012/VOC2012-CoSaliency-Delete/"
Set_dir_len = len(Set_Data_Dir)

#[p for p in os.listdir(Group_Data_Dir) if 'jpg' in p]

for group_name in os.listdir(Set_Data_Dir):
    i = 1
    Group_Data_Dir = Set_Data_Dir + group_name + "/"
    group_dir_len = len(Group_Data_Dir)
    for img_name in [p for p in os.listdir(Group_Data_Dir) if 'jpg' in p]:

        img_path = Group_Data_Dir + img_name
        img_dir_len = len(img_path)

        img = cv2.imread(img_path, cv2.IMREAD_GRAYSCALE)
        hist = cv2.calcHist(img, [0], None, [256], [0, 256])

        list_loss = []
        list_path = []
        for o_img_name in [p for p in os.listdir(Group_Data_Dir) if 'jpg' in p]:
            o_img_path = Group_Data_Dir + o_img_name

            if img_path != o_img_path:

                o_img = cv2.imread(o_img_path, cv2.IMREAD_GRAYSCALE)
                o_hist = cv2.calcHist(o_img, [0], None, [256], [0, 256])
                o_loss = cv2.compareHist(hist, o_hist, cv2.HISTCMP_BHATTACHARYYA)

                list_loss.append(o_loss)
                list_path.append(o_img_path)

        loss_sort_index = np.argsort(list_loss)

        CopyPic(img_path, i, Set_dir_len, group_dir_len, img_dir_len)
        CopyPic(list_path[loss_sort_index[0]], i, Set_dir_len, group_dir_len, img_dir_len)

        i = i + 1

猜你喜欢

转载自blog.csdn.net/sinat_33725641/article/details/83548018