DDR糖网数据集处理程序
我要做一个糖网转诊(二分类)算法,但是DDR数据集中所有类别图片都混在一个文件夹中了。现在我打算根据类别分到两个分件夹中。
-train#原本数据集
--pic0
--pic1
--pic2
--pic3
--pic4
-trian#目标数据集格式
--class0
--pic0
--pic1
--class1
--pic2
--pic3
--pic4
文件读取
txt文件内容如下,将其读成列表,根据后面的类别信息(0,1,2,3,4…)分类
def read_file(filename):
#将txt中的数据读取出来
f=open(filename,encoding='utf-8')
data=f.readlines()
f.close()
return data
将读取的数据根据类别进行分类
def str_trasfer_list(data):
list0=[]#类别0
list1=[]#类别1
#循环列表
for lines in data:
lines=lines.strip('\n')
lines=lines.split(' ')
if lines[1] =="0":
list0.append(lines[0])
if lines[1] =="1":
list0.append(lines[0])
if lines[1] =="2":
list1.append(lines[0])
if lines[1] =="3":
list1.append(lines[0])
if lines[1] =="4":
list1.append(lines[0])
return list0,list1
对图像进行预处理切除黑色边缘
def cut(path):
image = path # 文件夹目录
img = cv2.imread(image)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
retval, thresh = cv2.threshold(gray, 20, 255, cv2.THRESH_BINARY)
kernel = np.ones((5, 5), np.uint8)
binary = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel, iterations=5)
contours, hierarchy = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
for cont in contours:
# 外接矩形
x, y, w, h = cv2.boundingRect(cont)
cv2.rectangle(img, (x, y), (x + w, y + h), (0, 0, 0), 1)
img1 = img[y:(y + h), x:(x + w)]
TURN = cv2.cvtColor(img1, cv2.COLOR_BGR2RGB)
image = Image.fromarray(TURN)
return image
图片保存
def save_image(classes,pathes):
for i in range(len(classes)):
path_read = os.path.join(path,classes[i])
# print(path_read)
path_save = os.path.join(pathes,classes[i])
# print(path_save)
cut(path_read).save(path_save)
函数调用
写的比较啰嗦,但是懒得改了
data=read_file(r'E:\2DR\DR datasets\DDR dataset\DDR-dataset\DR_grading\valid.txt')
# data=read_file(r'1.txt')
class0=str_trasfer_list(data)[0]
class1 = str_trasfer_list(data)[1]
path = r"E:\2DR\DR datasets\DDR dataset\DDR-dataset\DR_grading\valid"
path0 = r"E:\2DR\DR datasets\DDR dataset\project\valid\0"
path1 = r"E:\2DR\DR datasets\DDR dataset\project\valid\1"
save_image(class0,path0)
save_image(class1,path1)