Python-opencv 读写图片、转jpg格式、创建缩略图、确定图片属性、裁剪/粘贴/合并图片、几何变换、图片增强、草稿模式

本博客运行环境为Jupyter Notebook - Python3。

主要内容如下:
1、Image类。使用Image模块中的open函数打开一张图片,如果打开成功,返回一个Image对象,可以通过对象属性检查文件内容。format属性定义了图像的格式,如果图像不是从文件打开的,那么该属性值为None;size属性是一个tuple,表示图像的宽和高(单位为像素);mode属性为表示图像的模式,常用的模式为:L为灰度图,RGB为真彩色,CMYK为pre-press图像。如果文件不能打开,则抛出IOError异常。当有一个Image对象时,可以用Image类的各个方法进行处理和操作图像。
2、图片转成jpg格式。
3、创建缩略图。Pillow不会解码或raster数据。当你打开一个文件,Pillow通过文件头确定文件格式,大小,mode等数据,余下数据直到需要时才处理。这意味着打开文件非常快,与文件大小和压缩格式无关。
4、确定图片属性。
5、裁剪、粘贴、与合并图片。Image类包含还多操作图片区域的方法。如crop()方法可以从图片中提取一个子矩形。1)从图片中复制子图像。2)处理子图,粘贴回原图。3)分离和合并通道。
6、几何变换。Image类有resize()、rotate()和transpose()、transform()方法进行几何变换。1)简单几何变换。2)置换图像。3)模式转换。
7、图像增强。1)Filter。ImageFilter模块包含很多预定义的增强filters,通过filter()方法使用。2)像素点处理。3)高级图片增强。
8、更多读取图片方法。草稿模式。draft()方法允许在不读取文件内容的情况下尽可能(可能不会完全等于给定的参数)地将图片转成给定模式和大小,这在生成缩略图的时候非常有效(速度要求比质量高的场合)。

读写图片

使用Image模块中的open函数打开一张图片,并通过对象属性检查文件内容。我的图片命名为test.png,要注意修改为自己的图片,下列代码类似修改哈。
代码如下:

from PIL import Image
im = Image.open("test.png")

from __future__ import print_function
print(im.format, im.size, im.mode)

运行结果如下:
在这里插入图片描述

显示图片,代码如下:

im.show()

运行结果如下:
在这里插入图片描述

图片转成jpg格式

将png图片转成jpg格式。代码如下所示:

from __future__ import print_function
import os, sys
from PIL import Image

for infile in sys.argv[1:]:
    f, e = os.path.splitext(infile)
    outfile = f + ".jpg"
    if infile != outfile:
        try:
            Image.open("test.png").save(outfile)
        except IOError:
            print("cannot convert", infile)

运行结果如下:
到存储代码的同个文件夹找到这个图片哦。
在这里插入图片描述

创建缩略图

代码如下:

from __future__ import print_function
import os, sys
from PIL import Image

size = (128, 128)

for infile in sys.argv[1:]:
    outfile = os.path.splitext(infile)[0] + ".thumbnail"
    if infile != outfile:
        try:
            im = Image.open("test.png")
            im.thumbnail(size)
            im.save(outfile,"JPEG")
        except IOError:
            print("cannot create thumbnail for", infile)

运行结果如下:
到存储代码的同个文件夹找到这个文件哦。
在这里插入图片描述

扫描二维码关注公众号,回复: 11190932 查看本文章

确定图片属性

代码如下:

from __future__ import print_function
import sys
from PIL import Image

for infile in sys.argv[1:]:
    try:
        with Image.open("test.png") as im:
            print(infile, im.format, "%dx%d" % im.size, im.mode)
    except IOError:
        pass

运行结果如下:
可以看到图片为PNG格式,大小为893*828,RGB为真彩色。
在这里插入图片描述

裁剪、粘贴、与合并图片

复制某部分图片,可以自行修改需要复制的部分。

im = Image.open("test.png")
box = im.copy() #直接复制图像
box = (100, 100, 400, 400)
region = im.crop(box)
region.show()

运行结果如下:
在这里插入图片描述

处理子图,粘贴回原图。代码如下所示:

region = region.transpose(Image.ROTATE_180)
im.paste(region,box)
im.show()

运行结果如下:
在这里插入图片描述

分离和合并通道。代码如下所示:

r, g, b = im.split()
im = Image.merge("RGB", (b, g, r))
im.show()

运行结果如下:
在这里插入图片描述

几何变换

简单几何变换。代码如下所示:

im = Image.open("test.png")
out = im.resize((128, 128))
out = im.rotate(45) # 顺时针角度表示
out.show()

运行结果如下所示:
在这里插入图片描述

置换图像。代码如下所示:

im = Image.open("test.png")
out = im.transpose(Image.FLIP_LEFT_RIGHT)
out = im.transpose(Image.FLIP_TOP_BOTTOM)
out = im.transpose(Image.ROTATE_90)
out = im.transpose(Image.ROTATE_180)
out = im.transpose(Image.ROTATE_270)
out.show()

运行结果如下:
在这里插入图片描述

模式转换。代码如下所示:

im = Image.open('test.png').convert('L')
im.show()

运行结果如下:
在这里插入图片描述

图像增强

图像增强,代码如下所示。感觉像调整了饱和度,通俗来说就是绿色叶子部分更绿了一些。

from PIL import ImageFilter
im = Image.open('test.png')
out = im.filter(ImageFilter.DETAIL) 
print(out)
out.show()

运行结果如下:
<PIL.Image.Image image mode=RGB size=893x828 at 0x2D5DCE4ED88>
在这里插入图片描述

像素点变换。代码如下所示:

# multiply each pixel by 1.2
im = Image.open('test.png')
out = im.point(lambda i: i * 1.2)
print(out)
out.show()

运行结果如下:
在这里插入图片描述

高级图片增强,代码如下所示。感觉是加深的阴影部分,提亮高光部分,增强了明暗对比度。

from PIL import ImageEnhance
im = Image.open('test.png')
enh = ImageEnhance.Contrast(im)
enh.enhance(1.3).show("30% more contrast")

运行结果如下:
在这里插入图片描述

草稿模式

更多读取方法,草稿模式,将图片转成给定模式和大小。
代码如下:

from __future__ import print_function
im = Image.open('test.png')
print("original =", im.mode, im.size)
im.draft("L", (100, 100))
print("draft =", im.mode, im.size)

运行结果如下:
在这里插入图片描述

原创文章 41 获赞 65 访问量 8366

猜你喜欢

转载自blog.csdn.net/weixin_44436677/article/details/105989737