亲爱的慕友们,在学习了图像处理、数组操作和文件管理等 Python 知识后,我们已经具备了对图像进行基本处理和分析的能力。课程中老师提到不同图像格式在存储和处理上可能存在差异,那么在模拟从虚拟文件夹读取图像文件并处理的过程中,我们该如何灵活应对不同格式的图像呢?欢迎小伙伴们一起分享自己的想法~
现在,大家已经学习了这一阶段关于图像处理的知识,接下来就按照作业描述的要求,动手设计并实现一个简单的图像分析系统,展示一下自己的编程实力吧!
题目:
设计一个图像分析系统,实现以下功能:
1、从虚拟文件夹中读取一组图像文件,假设文件格式为常见的图片格式,如 .jpg。(图像可自行寻找,提交时需附带图片)
2、对每张图像进行灰度化处理。
3、使用自适应阈值方法对灰度图像进行二值化处理,以便更好地突出图像中的目标物体。
4、将处理后的图像存储到新的虚拟文件夹中,新文件夹的命名规则为原虚拟文件夹名加上 “_processed”。
5、统计所有处理后图像中白色像素点的总数,并输出结果。
图像数据:
simulated_images = [
np.random.randint(0, 256, size=(100, 100, 3), dtype=np.uint8),
np.random.randint(0, 256, size=(100, 100, 3), dtype=np.uint8)
]
预计结果:
所有处理后图像中白色像素点的总数为 10196。
一、开发语言与环境要求
1、语言版本:Python3(与课程视频中使用的 Python 版本保持一致)
2、开发工具:PyCharm(与课程视频中推荐的开发工具相同)
3、依赖模块:需安装并使用numpy模块处理图像数据、opencv-python(或PIL)模块实现图像灰度化与二值化处理,安装命令分别为pip install numpy和pip install opencv-python(若使用PIL则安装pip install pillow)
二、程序整体要求
1、完成需求中涉及的所有功能,包括读取虚拟图像文件、图像灰度化处理、自适应阈值二值化处理、处理后图像存储、统计白色像素点总数并输出。
2、Python 代码书写、命名需符合 PEP 8 规范:变量名用小写字母 + 下划线(如simulated_images“white_pixel_count”),函数名用动词 + 名词(如read_virtual_images“grayscale_conversion”),避免拼音或无意义命名。
3、代码结构层次分明,采用功能模块化设计,将 “读取图像”“灰度化”“二值化”“存储图像”“统计像素” 等功能拆分到不同函数,不堆砌代码。
4、在关键代码段(如灰度化算法、自适应阈值参数设置、像素统计逻辑)添加注释,说明功能与核心逻辑,提升代码可读性。
5、程序运行稳定,处理图像无异常崩溃,最终输出的白色像素点总数与预计结果(10196,允许因随机图像数据小幅波动)基本一致。
6、将作业项目整理为 “图像分析系统” 文件夹,包含主程序文件 “main.py”,若有工具类代码可创建 “image_utils.py”,最终压缩为 ZIP 格式提交。
三、详细设计
1、自定义虚拟图像读取函数
(1)功能:接收题目给定的simulated_images(随机生成的 RGB 图像数组列表),模拟从虚拟文件夹读取图像,返回图像列表供后续处理。
(2)实现思路:直接接收虚拟图像数据,可添加数据校验(如判断是否为 RGB 格式、像素维度是否合法),确保图像数据可正常处理。
一、项目规范【15 分】
(2 )变量命名符合 PEP 8 规范(小写 + 下划线,如simulated_imgs“total_white_pixels”)得 2 分,1-2 处不规范扣 1 分,3 处及以上扣 2 分。
**2、代码结构(5 分)**
按 “读取图像→灰度化→二值化→存储→统计” 拆分功能到独立函数,结构清晰得 5 分;代码无拆分、堆砌在主程序,扣 3-5 分。
3、代码规范与注释(5 分)
(1)代码缩进统一(4 个空格)、无语法错误得 2 分,缩进混乱或有基础语法错扣 1-2 分;
(2)关键逻辑(如灰度化公式、二值化参数、像素统计方法)添加注释,说明清晰得 3 分,注释缺失或模糊扣 1-3 分。
二、程序整体运行效果【20 分】
1.功能完整性(12 分)
(1)完成 “虚拟图像读取→灰度化→自适应阈值二值化→处理后图像存储→白色像素统计” 所有功能,每缺 1 项扣 3 分;
(2)新文件夹命名符合 “原文件夹名 +_processed” 规则(如 “images_processed”)得 3 分,命名错误扣 1-3 分。
2、结果准确性(8 分)
(1)最终输出的白色像素总数与预计结果(10196,允许 ±500 内波动)一致得 8 分;偏差 501-1000 扣 4 分,偏差超 1000 或无统计结果扣 6-8 分。
三、核心函数实现【45 分】
1、虚拟图像读取函数(8 分)
(1)能接收simulated_images数据、完成 RGB 格式校验(如判断 3 通道)得 5 分,无校验扣 3 分;
(2)函数有返回值(返回有效图像列表)得 3 分,无返回值扣 3 分。
**2、灰度化处理函数(10 分)**
(1)使用加权平均法(gray=0.299R+0.587G+0.114B)或调用opencv/PIL内置函数实现灰度化,逻辑正确得 6 分,算法错误扣 4-6 分;
(2)灰度图像为单通道、像素值类型为uint8(0-255)得 4 分,通道 / 类型错误扣 2-4 分。
3、自适应阈值二值化函数(12 分)
(1)使用cv2.adaptiveThreshold()(或PIL对应功能),参数设置合理(如自适应方法为高斯、块大小 11、常数 2)得 8 分,未用自适应阈值(用固定阈值)扣 5 分,参数错误扣 3-8 分;
(2)输出二值图像仅含 0(黑)和 255(白)像素值得 4 分,像素值异常扣 2-4 分。
4、白色像素统计函数(10 分)
(1)正确统计单张二值图像白色像素((img==255).sum())并累加总数得 7 分,统计逻辑错误扣 4-7 分;
(2)打印 “单张图像白色像素数 + 汇总总数”,输出格式清晰得 3 分,仅输出汇总得 1 分。
5、图像存储函数(5 分)
(1)成功创建新文件夹、用cv2.imwrite()(或PIL.save())存储处理后图像得 5 分,存储失败(如路径错误)扣 3-5 分。
四、异常处理与细节【20 分】
1、异常处理(10 分)
(1)在 “图像读取、格式转换、存储” 环节添加try-except捕获异常(如格式错误、存储权限问题)得 6 分,无异常处理扣 4-6 分;
(2)异常发生时输出明确提示(如 “图像格式错误,需 RGB 三通道”)得 4 分,仅捕获无提示扣 2-4 分。
2、依赖模块与提交规范(10 分)
(1)正确使用numpy处理图像数据、opencv-python/PIL处理图像转换,模块调用无误得 5 分,模块用错或未安装相关库扣 3-5 分;
(2)提交压缩包含 “图像分析系统” 文件夹,内有 “main.py”(无冗余文件)得 5 分,文件缺失或冗余扣 2-5 分。