刚开始看书的时候感觉书里面使用的方法,自己多看几次就能记住了,不过,看了一些之后,发现可能有的时候看到后面,想一句句读的时候发现忘记了这个方法是干嘛的了,不管是啥方法,先记录一下吧。
打开图片的方法在PIL的Image里:
Image.open()————打开图片
Image.save()————保存图片
创建缩略图
pil_im.thumbnail((128,128))————创建边长为128的缩略图
复制,粘贴图像(注:图像的左上角坐标为(0,0))
box = (10,10,300,300)————四元数组的坐标依次是(左,上,右,下)
region = pil_im.crop(box)————剪裁指定区域
region = region.transpose(Image.ROTATE_180)————旋转180度
pil_im.paste(region,box)————粘贴到指定区域
调整尺寸和旋转
out = pil_im.resize((128,128))————直接调整图片大小
out = pil_im.rotate(45)————将图片按照逆时针旋转角度
axis ———— 坐标轴 0-行 1-列
绘制图像,点和线的方法在Matplotlib里面
这里举几个例:
plot(x,y) 默认为蓝色实线
plot(x,y,‘r*’) 红色星状
plot(x,y,‘go–’) 绿色圆圈虚线
plot(x,y,‘ks:’) 黑色方块点线
图像灰度化 convert(‘L’) 例:im = array(Image.open(“test.jpg”).convert(‘L’))
创建新图像 figure()
新图像的灰度化 gray()
将任意数组按照优先准则转成一维数组 im.flattern() im可以是array,也可以是mat,但不能是list
绘制直方图 hist(im.flattern(),128) 直方图绘制只接受一维数组作为输入。
图像数组表示:
位于坐标i,j,以及颜色通道k的像素值可以通过以下方式访问:
value = im[i,j,k]
多个数组元素可以使用数组切片方式访问。切片方式返回的是以指定间隔下标访问该数组的元素值。下面是灰度图像的一些例子:
im[i,:] = im[j,:] # 将第j行的数值赋值给第i行
im[:,i] = 100 # 将第i列的所有数值都设为100
im[:100,:50].sum() # 计算前100行,前50列所有数值的和
im[50:100,50:100] # 50100行,50100列(不包括第100行和第100列)
im[i].mean() # 第i行所有数值的平均值
im[:,-1] # 最后一列
im[-2,:]or(im[-2]) # 倒数第二行
interp 线性插值,可以理解为平滑图像
numpy
———— eigh 返回矩阵或对称矩阵的特征值和特征向量。
———— dot 返回点积
———— svd 奇异值分解 (作用:求伪逆(求解线性最小平方,最小二乘的问题),平行奇异值,矩阵近似值(PCA)) __PCA作用:把数据集映射到低维空间中去。数据集的特征值按照重要性排序,降维过程就是舍弃不重要的特征向量的过程。
———— roll 循环位移
———— norm 该函数可以衡量两个数组间的差异
———— hstack(a,b) 水平组合 a = ([0,1][1,2]) b = ([0,2],[2,4]) hstack ->[[0,1,0,2][1,2,2,4]]
———— np.concatenate((a,b),axis=1) 水平组合 同hstack()
———— vstack(a,b) 垂直组合 vstack ->([0,1],[1,2],[0,2],[2,4])
———— np.concatenate((a,b),axis=0) 垂直组合 同vstack()
———— np.dstack((a,b)) 深度组合 dstack() -> ([0,0],[1,2],[1,2],[2,4])
———— column_stack() 列组合 多列 二维时同hstack()
———— row_stack() 行组合 多行 二维时同vstack()
———— diag 构建对角矩阵 a = [1,2,3] -> diag(a) -> ([1,0,0],[0,2,0],[0,0,3])
———— lstsq 返回线性矩阵方程的最小二乘解
———— inv() 计算矩阵的(乘法)逆
———— linalg.qr() 计算矩阵的QR分解。把矩阵A作为QR。Q是正交的,R是上三角形
———— linalg.det() 矩阵求行列式(标量)
———— linalg.norm() 计算范数,默认为2 (x1^2 + x2^2 + ··· + xn2)0.5
———— cumsum() 元素累加 ----累积分布函数
———— diag() 如果函数是一维,则组成以一维数组为对角元素的矩阵,如果是二维,则输出对角线元素
———— exp() 返回x的指数 e^x
pickle.dump() 接收所有Python对象,并将其转换成字符串表示(保存)
pickle.load() 载入数据
scipy ———— argsort() 按值排序
matplotlib.delaunay 狄洛克三角剖分
ndimage.affine_transform 应用仿射变换
meshgrid(x_count,y_count) 生成二维网格
geometric_transform() 指定能够描述像素到像素间映射的函数
RANSC "RANdom SAmple Consensus"随机一致性采样 : 用来找到正确模型来拟合带有噪声数据的迭代方法。
homography matrix 单应性矩阵 在计算机视觉中,平面的单应性被定义为一个平面到另外一个平面的投影映射
PyGame PyOpenGL(这部分可用于增强现时)
glMatrix() ———— 将工作矩阵设置为GL_PROJECTION
glLoadIdentity() ———— 将工作矩阵设置为单位矩阵
gluPerspective() ———— 设置投影矩阵,将整个图像定义为视图部分
glLoadMatrix() ———— 一个选项来定义一个完全的投影矩阵
矩阵的旋转:
其实这里我很想写的像个矩阵一样,不过这里的排版真的让我无力吐槽了,也就写成一排能好看些。
绕x轴的主动旋转定义为:
R(x)(degree) = [[1,0,0],[0,cos(degree),-sin(degree)],[0,sin(degree),cos(degree)]]
绕y轴的主动旋转定义为:
R(x)(degree) = [[cos(degree),0,sin(degree)],[0,1,0],[-sin(degree),0,cos(degree)]]
z轴的主动旋转定义为:
R(x)(degree) = [[cos(degree),-sin(degree),0],[sin(degree),cos(degree),0],[0,0,1]]
多维直方图 histogramdd()
map() ———— 将数组转化成列表
list() ———— 对角一个元素都会进行转换