一、实验目的
1.理解空域添加数字水印的原理;
2.熟悉安装扩展库pillow;
3.熟悉扩展库pillow操作图像方法;
4.熟悉运用字典结构。
5.初用numpy实现模拟转盘抽奖游戏
二、实验内容
1.将本周课堂或视频讲的代码选部分在IDLE或Jupyter Notebook中敲一遍。
2.首先准备一个图像文件(参考代码是民大校徽muc.png)作为水印,再准备一些图像文件(.jpg,.bmp,.png等类型均可,具体是什么类型,在代码体现出来就可!),参考代码是将文件都拷到当前工作目录上(我的工作目录是C:\python37\),如果文件不在当前工作目录,代码中打开文件和保存文件的语句要体现文件路径。
>>> import os>>> os.getcwd() #查看当前工作目录'E:\\python 3.7\\程序保存'
3.用到numpy\pandas的方法先自学相应部分(后面会讲)。
三、实验要求
水印在目标图像文件中的位置随机选择为左上角、右下角或图像中间,并且水印图像的背景在目标图像设置中设置成透明。添加水印后的图存为xxx_new.kkk。注意:水印图的像素大小要小于被加水印的图,否则,加不了!
四、实验步骤
1.需敲入的代码见ppt课件或视频;
2.先按实验目的做完,再敲入参考代码运行,在理解代码原理基础上,改编程序。
3.编程实现模拟转盘抽奖游戏,统计不同奖项的获奖概率。
五、图像批量添加水印
1.代码
from random import randintfrom os import listdirfrom PIL import Image#打开并读取其中的水印像素,即不是白色背景的像素#读到内存中,放到字典中以供快速访问im=Image.open('muc.jpg')width,height=im.sizepixels=dict()for w in range(width):for h in range(height):c=im.getpixel((w,h))[:3]if c!=(255,255,255):pixels[(w,h)]=cdef addWaterMark(srcDir):#获取目标文件夹中所有图像文件列表picFiles=[srcDir+'\\'+fn for fn in listdir(srcDir) if fn.endswith(('.bmp','.jpg','.png'))]#遍历所有文件,为每个图像添加水印for fn in picFiles:iml=Image.open(fn)w,h=iml.size#如果图片尺寸小于水印图片,不加水印if w<width or h<height:continue#其原始图像左上角、中间或右小角添加数字水印#具体位置根据position进行随机选择p={0:(0,0),#左上角1:((w-width)//2,(h-height)//2),#中间位置2:(w-width,h-height)}#右下角#随机生成一个位置position=randint(0,2)left,top=p[position]#修改像素值,添加水印for p,c in pixels.items():try:#目标图像是彩色的iml.putpixel((p[0]+left,p[1]+top),c)except:#目标图像是灰色的iml.putpixel((p[0]+left,p[1]+top),sum(c)//len(c))#保存加入水印之后的新图像文件iml.save(fn[:4]+'_new'+fn[-4:])#为当前文件夹中的图像文件添加水印addWaterMark('.')
2.结果
六、模拟转盘抽奖游戏
1.代码
import numpy as npimport pandas as pd#模拟转盘100000次data=np.random.ranf(100000)#奖项等级划分category=(0.0,0.08,0.3,1.0)labels=('一等奖','二等奖','三等奖')#对模拟数据进行划分result=pd.cut(data,category,labels=labels)#统计每个奖项的获奖次数result=pd.value_counts(result)#查看结果print(result)