游乐场网站开发,用视频做影视的网站,东莞网络推广网站,网站排名的重要性1、读取图像信息
查看图像信息 读取同一文件夹下的文件 可加 ./可不加
rom PIL import Image
img Image.open(image.jpg) # 打开图像文件(注意:是去掉文件头的纯数据)
print(img.format) # 图像格式(如BMP PNG JPEG 等)
print(img.size) # 图像大小(…1、读取图像信息
查看图像信息 读取同一文件夹下的文件 可加 ./可不加
rom PIL import Image
img Image.open(image.jpg) # 打开图像文件(注意:是去掉文件头的纯数据)
print(img.format) # 图像格式(如BMP PNG JPEG 等)
print(img.size) # 图像大小(宽高) 注意 省略了通道 (wh)
print(img.mode) # RGB 图像颜色模式(L:灰度图 RGB:真彩色 RGBA:添加了透明通道)
img.show() # 显示图像运行结果 linux里面png格式比较多网络传输里面压缩格式 JPEG格式比较多BMP无损格式
2、修改图像颜色
PNG有透明通道jpeg就没有不能变成 透明半透明变成灰度图 减少信息只留轮廓去掉颜色信息 RGB一个像素点的位数占24位L一个像素点占8位
from PIL import Image
img Image.open(image.jpg)
img img.convert(L) #转换为灰度黑白图像 - 只保留能识别轮廓的明暗对比,# 大幅减少了数据 24位深 RGB 转8位 L
img.show()3、图像缩放
resize不会在原来的图像上修改改完之后 需要 有变量存储 等比例放大缩小等比例注意需要是整数所以 需要强制类型转换
from PIL import Image
img Image.open(image.jpg)
print(img.size)
img img.resize((32, 24),Image.ANTIALIAS) #修改图像的宽高尺寸
print(img.size)
img.show()# 等比例缩放
img img.resize(int(img.size[0]/4),int(img.size[1]/4))
print(img.size)
img.show()4、图像旋转 / 翻转
图像旋转
import numpy as np
from PIL import Image
img Image.open(image.jpg)
img img.rotate(90) #逆时针旋转90度
img.show();图像翻转
import numpy as np
from PIL import Image
img Image.open(image.jpg)
img img.transpose(Image.FLIP_LEFT_RIGHT) #左右翻转
img.show();5、图像转numpy数组
图像就是 一个矩阵有很多像素点每个点表示颜色8位图 就有256种0-255表示颜色色彩丰富 位数越多 一共3个维度最后一维表示几张图叠加 RGB就是 红绿蓝 RGBA再加一个透明半透明选项255是不透明
灰度图就只有 高和宽只有一个通道是一个 二维的数组
/ 256 把值都整到0-1之间到同一个量级不同的信息可以做相关的运算 归一化
import numpy as np
from PIL import Image
img Image.open(image.jpg)
obj np.array(img) # 转换图像为 numpy
print(obj.shape) # 形状: RGB三通道 每个通道为240行*320列矩阵 来表示本通道的灰度明暗对比)
print(obj[0][1]) # 像素内容 0行1列的像素点对应的R G B值img img.convert(L) # 转换为灰度黑白图像 - 只保留能识别轮廓的明暗对比,大幅减少了数据 24位深 RGB 转8位 L
obj np.asarray(img, dtypefloat64)/256 # 转换图像为numpy ( 除以256是为了归一化# 使值都在0~1间float64是指定数据类型保持精度)# array和asarray类似只是array会copy该对象而asarray 必要时才copy
print(obj.shape) # 形状: 只保留了1通道的灰度
print(obj[0][1]) # 像素内容0行1列的像素点对应的灰度值 (因前面除以了256 归一化后为0~1间的数运行结果
6、查看图像数据
{0:3d} 的意思是将第一个参数索引为 0 的参数格式化为一个占据 3 个字符宽度的整数如果不足 3 个字符宽度则在左侧填充空格
通过numpy可以查看图片矩阵的数字
import numpy as np
from PIL import Image
img Image.open(8.bmp)
img img.convert(L) # 转为灰度图像(1像素 占8位)
obj np.array(img) # 图像转为numpy
print(obj.shape) # (28 28) 图像矩阵形状为 28行 *28列# 输出图像数据 - 8字 的像素矩阵
for i in range(obj.shape[0]):for j in range(obj.shape[1]):print({0:3d} .format(obj[i][j]),end) # i:图像行号 j:图像列号 中间间隔“ ” print(E) # 每行末尾加一个E7、转为 指定格式的图像存储
把图片改完之后不能直接存先换成数组去掉图片信息再变成图像存储再加上图片信息就变成不同的格式 第二种方式 pip install scipy 安装对应库
# 方法一
import numpy as np
from PIL import Imageimg Image.open(1.png)
print(img.format,img.size,img.mode)img img.convert(RGB)
img img.resize((320, 240),Image.ANTIALIAS)obj np.array(img)
img Image.fromarray(obj)
img.save(1.jpg) # 把n维数组存为图像可根据后缀自动转换为bmp png jpg等存储img Image.open(1.jpg)
print(img.format,img.size,img.mode)# 方法二
import numpy as np
from PIL import Image
from scipy import misc
img Image.open(8.bmp)
img img.convert(L)
obj np.array(img)
misc.imsave(8_8bit.png, obj) # 把n维数组存为图像可根据后缀自动转换为bmp png jpg等存储8、图像拼接
import os
from PIL import Image
import numpy as npdef mergePic(files):baseimgImage.open(files[0])basematnp.atleast_2d(baseimg) # 转换图像为 至少两维的numpyfor file in files[1:]: # 遍历除第一个外的numpyimImage.open(file)matnp.atleast_2d(im)basematnp.append(basemat,mat,axis1) # 横向追加图像(axis0时为纵向)imgImage.fromarray(basemat)img.save(merge.png)path ./pic/ # 注该路径下的图像必须是相同格式尺寸的图像
images [] # 先存储所有的图像的名称
for root, dirs, files in os.walk(path):for f in files :images.append(pathf)
print(images,len(images))mergePic(images)basematnp.append(basemat,mat,axis1)使用 NumPy 的 np.append() 函数将当前遍历到的图片数组沿着横轴axis1方向追加到基础图像数组 basemat 后面生成新的基础图像数组并将其赋值给 basemat 变量。
imgImage.fromarray(basemat)使用 PIL 库的 Image.fromarray() 方法将 NumPy 数组 basemat 转换为图像对象并将其赋值给 img 变量
images.append(pathf)将每个文件的完整路径添加到 images 列表中