此代码import osimport numpy as npimport nibabel as nibfrom PIL import Image# 定义数据集路径data_path = r'C:\Users\Administrator\Desktop\LiTS2017'# 定义保存路径save_path = r'C:\Users\Administrator\Desktop\2D-LiTS2017'if not os.path.exists(save_path): os.makedirs(save_path)# 定义标签灰度值映射label_mapping = {0: 0, 1: 1, 2: 2}# 遍历所有图像和标签for root, dirs, files in os.walk(data_path): for file in files: if file.endswith('.nii'): # 读取图像或标签数据 img_path = os.path.join(root, file) img_data = nib.load(img_path).get_fdata() # 将3D数据转换为2D图片 for i in range(img_data.shape[2]): img_slice = img_data[:, :, i] img_slice = np.rot90(img_slice) img_slice = np.flipud(img_slice) img_slice = (img_slice - np.min(img_slice)) / (np.max(img_slice) - np.min(img_slice)) * 255 img_slice = img_slice.astype(np.uint8) img_slice = Image.fromarray(img_slice) # 处理标签数据 if 'label' in img_path.lower(): for k, v in label_mapping.items(): img_slice = np.array(img_slice) img_slice[img_slice == k] = v img_slice = Image.fromarray(img_slice) # 保存2D图片 save_dir = os.path.join(save_path, os.path.basename(root)) if not os.path.exists(save_dir): os.makedirs(save_dir) save_path_2d = os.path.join(save_dir, f'{file[:-4]}_{i:03d}.png') img_slice.save(save_path_2d)出现scaled = scaled.astype(np.promote_types(scaled.dtype, dtype), copy=False) MemoryError错误,请修复它,并且给出完整代码

时间: 2023-11-27 16:51:02 浏览: 39
这个错误提示是内存不足,可以尝试调整代码中的数据处理方式,减少内存占用。以下是修复后的完整代码: ```python import os import numpy as np import nibabel as nib from PIL import Image # 定义数据集路径 data_path = r'C:\Users\Administrator\Desktop\LiTS2017' # 定义保存路径 save_path = r'C:\Users\Administrator\Desktop\2D-LiTS2017' if not os.path.exists(save_path): os.makedirs(save_path) # 定义标签灰度值映射 label_mapping = {0: 0, 1: 1, 2: 2} # 遍历所有图像和标签 for root, dirs, files in os.walk(data_path): for file in files: if file.endswith('.nii'): # 读取图像或标签数据 img_path = os.path.join(root, file) img_data = nib.load(img_path).get_fdata() # 将3D数据转换为2D图片 for i in range(img_data.shape[2]): img_slice = img_data[:, :, i] img_slice = np.rot90(img_slice) img_slice = np.flipud(img_slice) img_slice = (img_slice - np.min(img_slice)) / (np.max(img_slice) - np.min(img_slice)) * 255 img_slice = img_slice.astype(np.uint8) img_slice = Image.fromarray(img_slice) # 处理标签数据 if 'label' in img_path.lower(): for k, v in label_mapping.items(): img_slice_array = np.array(img_slice) img_slice_array[img_slice_array == k] = v img_slice = Image.fromarray(img_slice_array) # 保存2D图片 save_dir = os.path.join(save_path, os.path.basename(root)) if not os.path.exists(save_dir): os.makedirs(save_dir) save_path_2d = os.path.join(save_dir, f'{file[:-4]}_{i:03d}.png') img_slice.save(save_path_2d) ``` 在处理标签数据时,将 `np.array` 转换为 `img_slice_array`,以减少内存占用。

相关推荐

