使用 Python 创建照片马赛克(实验楼实验),源代码已经包含课后作业。

该博客介绍了如何使用Python的argparse, PIL和os库创建照片马赛克效果。作者分享了实验楼的项目链接和素材下载地址,并详细解释了马赛克处理的基本原理,即通过将图像划分为网格,用小图像替换网格块来实现。实验思路包括理解源代码,完成课后作业以提升编程技能。文章还展示了不同练习题目的效果,如添加小黑块或小白块以增加视觉变化。" 106693347,8587319,使用jQuery实现的HTML打地鼠游戏,"['jQuery', 'HTML', '前端开发', 'JavaScript', '游戏']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

- 最近在实验楼做的小项目,这个项目主要用的库有argparse(命令行解析工具),PIL(python标准图像库),os(文件处理)。

- 说下基本原理:简单来说就是图片马赛克化处理,处理效果就是图片像打了马赛克一样;
- 我们将目标图像划分成较小图像的网格,并用适当的图像替换网格中的每一小块,创建原始图像的照片马赛克。你可以指定网格的尺寸,并选择输入图像是否可以在马赛克中重复使用。
实验思路

在这里插入图片描述

整体思路很简单,源代码中函数比较多,代码300行左右(讲道理我觉得比2048那个简单很多)2048游戏python解析,不是很难,了解基础语法后,就可以学习这个。可以跟着实验楼的学习思路学习源代码,记得做课后作业,课后作业非常能提高你的编程能力,并且加深对代码的理解。很多时候,自己跟着打一遍,印象不够深刻,只有自己开始动脑筋,才会有大的提高。对代码会有一个更深的理解。
  • 练习题

在这里插入图片描述

  • 贴下自己的源代码,有必要的注释,课后作业完成了前两道。

import argparse#命令行参数解析
import os

import numpy as np 

from PIL import Image  #标准python图形处理库


def getImages(imageDir):
 """
 从给定目录中加载所有替换图像
 
 @param {str} imageDir 目录路径
 @return {List[Image]}
 """
 #将imageDir中的文件放入一个列表,file就是一个文件名字组成的列表
 files = os.listdir(imageDir)
 images = []
 
 for file in files:
 	#得到文件的绝对路径
 	filePath = os.path.abspath(os.path.join(imageDir, file))
 	
 	try:
 		#读文件
 		fp = open(filePath, 'rb') 
 		#打开文件
 		im = Image.open(fp)#为了节约电脑资源,利用 Image.open() 将文件句柄 fp 传入 PIL。图像加载完成后,立即关闭文件句柄释放系统资源
 		#确定图像信息
 		images.append(im)
 		
 		#加载图像
 		im.load()
 		#关闭文件
 		fp.close()
 		
 	except:
 	# ?????
 		#print('Invalid images: ' , filePath)
 		print("Invalid image: %s" % (filePath,))
 return images
 		
 

def getAverageRGB(image):

 """
 计算图像的平均RGB值
 
 将图形中包含的每个像素点的R\G\B 值分别累加,然后除以像素点数,得到图形的平均R G B
 
 @param {Image} image PIL Image 对象
 @return {Tuple[int, int, int]} 平均RGB值
 """
 	

 #计算像素点数
 npixels = image.size[0] * image.size[1]
 
 #获得图像每种颜色及其计数的
 #[(c1,(r1, g1, b1)), (c2, (r2, g2, b2)), ...]
 cols = image.getcolors(npixels)
 
 #获得每种颜色的R G B累加值
 #[(c1 *r1, c1 * g1, c1 * b1),(c2 *r2, c2 * g2, c2 * b2), ...]
 sumRGB = [(x[0] * x[1][0], x[0] * x[1][1], x[0] * x[1][2]) for x in cols]
 
 #计算所有颜色的R,G,B平均值
 #x = (c1 *r1, c2 *r2, ...), 
 #(c1 * g1, c2 *g2, ...),
 #(c1 *b1, c2 *b2, ...)
 avg = tuple([int(sum(x) /npixels) for x in zip(*sumRGB)])
 
 return avg
 		
 	

def splitImage(image, size):

 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值