乐趣区

关于图片: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
图像的读写

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)
退出移动版