最好的网站模板网站网页制作与网站建设宝典 第2版
最好的网站模板网站,网页制作与网站建设宝典 第2版,php网站开发工资多少钱,游民星空是用什么做的网站你在用什么软件进行图像处理呢#xff1f;厌倦了鼠标和手指的拖拖点点#xff0c;想不想用程序和代码进行图像的高效处理#xff0c;Python作为简单高效又很强大的一门编程语言#xff0c;对于图像的处理自然也是轻松拿下#xff0c;听起来是不是很酷很极客#xff0c;那…你在用什么软件进行图像处理呢厌倦了鼠标和手指的拖拖点点想不想用程序和代码进行图像的高效处理Python作为简单高效又很强大的一门编程语言对于图像的处理自然也是轻松拿下听起来是不是很酷很极客那么就跟着我来看看吧一、Python的强大图像处理库——Pillow工欲善其事必先利其器 Python的标准库中虽然没有直接支持图像处理操作的模块但我们可以通过Python生态圈中的第三方库来完成这些操作。1 什么是PillowPillow作为python的第三方图像处理库提供了广泛的文件格式支持强大的图像处理能力主要包括图像储存、图像显示、格式转换以及基本的图像处理操作等。2 Pillow与PIL的关系PIL(Python Image Library)是python的第三方图像处理库因其强大的功能与众多的使用人数几乎已经被认为是python官方图像处理库了。但由于PIL仅支持到Python 2.7加上年久失修于是一群志愿者在PIL的基础上创建了兼容的版本名字叫Pillow支持最新Python 3.x又加入了许多新特性因此我们可以直接安装使用Pillow。 二、安装Pillow 如果安装了AnacondaPillow就已经可用了。 否则需要在命令行下通过pip安装pip install pillow三、基本操作1 使用 Image 类 PIL最重要的类是 Image class, 读取和处理图像都要通过这个类来完成。我们可以通过多种方法创建这个类的实例你可以从文件加载图像或者处理其他图像, 或者从 scratch 创建。要从文件加载图像请使用Image模块中的open函数from PIL import Image
# 打开一个jpg图像文件注意是当前路径:
im Image.open(cat.jpg)
温馨提示向左滑动可查看完整代码~如果成功这个函数返回Image对象。您现在可以使用实例属性来检查文件内容print(im.format, im.size, im.mode)
JPEG (1920, 1200) RGB
format属为图像来源。如果不是从文件读取就是None。size属性是包含宽度和高度(像素)的二元组。mode属性定义了图像中波段的数量和名称以及像素类型和深度。常见模式为灰度图像为“L”亮度真彩色图像为“RGB”印刷四色为“CMYK”。获得了Image类的实例就可以使用此类定义的方法来处理和操作图像。例如让我们显示刚刚加载的图像im.show()
接下来让我们看看一些具体的图像处理操作吧~2 保存指定格式的图像save(filename,format) im.save(cat.jpg,png)
上面的代码将图像重新保存成png格式3 剪裁矩形区域 crop(box)box是一个有四个数字的元组(upper_left_x,upper_left_y,lower_right_x,lower_right_y)分别表示裁剪矩形区域的左上角xy坐标右下角的xy坐标规定图像的最左上角的坐标为原点(0,0),宽度的方向为x轴高度的方向为y轴每一个像素代表一个坐标单位。crop()返回的仍然是一个Image对象。im Image.open(cat.jpg,r)
box (300,300,800,800)
region im.crop(box)
region.show()
im.crop()
上面的代码在im图像上裁剪了一个box矩形区域然后显示出来效果如图4 图像粘贴 paste(region,box,mask)region是要粘贴的Image对象,box是要粘贴的位置可以是一个两个元素的元组表示粘贴区域的左上角坐标,也可以是一个四个元素的元组表示左上角和右下角的坐标。如果是四个元素元组的话,box的size必须要和region的size保持一致否则将会被convert成和region一样的size。im.paste(region,(100,100),None)
im.show()
上面的代码将region图像粘贴到左上角为(100,100)的位置效果如图所示5 生成缩略图 thumbnail(size,resample)thumbnail可以创建一个指定大小(size)的缩略图需要注意的是thumbnail方法是原地操作返回值是None。第一个参数是指定的缩略图的大小第二个是采样的有Image.BICUBICPIL.Image.LANCZOSPIL.Image.BILINEARPIL.Image.NEAREST这四种采样方法。默认是Image.BICUBIC。im.thumbnail((200,200),resampleImage.BICUBIC)
im.show()
上面的代码形成了一个200×200的缩略图效果如图6 旋转和翻转 transpose(method)method是transpose的参数表示选择什么样的翻转或者旋转方式可以选择的值有 - Image.FLIP_LEFT_RIGHT,表示将图像左右翻转 - Image.FLIP_TOP_BOTTOM,表示将图像上下翻转 - Image.ROTATE_90,表示将图像逆时针旋转90° - Image.ROTATE_180,表示将图像逆时针旋转180° - Image.ROTATE_270,表示将图像逆时针旋转270° - Image.TRANSPOSE,表示将图像进行转置(相当于顺时针旋转90°) - Image.TRANSVERSE,表示将图像进行转置,再水平翻转im_rotate_180 im.transpose(Image.ROTATE_180)
im_rotate_180.show()
上面的代码将im逆时针旋转180°然后显示出来效果如下图7 颜色通道分离split())split()方法可以原来图像的各个通道分离,比如对于RGB图像可以将其R,G,B三个颜色通道分离。r,g,b im.split()
r.show()
g.show()
b.show()
上面的代码将小猫图像的RGB颜色通道分离效果如图8 颜色通道合并merge(mode,channels)merge方法和split方法是相对的其将多个单一通道的序列合并起来组成一个多通道的图像mode是合并之后图像的模式比如RGB,channels是多个单一通道组成的序列。im_merge Image.merge(RGB,[b,r,g])
im_merge.show()
上面的代码将小猫图像的颜色通道合并效果如下图9 颜色模式转换convert(mode,matrix,dither,palette,colors)convert方法可以改变图像的模式mode,一般是在RGB(真彩图)、L(灰度图)、CMYK(压缩图)之间转换。im_L im.convert (L)
im_L .show()
上面的代码就是将图像转化为灰度图。效果如下图10 图像过滤器 filter(filter)filter方法可以将一些过滤器操作应用于原始图像比如模糊边缘增强、浮雕等。filter是过滤器函数在PIL.ImageFilter函数中定义了大量内置的filter函数比如BLUR(普通模糊)GaussianBlur(高斯模糊) FIND_EDGES(查找边)等from PIL import Image, ImageFilter
im Image.open(cat.jpg)
# 高斯模糊
im_gaussianblur im.filter(ImageFilter.GaussianBlur)
im_gaussianblur.show()
# 普通模糊
im_blur im.filter(ImageFilter.BLUR)
im_blur.show()
# 找到边缘
im_find_edge im.filter(ImageFilter.FIND_EDGES)
im_find_edges.show()
# 浮雕
im_emboss im.filter(ImageFilter.EMBOSS)
im_emboss.show()
# 轮廓
im_contour im.filter(ImageFilter.CONTOUR)
im_contour.show()
# 锐化
im_sharpen im.filter(ImageFilter.SHARPEN)
im_sharpen.show()
# 平滑
im_smooth im.filter(ImageFilter.SMOOTH)
im_smooth.show()
# 细节
im_detail im.filter(ImageFilter.DETAIL)
im_detail.show()
下图依次为浮雕与轮廓效果11 图像增强ImageEnhance()图像增强也是图像预处理中的一个基本技术Pillow中的图像增强函数主要在ImageEnhance模块下通过该模块可以调节图像的白平衡Color、亮度Brightness、对比度Contrast和锐化Sharpness等。from PIL import ImageEnhance
brightness ImageEnhance.Brightness(im)
im_brightness brightness.enhance(1.5)
im_brightness.show()
上面的代码将原来图像的亮度增加50%效果如下图四、练习项目——图片转字符画看完了上面的操作是不是手痒痒呢下面我们一起来做一个有趣的练手项目吧~主要思路读取彩色图片的RGB值利用公式转化为灰度值将图片的灰度值与你自己设定的字符集之间建立映射关系不同区间的灰度值对应不同的字符。最后将每个像素对应的字符按照原位置打印出来测试图片与结果:操作代码# -*- coding: utf-8 -*-
from PIL import Image
codeLib B%8WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/|()1{}[]?-_~i!lI;:,^. #生成字符画所需的字符集
count len(codeLib)
def transform1(image_file):image_file image_file.convert(L) #转换为黑白图片参数L表示黑白模式codePic for h in range(0,image_file.size[1]): #size属性表示图片的分辨率0为横向大小1为纵向for w in range(0,image_file.size[0]):gray image_file.getpixel((w,h)) #返回指定位置的像素如果所打开的图像是多层次的图片那这个方法就返回一个元组codePic codePic codeLib[int(((count-1)*gray)/256)]#建立灰度与字符集的映射codePic codePicrnreturn codePicdef transform2(image_file):codePic for h in range(0,image_file.size[1]):for w in range(0,image_file.size[0]):g,r,b image_file.getpixel((w,h))gray int(r* 0.299g* 0.587b* 0.114)codePic codePic codeLib[int(((count-1)*gray)/256)]codePic codePicrnreturn codePicfp open(ugray.jpg,rb)
image_file Image.open(fp)
image_fileimage_file.resize((int(image_file.size[0]*0.75), int(image_file.size[1]*0.5)))#调整图片大小
print(uInfo:,image_file.size[0], ,image_file.size[1], ,count)tmp open(tmp.txt,w)
tmp.write(transform1(image_file))
tmp.close()
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/92106.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!