持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第16天,点击查看活动详情
1)图片的像素矩阵表示:
数字图像数据可以用矩阵来表示,因此可以采用矩阵理论和矩阵算法对数字图像进行分析和处理。最典型的例子是灰度图像。灰度图像的像素数据就是一个矩阵,矩阵的行对应图像的高(单位为像素),矩阵的列对应图像的宽(单位为像素),矩阵的元素对应图像的像素,矩阵元素的值就是像素的灰度值。
在计算机数字图像处理程序中,通常用二维数组来存放图像数据。二维数组的行对应图像的高,二维数组的列对应图像的宽,二维数组的元素对应图像的像素,二维数组元素的值就是像素的灰度值。采用二维数组来存储数字图像,符合二维图像的行列特性,同时也便于程序的寻址操作,使得计算机图像编程十分方便。
图像的位图数据是一个二维数组(矩阵),矩阵的每一个元素对应了图像的一个像素,当保存一幅图像时,不但要保存图像的位图数据矩阵,还要将每个像素的颜色保存下来,颜色的记录是利用颜色表来完成的。颜色表,也叫颜色查找表,是图像像素数据的颜色索引表。以一个4色位图为例,则其颜色表有4个表项,表中每一行记录一种颜色的R、G、B值,这样,当表示一个像素的颜色时,只需要指出该颜色在第几行,即该颜色在表中的索引值即可。
2)Python语句调整图片的尺寸和角度时,首先要调用Image模块中的im=Image.open( "xxx.jpg" )语句打开指定的预处理图片,并调用im.size和im.resize记录并调整图片的尺寸,调用im.rotate语句调整图片的角度,最后调用im.convert实现图片格式的转换。
此实验部分实现代码如下
import Image
im = Image.open( "messi.jpg" )
print im.size
width = 200
ratio = float(width)/im.size[0]
height = int(im.size[1]*ratio)
nim1 = im.resize( (width, height), Image.BILINEAR )
print nim1.size
nim1.save( "resize.jpg" )
nim2 = im.rotate( 45, Image.BILINEAR )
nim2.save( "rotated45.jpg" )
nim3 = im.rotate( 90, Image.BILINEAR )
nim3.save( "rotated90.jpg" )
gray_img = im.convert("L")
gray_img2= gray_img.resize((128,128),Image.BILINEAR)
print gray_img2.histogram()
在该实验中,学生需用前述的图片处理方法对指定图片的尺寸和角度进行调整,并在此基础上,思考如何实现调整其他图片参数的方法,记录Python代码,并分析实验结果。
4 、实验步骤****
设计图片处理方法的程序
l 分析实验要求
l 实现指定图片的尺寸和角度进行调整
l 记录程序代码
l 记录并分析实验结果
实验过程
1. ****从PIL导入Image库
2. ****打开一张图片,以150为宽度,等比例缩小图像,并保存
3. ****图像旋转45°保存
4. ****图像旋转90°保存
5. 图像转换为灰度图像并保存
PIL有九种不同模式:
1: 1位像素,黑白,每字节一个像素存储
L: 8位像素,黑白
P: 8位像素,使用调色板映射到任何其他模式
RGB: 3x8位像素,真彩色
RGBA: 4x8位像素,带透明度掩模的真彩色
CMYK: 4x8位像素,分色
YCbCr: 3x8位像素,彩色视频格式
I: 32位有符号整数像素
F: 32位浮点像素
6. 打印图像的颜色直方图值
****
7. 进行实验
8. 实验代码
from PIL import Image
img=Image.open( "G:\LLP CUIT\cuit_base.jpg" )#打开一个图片
print('图像大小'+str(img.size))
width = 150
ratio = float(width)/img.size[0]
height = int(img.size[1]*ratio)
nim1 = img.resize( (width, height), Image.BILINEAR )#缩小图像
print('图像大小'+str(nim1.size))
nim1.save( "G:\LLP CUIT\cuit_base_resize.jpg" )
nim2 = img.rotate( 45, Image.BILINEAR )#旋转45°
nim2.save( "G:\LLP CUIT\cuit_base_rotated45.jpg" )
nim3 = img.rotate( 90, Image.BILINEAR )#旋转90°
nim3.save( "G:\LLP CUIT\cuit_base_rotated90.jpg" )
#模式“L”为灰色图像,它的每个像素用8个bit表示,0表示黑,255表示白,
#其他数字表示不同的灰度。在PIL中,从模式“RGB”转换为“L”模式是按照下面的公式转换的:
#L = R * 299/1000 + G * 587/1000+ B * 114/1000
gray_img = img.convert("L")
gray_img.save( "G:\LLP CUIT\cuit_base_gray.jpg" )
gray_img2= gray_img.resize((128,128),Image.BILINEAR)
#打印
print(gray_img2.histogram())
9. 实验代码效果