一个用python实现的科学计算,包括:1、一个强大的N维数组对象Array;2、比较成熟的(广播)函数库;3、用于整合C/C++和Fortran代码的工具包;4、实用的线性代数、傅里叶变换和随机数生成函数。numpy和稀疏矩阵运算包scipy配合使用更加方便。
提供了许多高级的数值编程工具,如:矩阵数据类型、矢量处理,以及精密的运算库。专为进行严格的数字处理而产生。
由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。
在安装pil时遇到了问题:Could not find a version that satisfies the requirement pil (from versions: none);
网上说是因为现在PIL已经被PILLOW代替了,所以安装这个就好了。
img = cv2.imread('图片名')
plt.imshow(img)
image库中的rotate实现
from PIL import Image ##直接import Image会报错
im1 = Image.open("图片名称") ##Image的I大写,不然会报错
im2 = im1.rotate(60)
im2.show()
im2.save("图片名称")
PIL库中的transpose实现
import os
from PIL import Image
img = Image.open('图片名称')
img = img.transpose(Image.ROTATE_90) # 将图片逆时针旋转90度
#img = img.transpose(Image.ROTATE_180) # 将图片逆时针旋转180度
#img = img.transpose(Image.ROTATE_270) # 将图片逆时针旋转270度
img.show("旋转后函数名")
img.save("旋转后函数名")
OpenCV中的getRotationMatrix2D与warpAffine
本质是把图像当成一个矩阵,然后旋转变量当成另一个矩阵,然后通过矩阵变换实现图像的旋转
具体操作步骤如下:
抓取图像的尺寸,然后确定中心;
抓取旋转矩阵(应用角度的负数顺时针旋转),然后抓取正弦和余弦(即矩阵的旋转分量);
计算图像的新边界维数;
调整旋转矩阵以考虑平移;
执行实际旋转并返回图像;
函数说明:
shape函数是numpy.core.fromnumeric中的函数,它的功能是查看矩阵或者数组的维数。
transpose()简单来说,就相当于数学中的转置,在矩阵中,转置就是把行与列相互调换位置。
import cv2
import numpy as np
def rotate_bound(image, angle):
# grab the dimensions of the image and then determine the center
(h, w) = image.shape[:2] #h是图像矩阵的行数,w是图像矩阵的列数
(cX, cY) = (w // 2, h // 2) #//运算符:取整除 - 返回商的整数部分(向下取整)
# grab the rotation matrix (applying the negative of theangle to rotate clockwise), then grab the # sine and cosine(i.e., the rotation components of the matrix)
m = cv2.getRotationMatrix2D((cX, cY), -angle, 1.0)
cos = np.abs(m[0, 0])
sin = np.abs(m[0, 1])
# compute the new bounding dimensions of the image
nw = int((h * sin) + (w * cos))
nh = int((h * cos) + (w * sin))
# adjust the rotation matrix to take into account translation
m[0, 2] += (nw / 2) - cX
m[1, 2] += (nh / 2) - cY
# perform the actual rotation and return the image
return cv2.warpAffine(image, m, (nw, nh))
img1 = cv2.imread('test1.jpg')
img2 = rotate_bound(img1, 90)
cv2.imshow('ww1', img1)
cv2.imshow('ww2', img2)
cv2.waitKey()
import cv2
from PIL import Image
import numpy
image = Image.open("图片名")
image.show()
img = cv2.cvtColor(numpy.asarray(图片变量名),cv2.COLOR_RGB2BGR)
cv2.imshow("OpenCV",img)
cv2.waitKey()
import cv2
from PIL import Image
import numpy
img = cv2.imread("plane.jpg")
cv2.imshow("OpenCV",img)
image = Image.fromarray(cv2.cvtColor(img,cv2.COLOR_BGR2RGB))
image.show()
cv2.waitKey()
操作点 | PIL | cv2 |
|---|---|---|
保存图片 |
|
|
看图片大小 |
|
|
裁剪 | crop |
|
很详细的cv2基本操作
包括读入显示保存图片
图片翻转复制裁剪颜色
当我写完了这些偶然发现居然有一个函数可以直接翻转
1 | 水平翻转 |
|---|---|
0 | 垂直翻转 |
-1 | 水平垂直翻转 |
类似这种:

本文章使用limfx的vscode插件快速发布