在做计算机视觉的我的项目过程中,图像的读写是最根底的工作。上面的内容就是对罕用的几个图像处理库的总结:
1、imageio
imageio 是python的一个库,提供了简洁的图像读写接口,可能读写大部分格局的图像数据。
import imageioim = imageio.imread('imageio:chelsea.png') # read a standard imageimageio.imwrite('~/chelsea-gray.jpg', im[:, :, 0])
还能够读写视频
import imageioreader = 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()#一个像素有三个通道,BGRprint(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 cv2import numpy as npimg = cv2.imread('messi5.jpg')res = cv2.resize(img,None,fx=2, fy=2, interpolation = cv2.INTER_CUBIC)#ORheight, 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 Imageim = 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 Imageim = 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)