Python从入门到放弃(6)-图像时序表格数据处理

Posted by 高庆东 on November 8, 2019

表格式数据处理

图片数据处理

常用的主要是opencv和PIL这两个库是,记录一下这两个库的常用方法和区别,从理论上说opencv相对较快
首先说opencv,opencv读取的数据是以numpy方式存储,我们可以使用numpy来操作数据

#img返回的是BGR的三通道
import cv2
import numpy as np
img=cv2.imread('/path',0)#参数0表示读取的是灰度图像 img是numpy类型的一般主要是uint8类型

#分离三个通道的数据
b = cv2.split(img)[0]
g = cv2.split(img)[1]
r = cv2.split(img)[2]
#图像缩放尺寸size_h 表示缩放后图像的横坐标
img=cv2.resize(img,(size_w,size_h),interpolation=cv2.INTER_CUBIC)
#保存图片
cv2.imwrite('./img.png',img)#和很多保存正好相反
#对图像进行选装仿射变化

rows,cols,channel=img.shape
M=np.float32([[1,0,50],[0,1,50]])  #只进行平移变化,移动可以取负值
dst=cv2.warpAffine(img,M,(rows,cols))

#第一个参数为旋转中心,第二个为旋转角度,第三个为旋转后的缩放因子相比于原始图像尺寸倍数mai
M=cv2.getRotationMatrix2D((cols/2,rows/2),45,1)
dst=cv2.warpAffine(img,M,(cols,rows))

#在图像画线,起点终点颜色和线粗细
cv2.line(img, (10,10), (100,100), (225, 0,0),1)

再说说PIL. PIL中最主要的是Image对象.这个对象包含了大部分的处理方法保存读取修改等.

#读取图像
img=Image.open('./path',mode).convert('L') #其中mode表示读取方式,有`'L'`表示灰度,`'RGB'`还有`1`表示二值读取
#将图像转化为numpy矩阵
import numpy as np
img_m=np.array(img)

#从矩阵转化为图像
img=Image.fromarray(img_m)
img.paste((256,256,0),(10,20,30,40))#在(10,20,30,40)区域内填充三个通道颜色

数据增强

图像数据集增强

图像镜像

def img_flip(image):
    # 0以X轴为对称轴翻转,>0以Y轴为对称轴翻转, <0X轴Y轴翻转
    horizontally = cv2.flip(image, 0)  # 水平镜像
    vertically = cv2.flip(image, 1)  # 垂直镜像
    hv = cv2.flip(image, -1)  # 水平垂直镜像

    # 显示图形
    cv2.imshow("Horizontally", horizontally)
    cv2.imshow("Vertically", vertically)
    cv2.imshow("Horizontally & Vertically", hv)

旋转

def img_rotation(image):
    # 原图的高、宽 以及通道数
    rows, cols, channel = image.shape

    # 绕图像的中心旋转
    # 参数:旋转中心 旋转度数 scale
    M = cv2.getRotationMatrix2D((cols / 2, rows / 2), 30, 1)
    # 参数:原始图像 旋转参数 元素图像宽高
    rotated = cv2.warpAffine(image, M, (cols, rows))

    # 显示图像
    cv2.imshow("rotated", rotated)
    

缩放数据

from PIL import Image
img2 = Image.open('../123f.png')
print("初始尺寸",img2.size)
img3=img2.resize((128,128))   #对图像尺寸进行缩放
print("Image.resize",img3.size)

img2.thumbnail((400,400))  #是同比例缩放。
print("默认缩放NEARESET",img2.size)
np.array(img2).shape  #WHC

时序数据处理