本文详细整理了Python中Image库的各种常用命令,包含图像打开、转换、保存等操作,适合图像处理初学者参考。通过这些命令,可以进行基本的图像编辑与分析,为图像识别和处理打下基础。
im=Image.open(path) | 读取图片 |
---|---|
im.show() | 显示一张图片 |
im.save() | 保存图片 |
Image.new(mode,size,color) | 创建新图片 |
Image.nblend(img1,img2,alpha) | 两张图片相加 |
im.format/size/model | 查看图像信息 |
im.crop(box) | 图片裁剪 |
im.paste(region,box) | 图像黏贴(合并) |
im.split() | 通道分离 |
Image.merge("RGB,(b,g,r)) | 通道合并 |
img.resize() | 改变图像的大小 |
img.rotate(45) | 逆时针旋转45° |
im.transpose(Image.ROTATEA_180) | 旋转180° |
im.transpose(Image.FLIP_LEFT_RIGHT) | 左右对换 |
im.transpose(Image.FLIP_TOP_BOTTOM) | 上下对换 |
im.convert(“RGBA”) | 图像类型转换 |
im.getpixel((4,4)) | 获取某个像素位置的值 |
im.putpixel(point,value) | 改变某个像素位置的值 |
一、from PIL import Image
在 Python 中,PIL(Python Imaging Library)是一个强大的图像处理库,它提供了丰富的功能来操作图像。以下是一些常用的操作示例:
open( ) 函数用于打开一个文件,然后返回结果就是这个文件对应的Image对象
image = Image.open('D:\my_image.png')
resize( ) 这个方法就是对图像进行缩放,将原本大小的图片缩放为只有28*28个像素点的图像
image = image.resize((28, 28))
show( ) 这个方法,故名思义就是展示图片,现在展示出来的就是只有28*28个像素点的图片
image.show()
save( ) 这个方法,是用来保存图片的,而且保存的格式由参数的后缀决定,可以通过这个方法将png文件保存为jpg,或者反过来。
image.save("123.jpg")
convert( ) 这个方法,用于改变图像的存储模式。存储模式共有9种,分别是1,L,P,RGBB,RGBA,CMYK,YCbCr,I,F。
image = Image.open('D:\img_1.png',"r").convert("RGB")
image = image.convert("L")
其中" 1 "是一位像素模式,表示这个像素点是黑还是白。
"L" 是八位像素,表示一个像素点的灰度。
"RGB" 是为真色彩模式, 可组合为 256 x 256 x256 种,是比较常见的图片存储模式。
其余的比较少见,不再赘述,想仔细看的查看下面文章:
二、import numpy as np
Image 类型可以通过函数直接转换为numpy数组,但我们要注意不同模式的Image对象转换而成的数组维度是不一样的,"L"模式下,转换为的是二维数组,"RGB"模式下,转换为的是三维数组。
img = np.array(image)
Numpy的 concatenate( ) 函数是用于将两个或多个数组沿指定轴连接在一起的函数。
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
result = np.concatenate((arr1, arr2))
#等同于result = np.concatenate((arr1, arr2),axis=0)
print(result)
#结果就是:
#[1 2 3 4 5 6]
numpy.concatenate((a1, a2, ...), axis=0) 其中a1, a2, … 是参与连接操作的数组。axis 是连接的轴,如果不提供该参数,将默认为0,即沿着第一个轴进行连接。
再举个栗子:在列方向上连接两个数组
arr1 = np.array([[1, 2, 3], [7, 8, 9]])
arr2 = np.array([[4, 5, 6], [10, 11, 12]])
result = np.concatenate((arr1, arr2), axis=1)
print(result)
# 结果就是:
# [[ 1 2 3 4 5 6]
# [ 7 8 9 10 11 12]]
但必须注意,当axis=1(在列之间进行连接)时,必须保证连接的不同数组之间的每列的行数数目相同才能够进行连接。当axis=0(在行之间进行连接)时,必须保证连接的不同数组之间的每行的列数相同才能够进行连接。
希望这些内容对你有帮助!