Opencv图像处理--几何变换

1 图像缩放

缩放是对图像的大小进行调整,即使图像放大或缩小。

1.API

`cv2.resize(src, dsize, fx=0, fy=0, interpolation=cv2.INTER_LINEAR)`

参数:

  • src:输入图像

  • dsize:绝对尺寸,将dsize设置为None,然后将fx和fy设置为比例因子即可

  • interpolation:插值方法

  1. 示例
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 图像平移

图像平移将图像按照指定方向和距离,移动到相应的位置。

  1. 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+y2 y

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值