- 最近在实验楼做的小项目,这个项目主要用的库有argparse(命令行解析工具),PIL(python标准图像库),os(文件处理)。
- 说下基本原理:简单来说就是图片马赛克化处理,处理效果就是图片像打了马赛克一样;
- 我们将目标图像划分成较小图像的网格,并用适当的图像替换网格中的每一小块,创建原始图像的照片马赛克。你可以指定网格的尺寸,并选择输入图像是否可以在马赛克中重复使用。
实验思路

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

-
贴下自己的源代码,有必要的注释,课后作业完成了前两道。
import argparse
import os
import numpy as np
from PIL import Image
def getImages(imageDir):
"""
从给定目录中加载所有替换图像
@param {str} imageDir 目录路径
@return {List[Image]}
"""
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)
images.append(im)
im.load()
fp.close()
except:
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]
cols = image.getcolors(npixels)
sumRGB = [(x[0] * x[1][0], x[0] * x[1][1], x[0] * x[1][2]) for x in cols]
avg = tuple([int(sum(x) /npixels) for x in zip(*sumRGB)])
return avg
def splitImage(image, size):