python中常用的图片处理库
import cv2
没有库就执行
pip install opencv-python
cv2.imread(path, flags)
#path是你所要读取图片的地址。
#flag是读取图片的类型:0是读灰度图,1是彩色图(不读取透明度),2也是彩色图(读取透明度)彩色图一般用二即可。
#如果用读取灰度图的方式读取彩色图,会读取到一个灰度图。
#(h,w,c)
#如果给定正确的图片路径,将返回一个[height, width, channel]的numpy.ndarray对象,height表示图片高度,width表示图片宽度,channel表示图片的通道。灰度图则是[height,width]。
如果path路径出现问题会报错提示 检查路径 并返回一个none
注:不知道为什么在读取.gif图片时,路径名设置正确,没有提示错误,但返回的是none。
cv2.imshow('image',img) #前面是自定义显示的图片名,后面是要显示的图片
cv2.waitKey(0) #不是用这个函数,图片会一闪而过。#等待按键。
这没什么需要说的。
cv2.imwrite(path, img)
#path保存的哪里路径名。
#img是要保存的图片
这也没什么需要说的
img2 = cv.resize(img, (w,h),interpolation)
#img原图片
#img2缩放后的图片
#a,b缩放后的宽,高
img2 = cv.resize(img, (w,h))
interpolation是你缩放图像所需要用的插值方式(默认就好)。是缩放图像不是裁剪。
INTER_NEAREST | 最近邻插值 |
---|---|
INTER_LINEAR | 双线性插值(默认设置) |
INTER_CUBIC | 4x4像素邻域的双三次插值 |
INTER_AREA | 使用像素区域关系进行重采样。 |
INTER_LANCZOS4 | 8x8像素邻域的Lanczos插值 |
注:这里刚好和上面的imread相反,读入是(h,w,c)。这里是
(w,h)
均值滤波:
img_smooth = cv2.blur(img_src,ksize=(3,3))
ksize是对多大范围内的像素取均值。
将两幅灰度图做差,用来区分前景和背景
cv2.absdiff(gray_cur, gray_base)
from PIL import Image
没有库就下载
pip install pillow
image = Image.open('path/2092.jpg')
image.show()
image.save('path/1.jpg')
print(image.mode, image.size, image.format)
mode 属性为图片的模式,RGB 代表彩色图像,L 代表光照图像也即灰度图像等
size 属性为图片的大小(宽度,长度)
format 属性为图片的格式,如常见的 PNG、JPEG 等
image.show()
grey_image = image.convert('L') #转灰度图
grey_image.show()
任何支持的图片模式都可以直接转为彩色模式或者灰度模式,但是,若是想转化为其他模式,则需要借助一个中间模式(通常是彩色)来进行过转。
目前只知道彩色转灰度图,之后有时间测试一下其他的转换,之后更新。
array = np.array(image)
print(array.shape) #(321, 481, 3)
out = Image.fromarray(array)
im = image.resize((300, 300))
im = image.rotate(45) # 逆时针旋转 45 度
im = image.transpose(Image.FLIP_LEFT_RIGHT) # 左右翻转
im = im.transpose(Image.FLIP_TOP_BOTTOM)# 上下翻转
我们在读入图片后一般会进行一些计算和处理,通常会转成numpy类型。处理好的图片我们显示出来看时就不能用cv2或PIL了,但matplotlib可以显示numpy类型的图片。
import matplotlib.pyplot as plt
num 区分 fingure的标识
plt.figure(1)
plt.figure(num = 2)
在figure中创建子图,将区域划分为一行两列的区域,第一张图在第一个区域,第二张图在第二个区域。若是plt.subplot(2,2,3),代表划分为两行两列,显示在第三个区域(第二行第一列)。
plt.figure()
plt.subplot(1,2,1)
plt.imshow(images[i])
plt.subplot(1,2,2)
plt.imshow(maskes[i])
plt.show()
该方法适用于保存任何 matplotlib 画出的图像
plt.savefig('lena_new_sz.png')