Python-opencv计算两条直线或者线段角度

这篇具有很好参考价值的文章主要介绍了Python-opencv计算两条直线或者线段角度。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Python-opencv计算两条直线或者线段角度

方法一

通过斜率关系计算,公式如下图:
Python-opencv计算两条直线或者线段角度,# Python - opencv,python,opencv,计算机视觉,人工智能,目标检测
需注意在求斜率时不要出现竖直情况,python计算会报错,但按理说应该可以计算出无穷的,此处先放这吧,等后期有时间再来解释这里原因。

#openpose求角度
def GetAngle(line1, line2):
    """
    计算两条线段之间的夹角,若已知两直线斜率:m1,m2
     angle = atan(abs((m2 - m1) / (1 + (m2 * m1)))
    :param line1:
    :param line2:
    :return:
    """
    dx1 = line1[0][0] - line1[1][0]
    dy1 = line1[0][1] - line1[1][1]
    dx2 = line2[0][0] - line2[1][0]
    dy2 = line2[0][1] - line2[1][1]

    #求斜率
    m1=dy1/dx1
    m2=dy2/dx2
    insideAngle=math.atan(abs((m2-m1)/(1+(m1*m2))))

    angle=insideAngle/math.pi*180
    if angle>-370 and angle<370:
        angle=int(angle)

    return angle

方法二:

#openpose求角度
def GetAngle(line1, line2):
    """
    计算两条线段之间的夹角
    :param line1:
    :param line2:
    :return:
    """
    dx1 = line1[0][0] - line1[1][0]
    dy1 = line1[0][1] - line1[1][1]
    dx2 = line2[0][0] - line2[1][0]
    dy2 = line2[0][1] - line2[1][1]
    angle1 = math.atan2(dy1, dx1)
    angle1 = int(angle1 * 180 / math.pi)
    # print(angle1)
    angle2 = math.atan2(dy2, dx2)
    angle2 = int(angle2 * 180 / math.pi)
    # print(angle2)
    if angle1 * angle2 >= 0:
        insideAngle = abs(angle1 - angle2)
    else:
        insideAngle = abs(angle1) + abs(angle2)
        if insideAngle > 180:
            insideAngle = 360 - insideAngle
    insideAngle = insideAngle % 180
    return insideAngle

方法三

通过余弦定理计算三点角度:
Python-opencv计算两条直线或者线段角度,# Python - opencv,python,opencv,计算机视觉,人工智能,目标检测
若三边为a,b,c ,则如图所示,在△ABC中:
Python-opencv计算两条直线或者线段角度,# Python - opencv,python,opencv,计算机视觉,人工智能,目标检测
使用前提:分母不要有出现0的情况。

实现:通过三点构成三角形,先计算各边长度,再带入余弦公式求解角度文章来源地址https://www.toymoban.com/news/detail-606838.html

def DIST(p1,p2):
    '''
    func:求两点间距离
    @para p1,p2:点坐标(x1,y1),(x2,y2)
    @para return:距离
    '''
    return math.sqrt((p1[0]-p2[0])*(p1[0]-p2[0])+(p1[1]-p2[1])*(p1[1]-p2[1]))


# #openpose求角度
def GetAngle(p1,p2,p3):
    """
    若已知3点,求以中间点为原点的夹角
    :param p1,p2,p3:点坐标(x,y)
    :param return: 角度
    """
    #余弦定理求夹角
    A=DIST(p1,p2)
    B=DIST(p2,p3)
    C=DIST(p1,p3)

    angle=math.acos((A*A+B*B-C*C)/(2*A*B))
    return angle/math.pi*180

