在做计算机视觉的项目过程中,图像的读写是最基础的工作。下面的内容就是对常用的几个图像处理库的总结:
1、imageio
imageio 是python的一个库,提供了简洁的图像读写接口,能够读写大部分格式的图像数据。
import imageio
im = imageio.imread('imageio:chelsea.png') # read a standard image
imageio.imwrite('~/chelsea-gray.jpg', im[:, :, 0])
还可以读写视频
import imageio
reader = imageio.get_reader('imageio:cockatoo.mp4')
for i, im in enumerate(reader):
print('Mean of frame %i is %1.1f' % (i, im.mean()))
2、OpenCV opencv-基础知识--参考链接
图像读取和显示
import cv2 #导入opencv库
#读取一张图片,地址不能带中文
#第二个参数,取值可为:
#cv2.IMREAD_COLOR:默认参数,读入一副彩色图片,忽略alpha通道
#cv2.IMREAD_GRAYSCALE:读入灰度图片
#cv2.IMREAD_UNCHANGED:读入完整图片,包括alpha通道(png有,jpg无)
img=cv2.imread("test.jpg",cv2.IMREAD_COLOR)
#img=cv2.imread("test.jpg")
img_gray = cv2.imread("test.jpg", 0)
#显示图片,参数:(窗口标识字符串,imread读入的图像)
cv2.imshow("标题",img)
#窗口等待任意键盘按键输入,0为一直等待,其他数字为毫秒数
cv2.waitKey(0)
#销毁窗口,退出程序
cv2.destroyAllWindows()
#一个像素有三个通道,BGR
print(img.shape)#输出:(1080, 1920, 3) 高像素,宽像素,通道数
print(img.size)# 120000 总通道数=高* 宽* 通道数
print(img.dtype)# uint8 3个通道每个通道占的位数(8位,一个字节)
色彩转换
#将图片由BGR转换为灰度
areax=cv2.cvtColor(areax,cv2.COLOR_BGR2GRAY)
图像保存
#将图片保存,写入到文件
cv2.imwrite("2.jpg",imgviewx)
改变图像尺寸
cv2.resize() #放大和缩小图像
#参数:
# src: 输入图像对象
# dsize:输出矩阵/图像的大小,为0时计算方式如下:dsize = Size(round(fx*src.cols),round(fy*src.rows))
# fx: 水平轴的缩放因子,为0时计算方式: (double)dsize.width/src.cols
# fy: 垂直轴的缩放因子,为0时计算方式: (double)dsize.heigh/src.rows
# interpolation:插值算法
# cv2.INTER_NEAREST : 最近邻插值法
# cv2.INTER_LINEAR 默认值,双线性插值法
# cv2.INTER_AREA 基于局部像素的重采样(resampling using pixel area relation)。
# cv2.INTER_CUBIC 基于4x4像素邻域的3次插值法
# cv2.INTER_LANCZOS4 基于8x8像素邻域的Lanczos插值
import cv2
import numpy as np
img = cv2.imread('messi5.jpg')
res = cv2.resize(img,None,fx=2, fy=2, interpolation = cv2.INTER_CUBIC)
#OR
height, width = img.shape[:2]
res = cv2.resize(img,(2*width, 2*height), interpolation = cv2.INTER_CUBIC)
#图像放大两倍
图像处理
#均值模糊,主要用于去除图片噪点
#读取图片并实现图片的模糊效果,参数:(读取图片,(X轴方向模糊,Y轴方向模糊))
imgviewx=cv2.blur(imgviewx,(5,5))
#中值模糊,主要用于去除椒盐(烧烤配料)噪点
#参数:(图片信息,模糊值)
imgviewx=cv2.medianBlur(imgviewx,9)
#普通高斯模糊
#参数:(图片信息,参数1,参数2)参数1和参数2只能设置一个
imgviewx=cv2.GaussianBlur(imgviewx,(0,0),1)
#保留边缘(像素差),高斯模糊
#参数(图片信息,0,要用怎样的方式(越大则越细),空间复杂度(越大越复杂))
imgviewx=cv2.bilateralFilter(imgviewx,0,50,6)
3、PIL
PIL常用到的类有:Image、ImageFilter和ImageEnhance
图像的读写
from PIL import Image
im = Image.open("1.png")
im.show()
# 打印图片属性
print(im.format, im.size, im.mode)
# format属性定义了图像的格式,如果图像不是从文件打开的,那么该属性值为None;
# size属性是一个tuple,表示图像的宽和高(单位为像素);
# mode属性为表示图像的模式,常用的模式为:L为灰度图,RGB为真彩色,CMYK为pre-press图像。
im.save("c:","jpeg")
# 可以用来转换图像格式
图像色彩控件转换
#convert() 是图像实例对象的一个方法,接受一个 mode 参数,用以指定一种色彩模式,mode 的取值可以是如下几种:
#· 1 (1-bit pixels, black and white,)
#· L (8-bit pixels, black and white)
#· P (8-bit pixels, mapped to any other mode using a colour palette)
#· RGB (3x8-bit pixels, true colour)
#· CMYK (4x8-bit pixels, colour separation)
#· F (32-bit floating point pixels)
im = Image.open('1.png').convert('L')
图像size
#im.resize(size, filter) ⇒ image
#变量size是所要求的尺寸,是一个二元组:(width, height)。
#变量filter为NEAREST、BILINEAR、BICUBIC或者ANTIALIAS之一。如果忽略,或者图像模式为“1”或者“P”,该变量设置为#NEAREST。在当前的版本中bilinear和bicubic滤波器不能很好地适应大比例的下采样(例如生成缩略图)。用户需要使用#ANTIALIAS,除非速度比质量更重要。
from PIL import Image
im = Image.open("3d.jpg")
region = im.resize((400, 400)) ##重新设定大小
region.show()
图像处理
from PIL import Image, ImageFilter
im = Image.open(‘1.png’) # 高斯模糊
im.filter(ImageFilter.GaussianBlur) # 普通模糊
im.filter(ImageFilter.BLUR) # 边缘增强
im.filter(ImageFilter.EDGE_ENHANCE) # 找到边缘
im.filter(ImageFilter.FIND_EDGES) # 浮雕
im.filter(ImageFilter.EMBOSS) # 轮廓
im.filter(ImageFilter.CONTOUR) # 锐化
im.filter(ImageFilter.SHARPEN) # 平滑
im.filter(ImageFilter.SMOOTH) # 细节
im.filter(ImageFilter.DETAIL)