此代码import os import numpy as np from PIL import Image def process_image(image_path, save_path): # 读取nii文件 image_array = np.load(image_path).astype(np.float32) # 归一化到0-255之间 image_array = (image_array - np.min(image_array)) / (np.max(image_array) - np.min(image_array)) * 255 # 将数据类型转换为uint8 image_array = image_array.astype(np.uint8) # 将三维图像分成若干个二维图像 for i in range(image_array.shape[0]): image = Image.fromarray(image_array[i]) image.save(os.path.join(save_path, f"{i}.png")) def process_label(label_path, save_path): # 读取nii文件 label_array = np.load(label_path).astype(np.uint8) # 将标签转换为灰度图 label_array[label_array == 1] = 255 label_array[label_array == 2] = 128 # 将三维标签分成若干个二维标签 for i in range(label_array.shape[0]): label = Image.fromarray(label_array[i]) label.save(os.path.join(save_path, f"{i}.png")) # LiTS2017数据集路径 data_path = "C:\\Users\\Administrator\\Desktop\\LiTS2017" # 保存路径 save_path = "C:\\Users\\Administrator\\Desktop\\2D-LiTS2017" # 创建保存路径 os.makedirs(save_path, exist_ok=True) os.makedirs(os.path.join(save_path, "image"), exist_ok=True) os.makedirs(os.path.join(save_path, "mask"), exist_ok=True) # 处理Training Batch 1 image_path = os.path.join(data_path, "Training Batch 1", "volume-{}.npy") for i in range(131): process_image(image_path.format(i), os.path.join(save_path, "image")) # 处理Training Batch 2 label_path = os.path.join(data_path, "Training Batch 2", "segmentation-{}.npy") for i in range(131): process_label(label_path.format(i), os.path.join(save_path, "mask"))出现FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\Administrator\\Desktop\\LiTS2017\\Training Batch 1\\volume-0.npy',修复它,并给出完整代码

代码import os import numpy as np import nibabel as nib from PIL import Image # 创建保存路径 save_path = 'C:/Users/Administrator/Desktop/2D-LiTS2017' if not os.path.exists(save_path): os.makedirs(save_path) if not os.path.exists(os.path.join(save_path, 'image')): os.makedirs(os.path.join(save_path, 'image')) if not os.path.exists(os.path.join(save_path, 'label')): os.makedirs(os.path.join(save_path, 'label')) # 加载数据集 data_path = 'D:/BaiduNetdiskDownload/LiTS2017' img_path = os.path.join(data_path, 'Training Batch 1') label_path = os.path.join(data_path, 'Training Batch 2') # 转换图像 for file in sorted(os.listdir(img_path)): if file.endswith('.nii'): img_file = os.path.join(img_path, file) img = nib.load(img_file).get_fdata() img = np.transpose(img, (2, 0, 1)) # 转换为z, x, y for i in range(img.shape[0]): img_slice = img[i, :, :] img_slice = (img_slice - np.min(img_slice)) / (np.max(img_slice) - np.min(img_slice)) * 255 # 归一化到0-255 img_slice = img_slice.astype(np.uint8) img_slice = np.stack([img_slice]*3, axis=2) # 转换为三通道图像 img_name = file[:-4] + '' + str(i).zfill(3) + '.png' img_file_save = os.path.join(save_path, 'image', img_name) Image.fromarray(img_slice).save(img_file_save) # 转换标签 for file in sorted(os.listdir(label_path)): if file.endswith('.nii'): label_file = os.path.join(label_path, file) label = nib.load(label_file).get_fdata() label = np.transpose(label, (2, 0, 1)) # 转换为z, x, y for i in range(label.shape[0]): label_slice = label[i, :, :] label_slice[label_slice == 1] = 255 # 肝脏灰度值设为255 label_slice[label_slice == 2] = 128 # 肝脏肿瘤灰度值设为128 label_slice = label_slice.astype(np.uint8) label_name = file[:-4] + '' + str(i).zfill(3) + '.png' label_file_save = os.path.join(save_path, 'label', label_name) Image.fromarray(label_slice).save(label_file_save)出现scaled = scaled.astype(np.promote_types(scaled.dtype, dtype), copy=False) MemoryError错误,怎么修改?给出完整代码

