python图像的读写

在做计算机视觉的项目过程中,图像的读写是最基础的工作。下面的内容就是对常用的几个图像处理库的总结:

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
图像的读写
python图像的读写_第1张图片

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)

你可能感兴趣的:(图片,opencv-python,tensorflow)