眼底图像血管分割学习笔记
发布时间
阅读量:
阅读量
该文本讨论了在处理图像数据时遇到的问题及解决方案。具体来说,在使用OpenCV读取.gif格式的分割标签时出现了错误,因为OpenCV无法直接读取.gif格式的图片。为了解决这一问题,在借鉴了其他代码的基础上,调整了读取方式:使用cv2.VideoCapture来读取并解码.gif文件,并将其转换为RGB格式以供后续处理使用。
一 图像处理

训练集的图片格式为tif

其中相应的分割标签格式 为gif
最初考虑是否需要将这些图片统一转换为.jpg或.png格式。经过查阅相关资料后仍然不够明确。接着,在查看他人的代码时发现没有处理的方法后,并未采取任何措施。
出现的问题
class Datasets(Dataset):
def __init__(self,path):
self.path = path
self.image_path = os.listdir(os.path.join(path,"images"))
self.label = os.listdir(os.path.join(path,"1st_manual"))
self.trans = torchvision.transforms.Compose([torchvision.transforms.ToTensor()])
def __getitem__(self, index):
image_path = self.image_path[index]
label = self.label[index]
image_label = [os.path.join(self.path, i) for i in ("images", "1st_manual")]
img_o = cv2.imread(os.path.join(image_label[0], image_path))
img_l = cv2.imread(os.path.join(image_label[1], label))
# _,img_l = cv2.VideoCapture(os.path.join(image_label[1], label)).read()
img_o = cv2.cvtColor(img_o, cv2.COLOR_BGR2RGB)
img_l = cv2.cvtColor(img_l, cv2.COLOR_BGR2RGB)
return self.trans(img_o),self.trans(img_l)
def __len__(self):
return len(self.image_path)
其中在将图像标签读取出来然后转换为RGB格式时,发现报错

进行了多次查阅后发现报错提示表明未能成功读取对应的图片文件回过头查看代码时发现 在参考代码中存在与图片标注位置相对应的一段代码 再次进行资料查阅后才明白 cv2无法直接处理.gif格式的图像文件 所以需要调用cv2.VideoCapture来进行相关处理
补充:
1、vc = cv2.VideoCapture(0)
在VideoCapture函数中传入参数为0时,则用于开启笔记本内置摄像头;而当指定视频文件路径时,则会启动对视频文件的读取。例如,在Python代码中可写成:vc = cv2.VideoCapture(".......")
2、ret,frame = vc.read()
该方法通过逐帧读取视频获取图像数据。其中return变量是一个布尔类型变量,在正常读取情况下会赋值为True;当文件已结束时,则会被设置为False。对应的每一帧图像由一个三维矩阵表示。(对应于代码中的_,img_l)
完整代码(有参考别的大佬):
import torch
import torch.nn as nn
from torch.nn import functional as F
from torch.utils.data import Dataset
from torchvision.utils import save_image
from tqdm import tqdm
from PIL import Image
class Datasets(Dataset):
def __init__(self,path):
self.path = path # 训练数据文件夹的路径
self.image_path = os.listdir(os.path.join(path,"images"))
self.label = os.listdir(os.path.join(path,"1st_manual"))
self.trans = torchvision.transforms.Compose([torchvision.transforms.ToTensor()])
def __getitem__(self, index):
image_path = self.image_path[index]
label = self.label[index]
image_label = [os.path.join(self.path, i) for i in ("images", "1st_manual")]
img_o = cv2.imread(os.path.join(image_label[0], image_path))
# img_l = cv2.imread(os.path.join(image_label[1], label))
_,img_l = cv2.VideoCapture(os.path.join(image_label[1], label)).read()
img_o = cv2.cvtColor(img_o, cv2.COLOR_BGR2RGB)
img_l = cv2.cvtColor(img_l, cv2.COLOR_BGR2RGB)
return self.trans(img_o),self.trans(img_l)
def __len__(self):
return len(self.image_path)
全部评论 (0)
还没有任何评论哟~