帮我分析一下下面代码有什么问题:#模型导入 import paddlehub as hub ocr = hub.Module(name="chinese_ocr_db_crnn_server") import cv2 import numpy as np from PIL import ImageFont,ImageDraw,Image def drawText(text, width, height, file): #创建一张全白的图片用来绘制中文 img = np.full((height, width, 3),fill_value=255,dtype=np.uint8) #文字大小 font_size = int(width/len(text)) - 5 #绘制中文 #cv2.putText(img, text ,(width - font_size/2, height - font_size/2),cv2.FONT_HERSHEY_SIMPLEX,1,(255,0,0),1) #导入字体文件 fontpath = "C:/Users/lenovo/Desktop/人工智能/chinese_cht.ttf" #设置字体的颜色 b,g,r,a = 0,0,0,0 #设置字体大小 font = ImageFont.truetype(fontpath, font_size) #将numpy array的图片格式转为PIL的图片格式 img_pil = Image.fromarray(img) #创建画板 draw = ImageDraw.Draw(img_pil) #在图片上绘制中文 draw.text((width/2 - int(len(text)*(font_size/2)), int(height/2 - font_size/2)), text, font=font, fill=(b,g,r,a)) #将图片转为numpy array的数据格式 img = np.array(img_pil) #保存图片 cv2.imwrite(f"txt/{file}",img) image_path = 'image.jpeg' # 读取测试文件夹test.txt中的照片路径 np_images =[cv2.imread(image_path)] results = ocr.recognize_text( images=np_images, # 图片数据,ndarray.shape 为 [H, W, C],BGR格式; use_gpu=False, # 是否使用 GPU;若使用GPU,请先设置CUDA_VISIBLE_DEVICES环境变量 output_dir='ocr_result', # 图片的保存路径,默认设为 ocr_result; visualization=False, # 是否将识别结果保存为图片文件; box_thresh=0.5, # 检测文本框置信度的阈值; text_thresh=0.5) # 识别中文文本置信度的阈值; image = cv2.imread(image_path) for result in results: data = result['data'] save_path = result['save_path'] for infomation in data: loca = infomation['text_box_position'] print(loca, infomation['text']) crop_img = image[loca[0][1]:loca[2][1], loca[0][0]:loca[2][0]] # 保存小图片 cv2.imwrite('txt/' + str(loca[0][1]) + str(loca[2][1]) + '.jpg', crop_img) text = infomation['text'] drawText(text, loca[2][1] - loca[0][1], loca[2][0] - loca[0][0], str(loca[0][1]) + str(loca[2][1]) + "M.jpg")

最新推荐

recommend-type

起点小说解锁.js

起点小说解锁.js
recommend-type

299-煤炭大数据智能分析解决方案.pptx

299-煤炭大数据智能分析解决方案.pptx
recommend-type

299-教育行业信息化与数据平台建设分享.pptx

299-教育行业信息化与数据平台建设分享.pptx
recommend-type

基于Springboot+Vue酒店客房入住管理系统-毕业源码案例设计.zip

网络技术和计算机技术发展至今,已经拥有了深厚的理论基础,并在现实中进行了充分运用,尤其是基于计算机运行的软件更是受到各界的关注。加上现在人们已经步入信息时代,所以对于信息的宣传和管理就很关键。系统化是必要的,设计网上系统不仅会节约人力和管理成本,还会安全保存庞大的数据量,对于信息的维护和检索也不需要花费很多时间,非常的便利。 网上系统是在MySQL中建立数据表保存信息,运用SpringBoot框架和Java语言编写。并按照软件设计开发流程进行设计实现。系统具备友好性且功能完善。 网上系统在让售信息规范化的同时,也能及时通过数据输入的有效性规则检测出错误数据,让数据的录入达到准确性的目的,进而提升数据的可靠性,让系统数据的错误率降至最低。 关键词:vue;MySQL;SpringBoot框架 【引流】 Java、Python、Node.js、Spring Boot、Django、Express、MySQL、PostgreSQL、MongoDB、React、Angular、Vue、Bootstrap、Material-UI、Redis、Docker、Kubernetes
recommend-type

时间复杂度的一些相关资源

时间复杂度是计算机科学中用来评估算法效率的一个重要指标。它表示了算法执行时间随输入数据规模增长而变化的趋势。当我们比较不同算法的时间复杂度时,实际上是在比较它们在不同输入规模下的执行效率。 时间复杂度通常用大O符号来表示,它描述了算法执行时间上限的增长率。例如,O(n)表示算法执行时间与输入数据规模n呈线性关系,而O(n^2)则表示算法执行时间与n的平方成正比。当n增大时,O(n^2)算法的执行时间会比O(n)算法增长得更快。 在比较时间复杂度时,我们主要关注复杂度的增长趋势,而不是具体的执行时间。这是因为不同计算机硬件、操作系统和编译器等因素都会影响算法的实际执行时间,而时间复杂度则提供了一个与具体实现无关的评估标准。 一般来说,时间复杂度越低,算法的执行效率就越高。因此,在设计和选择算法时,我们通常希望找到时间复杂度尽可能低的方案。例如,在排序算法中,冒泡排序的时间复杂度为O(n^2),而快速排序的时间复杂度在平均情况下为O(nlogn),因此在处理大规模数据时,快速排序通常比冒泡排序更高效。 总之,时间复杂度是评估算法效率的重要工具,它帮助我们了解算法在不同输入规模下的性
recommend-type