到了这里,关于Python-opencv计算两条直线或者线段角度的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • PCL 判断两条线段的平行性(三维空间)

    这里使用一种比较有趣的方式来判断三维空间中两条线段的平行性,我们都知道两条线段所代表的矢量进行叉乘计算所得数值,代表了由这两条线段组成的平行四边形的面积值,如下图所示: ok,那么如果将此结论推广到三维空间呢?可以得到下面的形式: 其中, i ⃗

    2024年02月10日
    浏览(43)
  • python-opencv

    python_opencv安装使用笔记 链接: OpenCV——基于Python开发的OpenCV安装教程 链接: Python使用pip安装库时WARNING: You are using pip version 21.3.1; however, version 22.3.1 is available.的解决办法 链接: Opencv中的图像相加,相减,相除,相乘(python实现) 链接: opencv-python识别魔方特定颜色方块,并输

    2024年02月01日
    浏览(48)
  • python-opencv划痕检测

    这次实验,我们将对如下图片进行划痕检测,其实这个比较有难度,因为清晰度太差了。 我们做法如下: (1)读取图像为灰度图像,进行自适应直方图均衡化处理,增强图片对比度 (2)然后进行三次图像去噪 - 高斯滤波 (3)然后我们再进行一次直方图均衡操作增强图片

    2024年02月03日
    浏览(44)
  • 【python-opencv】硬币检测

    使用 python3.8.x,opencv 使用图像处理技术,从照片中识别硬币的个数,并判断总价值。 使用颜色特征,识别出5角硬币 使用半径大小,判断出1角和1元硬币。 具体操作 将图片转换为HSV颜色模型 部分代码 提取轮廓信息 cv2.findContours() 拟合椭圆,提取ROI cv2.fitEllipse() 模板匹配 cv

    2024年02月02日
    浏览(44)
  • 智能车巡线python-opencv

    思路:先拿赛道通过HSV调阈值,然后得到二值化图片,对二值化图像进行巡线; 以左线为例子:(图片大小为480*640) 图片以最后一行开始往第一行循环作为外循环(设为i),以中线开始往左减一作为内循环(设为j);记录该行的跳变点:即如果该行的该列为白色(255),

    2024年02月04日
    浏览(49)
  • ROS+Python-opencv(1)

    #!/usr/bin/env python # -*- coding: utf-8 -*- # # Copyright (c) 2021 PS-Micro, Co. Ltd. # # SPDX-License-Identifier: Apache-2.0 # #该python文件可以当作节点放在工作空间中启动 import time import rospy import cv2 from cv_bridge import CvBridge, CvBridgeError from sensor_msgs.msg import Image import numpy as np from math import * from geometry_

    2024年03月19日
    浏览(67)
  • python-opencv划痕检测-续

    这次划痕检测,是上一次划痕检测的续集。 处理的图像如下: 这次划痕检测,我们经过如下几步: 第一步:读取灰度图像 第二步:进行均值滤波 第三步:进行图像差分 第四步:阈值分割 第五步:轮廓检测 第六步:绘制轮廓,并将过滤面积较小的轮廓,且进行轮廓填充 代码

    2024年01月17日
    浏览(43)
  • Python-OpenCV 图像的基础操作

    首先读入一副图像: 获取像素值及修改的更好方法: img = cv2.imread(‘./resource/image/1.jpg’, cv2.IMREAD_COLOR) img.shape: 图像的形状(包括行数,列数,通道数的元组) img.size : 图像的像素数目 img.dtype :图像的数据类型 ROI(regionofinterest),感兴趣区域。机器视觉、图像处理中,从被

    2024年02月14日
    浏览(46)
  • python-opencv车牌检测和定位

    第一章 python-opencv-图片导入和显示 第二章 python-opencv图像简单处理 第三章 python-opencv图像mask掩膜处理 第四章 python-opencv图像马赛克 第五章 python-opencv人脸马赛克 第六章 python-opencv人脸检测 第七章 python-opencv图像张贴 第八章 python-opencv轮廓绘制 第九章 python-opencv边缘检测 第十

    2024年02月07日
    浏览(53)
  • 相机标定原理与实战【python-opencv】

    相机的功能就是将真实的三维世界拍摄形成二维的图片。所以可以将相机成像的过程看做一个函数,输入是一个三维的场景,输出是二维的图片。但是,当我们想将二维的图片反映射成三维场景时,很明显,我们无法仅通过一张二维图来得到真实的三维场景。也就是说,上述

    2024年02月09日
    浏览(64)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包