1 图像缩放
缩放是对图像的大小进行调整,即使图像放大或缩小。
1.API
`cv2.resize(src, dsize, fx=0, fy=0, interpolation=cv2.INTER_LINEAR)`
参数:
-
src:输入图像
-
dsize:绝对尺寸,将dsize设置为None,然后将fx和fy设置为比例因子即可
-
interpolation:插值方法
- 示例
import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
# ## 图像缩放
pp = cv.imread("./image/_20201226153617.jpg")
# 绝对尺寸
rows, cols = pp.shape[:2]
res = cv.resize(pp, (2*cols, 2*rows), interpolation=cv.INTER_CUBIC)
# 相对尺寸
res1 = cv.resize(pp, None, fx=0.5, fy=0.5)
# 使用matplotlib显示图像
fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(10, 8), dpi=100)
plt.rcParams['font.sans-serif']=['SimHei'] # 用来正常显示中文
axes[0].imshow(res[:, :, ::-1])
axes[0].set_title("绝对尺寸(放大)")
axes[1].imshow(pp[:, :, ::-1])
axes[1].set_title("原图")
axes[2].imshow(res1[:, :, ::-1])
axes[2].set_title("相对尺度(缩小)")
plt.show()
2 图像平移
图像平移将图像按照指定方向和距离,移动到相应的位置。
-
API
cv.warpAffine(img, M, dsize)
参数:
-
img:输入图像
-
M:2*3移动矩阵
对于(x, y)处的像素点,要把它移动到
( x + t x , y + t y ) (x+t_x,y+t_y) (x+tx,y+ty)
处时,M矩阵应如下设置注意:将M设置为np.float32类型的Numpy数组
-
dsize:输出图像的大小
注意:输出图像的大小,应该是(宽度,高度)的形式。请记住,width=列数,height=行数
-
示例
需求时将图像的像素点移动(50, 100)的距离:
import numpy as np import cv2 as cv import matplotlib.pyplot as plt # 读取图像 pp = cv.imread("./image/_20201226153617.jpg") # 平移 rows, cols = pp.shape[:2] M = np.float32([[1, 0, 500], [0, 1, 200]]) res = cv.warpAffine(pp, M, (cols, rows)) # 显示图像 fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(10, 8), dpi=100) plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文 axes[0].imshow(pp[:, :, ::-1]) axes[0].set_title("原图") axes[1].imshow(res[:, :, ::-1]) axes[1].set_title("平移后的结果") plt.show()
-
3 图像旋转
图像旋转是指图像按照某个位置转动一定角度的过程,旋转中图像仍保持这原始尺寸。图像旋转后图像的水平对称轴、垂直对称轴及中心坐标原点都可能会发生变换,因此需要对图像旋转中的坐标进行相应转换。
图像的旋转形式,如下:
假设图像逆时针旋转θ,则根据坐标转换可得旋转转换为:
{ x ′ = r cos ( α − θ ) y ′ = r sin ( α − θ ) \begin{cases} x^\prime=r\cos(\alpha-\theta)\\ y^\prime=r\sin(\alpha-\theta)\end{cases} {
x′=rcos(α−θ)y′=rsin(α−θ)
其中:
r = x 2 + y 2 , sin α = y x 2 + y 2 , cos α = x x 2 + y 2 r=\sqrt{x^2+y^2},\sin\alpha=\frac{y}{\sqrt{x^2+y^2}},\cos\alpha=\frac{x}{\sqrt{x^2+y^2}} r=x2+y2,sinα=x2+y2y,