RTL8188FU-Linux-v5.7.4.2-36687.20200602.tar(20765).gz

REALTEK 8188FTV 8188eus 8188etv linux驱动程序稳定版本, 支持AP,STA 以及AP+STA 共存模式。 稳定支持linux4.0以上内核。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

:YOLOv1目标检测算法:实时目标检测的先驱,开启计算机视觉新篇章

![:YOLOv1目标检测算法:实时目标检测的先驱,开启计算机视觉新篇章](https://img-blog.csdnimg.cn/img_convert/69b98e1a619b1bb3c59cf98f4e397cd2.png) # 1. 目标检测算法概述 目标检测算法是一种计算机视觉技术,用于识别和定位图像或视频中的对象。它在各种应用中至关重要,例如自动驾驶、视频监控和医疗诊断。 目标检测算法通常分为两类:两阶段算法和单阶段算法。两阶段算法,如 R-CNN 和 Fast R-CNN,首先生成候选区域,然后对每个区域进行分类和边界框回归。单阶段算法,如 YOLO 和 SSD,一次性执行检
recommend-type

ActionContext.getContext().get()代码含义

ActionContext.getContext().get() 是从当前请求的上下文对象中获取指定的属性值的代码。在ActionContext.getContext()方法的返回值上,调用get()方法可以获取当前请求中指定属性的值。 具体来说,ActionContext是Struts2框架中的一个类,它封装了当前请求的上下文信息。在这个上下文对象中,可以存储一些请求相关的属性值,比如请求参数、会话信息、请求头、应用程序上下文等等。调用ActionContext.getContext()方法可以获取当前请求的上下文对象,而调用get()方法可以获取指定属性的值。 例如,可以使用 Acti
recommend-type

c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf

校园超市商品信息管理系统课程设计旨在帮助学生深入理解程序设计的基础知识,同时锻炼他们的实际操作能力。通过设计和实现一个校园超市商品信息管理系统,学生掌握了如何利用计算机科学与技术知识解决实际问题的能力。在课程设计过程中,学生需要对超市商品和销售员的关系进行有效管理,使系统功能更全面、实用,从而提高用户体验和便利性。 学生在课程设计过程中展现了积极的学习态度和纪律,没有缺勤情况,演示过程流畅且作品具有很强的使用价值。设计报告完整详细,展现了对问题的深入思考和解决能力。在答辩环节中,学生能够自信地回答问题,展示出扎实的专业知识和逻辑思维能力。教师对学生的表现予以肯定,认为学生在课程设计中表现出色,值得称赞。 整个课程设计过程包括平时成绩、报告成绩和演示与答辩成绩三个部分,其中平时表现占比20%,报告成绩占比40%,演示与答辩成绩占比40%。通过这三个部分的综合评定,最终为学生总成绩提供参考。总评分以百分制计算,全面评估学生在课程设计中的各项表现,最终为学生提供综合评价和反馈意见。 通过校园超市商品信息管理系统课程设计,学生不仅提升了对程序设计基础知识的理解与应用能力,同时也增强了团队协作和沟通能力。这一过程旨在培养学生综合运用技术解决问题的能力,为其未来的专业发展打下坚实基础。学生在进行校园超市商品信息管理系统课程设计过程中,不仅获得了理论知识的提升,同时也锻炼了实践能力和创新思维,为其未来的职业发展奠定了坚实基础。 校园超市商品信息管理系统课程设计的目的在于促进学生对程序设计基础知识的深入理解与掌握,同时培养学生解决实际问题的能力。通过对系统功能和用户需求的全面考量,学生设计了一个实用、高效的校园超市商品信息管理系统,为用户提供了更便捷、更高效的管理和使用体验。 综上所述,校园超市商品信息管理系统课程设计是一项旨在提升学生综合能力和实践技能的重要教学活动。通过此次设计,学生不仅深化了对程序设计基础知识的理解,还培养了解决实际问题的能力和团队合作精神。这一过程将为学生未来的专业发展提供坚实基础,使其在实际工作中能够胜任更多挑战。