在做计算机视觉的我的项目过程中,图像的读写是最根底的工作。上面的内容就是对罕用的几个图像处理库的总结:
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)