• OpenCV-Python学习(15)—— OpenCV 图像旋转角度计算(NumPy 三角函数)


    1. 学习目标

    1. 学会使用 NumPy 的三角函数(sin()、cos()、tan())
    2. 学会使用 NumPy 的反三角函数(arcsin()、arccos()、arctan())

    2. 三角函数输入参数说明

    参数说明
    xarray_like 表示角度,以弧度为单位(2π = 360°) 注意:此处输入的是弧度,需要通过 np.pi 将角度转成弧度进行输入
    outndarray,None,或 ndarray 和 None 可选。表示存储结果的位置。如果提供,它必须具有输入广播到的形状。如果未提供或 None,则返回一个新分配的数组。元组(只能作为关键字参数)的长度必须等于输出的数量。
    wherearray_like 可选。表示此条件通过输入广播。在条件为真的位置,out数组将设置为 ufunc 结果。在其他地方,out数组将保留其原始值。请注意,如果未初始化out数组是通过默认创建的out=None,其中条件为 False 的位置将保持未初始化状态。
    **kwargs表示对于其他仅关键字参数,请参阅 ufunc 文档

    3. 三角函数返回参数说明

    参数说明
    yarray_like。 表示 x 的每个元素的正弦值。如果 x 是标量,则这是一个标量。

    4. 函数使用说明

    4.1 numpy.sin()使用说明
    numpy.sin(x, /, out=None, *, where=True, casting='same_kind', order='K', dtype=None, subok=True[, signature, extobj]) = 
    
    • 1
    4.2 numpy.cos()使用说明
    numpy.cos(x, /, out=None, *, where=True, casting='same_kind', order='K', dtype=None, subok=True[, signature, extobj]) = 
    
    • 1
    4.3 numpy.tan()使用说明
    numpy.tan(x, /, out=None, *, where=True, casting='same_kind', order='K', dtype=None, subok=True[, signature, extobj]) = 
    
    • 1

    5. NumPy 的三角函数(sin()、cos()、tan())实例

    5.1 实例代码
    import numpy as np
    
    rad_pi_every_deg = np.pi / 180
    # 每一度的弧度值
    print('一度的弧度值:',rad_pi_every_deg)
    # 每一度的弧度值对应的角度
    print('每一度的弧度值对应的角度:',np.rad2deg(rad_pi_every_deg))
    
    # 计算30度弧度或三角函数
    methods = [np.sin, np.cos, np.tan]
    vals = list(map(lambda method: np.round(method(rad_pi_every_deg * 30),1),methods))
    print('计算30度弧度或三角函数:',vals)
    
    # 计算0,30,45,60,90度的正弦,余弦,正切的值
    degs = [0,30,45,60,90]
    # 将角度转对应弧度
    degs = list(map(lambda val: rad_pi_every_deg * val,degs))
    # 计算0,30,45,60,90度的正弦值
    vals_sin = np.sin(degs)
    print('计算0,30,45,60,90度的正弦值:', vals_sin)
    # 计算0,30,45,60,90度的余弦值
    vals_cos = np.cos(degs)
    print('计算0,30,45,60,90度的余弦值:', vals_cos)
    # 计算0,30,45,60,90度的正切值
    vals_tan = np.tan(degs)
    print('计算0,30,45,60,90度的正切值:', vals_tan)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    5.2 实例运行结果
    一度的弧度值: 0.017453292519943295
    每一度的弧度值对应的角度: 1.0
    计算30度弧度或三角函数: [0.5, 0.9, 0.6]
    计算0,30,45,60,90度的正弦值: [0.         0.5        0.70710678 0.8660254  1.        ]
    计算0,30,45,60,90度的余弦值: [1.00000000e+00 8.66025404e-01 7.07106781e-01 5.00000000e-01
     6.12323400e-17]
    计算0,30,45,60,90度的正切值: [0.00000000e+00 5.77350269e-01 1.00000000e+00 1.73205081e+00
     1.63312394e+16]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    6. 反三角函数输入参数说明

    参数数据类型说明
    x数组型变量表示单位圆上的y坐标。
    outn维数组,None,n维数组组成的元组,可选参数表示指定结果存储的位置。若提供此参数,其维度必须与输入数组广播后的维度一致。若不提供此参数或参数值为None,将返回新开辟的数组。若此参数为元组,其长度必须和返回值的个数保持一致。
    where数组型变量,可选参数表示True用于标记进行函数计算的位置,False用于标记此位置不进行函数计算,直接将输入值原样返回,通常用默认值即可。

    7. 反三角函数返回参数说明

    参数数据类型说明
    yn维数组表示对x中的每一个元素求反三角函数值。结果为弧度制且落在闭区间[-pi/2, pi/2]内。如果x为标量,那么此计算值也为标量。注意【返回值:以弧度为单位】

    7. 反三角函数使用说明

    7.1 numpy.arcsin()使用说明
    numpy.arcsin(x, /, out=None, *, where=True, casting='same_kind', order='K', dtype=None, subok=True[, signature, extobj]) = 
    
    • 1
    7.2 numpy.arccos()使用说明
    numpy.arccos(x, /, out=None, *, where=True, casting='same_kind', order='K', dtype=None, subok=True[, signature, extobj]) = 
    
    • 1
    7.3 numpy.arctan()使用说明
    numpy.arctan(x, /, out=None, *, where=True, casting='same_kind', order='K', dtype=None, subok=True[, signature, extobj]) = 
    
    • 1

    8. NumPy 的反三角函数(arcsin()、arccos()、arctan())实例

    8.1 实例代码
    import numpy as np
    
    rad_pi_every_deg = np.pi / 180
    # 每一度的弧度值
    print('一度的弧度值:',rad_pi_every_deg)
    # 每一度的弧度值对应的角度
    print('每一度的弧度值对应的角度:',np.rad2deg(rad_pi_every_deg))
    
    # 计算30度弧度或三角函数
    methods = [np.sin, np.cos, np.tan]
    vals = list(map(lambda method: np.round(method(rad_pi_every_deg * 30),1),methods))
    print('计算30度弧度或三角函数:',vals)
    
    # 计算0,30,45,60,90度的正弦,余弦,正切的值
    degs = [0,30,45,60,90]
    # 将角度转对应弧度
    degs = list(map(lambda val: rad_pi_every_deg * val,degs))
    # 计算0,30,45,60,90度的正弦值
    vals_sin = np.sin(degs)
    print('计算0,30,45,60,90度的正弦值:', vals_sin)
    # 计算0,30,45,60,90度的余弦值
    vals_cos = np.cos(degs)
    print('计算0,30,45,60,90度的余弦值:', vals_cos)
    # 计算0,30,45,60,90度的正切值
    vals_tan = np.tan(degs)
    print('计算0,30,45,60,90度的正切值:', vals_tan)
    
    # 计算0,30,45,60,90度的反正弦,反余弦,反正切的值,注意【返回值:以弧度为单位】
    # 计算0,30,45,60,90度的反正弦值
    vals_arcsin = np.rad2deg(np.arcsin(vals_sin))
    print('计算0,30,45,60,90度的反正弦值:', vals_arcsin)
    # 计算0,30,45,60,90度的反余弦值
    vals_arccos = np.rad2deg(np.arccos(vals_cos))
    print('计算0,30,45,60,90度的反余弦值:', vals_arccos)
    # 计算0,30,45,60,90度的反正切值
    vals_arctan = np.rad2deg(np.arctan(vals_tan))
    print('计算0,30,45,60,90度的反正切值:', vals_arctan)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    8.2 反三角函数输出结果
    计算0,30,45,60,90度的反正弦值: [ 0. 30. 45. 60. 90.]
    计算0,30,45,60,90度的反余弦值: [ 0. 30. 45. 60. 90.]
    计算0,30,45,60,90度的反正切值: [ 0. 30. 45. 60. 90.]
    
    • 1
    • 2
    • 3

    9. 弧度与度之间的转换函数

    函数说明使用方法
    numpy.degrees()将角度从弧度转换为度。numpy.degrees(x, /, out=None, *, where=True, casting=‘same_kind’, order=‘K’, dtype=None, subok=True[, signature, extobj]) =
    numpy.rad2deg()将角度从弧度转换为度。numpy.rad2deg(x, /, out=None, *, where=True, casting=‘same_kind’, order=‘K’, dtype=None, subok=True[, signature, extobj]) =
    numpy.radians()将角度从度转换为弧度。numpy.radians(x, /, out=None, *, where=True, casting=‘same_kind’, order=‘K’, dtype=None, subok=True[, signature, extobj]) =
    numpy.deg2rad()将角度从度转换为弧度。numpy.deg2rad(x, /, out=None, *, where=True, casting=‘same_kind’, order=‘K’, dtype=None, subok=True[, signature, extobj]) =

    10. 总结

    1. numpy.deg2rad(x) 等于 x * pi / 180;
    2. numpy.radians(x) 等于 x * pi / 180;
    3. 三角函数的输入值是弧度,因此在求一个角的三角函数是,必须将度转换为弧度
    4. 反三角函数的返回值是弧度,因此要得到反三角函数的角度,必须将弧度转换为度
  • 相关阅读:
    jenkins发布java项目和执行shell脚本nohup的总结
    密码学奇妙之旅、02 混合加密系统、AES、RSA标准、Golang代码
    EmguCV-C#版本Opencv图像识别和处理
    2024年java面试--mysql(4)
    软件测试外包干了4年,感觉废了...
    基于django电影推荐系统
    使用缓冲区提高并发
    【无标题】
    k8s网络插件之Calico
    零基础如何入门到精通人工智能Pytorch, 深度学习,如何跟进AI领域的最新算法,如何读论文、找代码
  • 原文地址:https://blog.csdn.net/m0_38082783/article/details/127921217