iis服务器助手广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python+OpenCV如何实现角度测量
  • 515
分享到

Python+OpenCV如何实现角度测量

2023-06-29 10:06:32 515人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章主要为大家展示了“python+OpenCV如何实现角度测量”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Python+OpenCV如何实现角度测量”这篇文章吧。最终实现效果:在图片上用

这篇文章主要为大家展示了“python+OpenCV如何实现角度测量”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Python+OpenCV如何实现角度测量”这篇文章吧。

最终实现效果:在图片上用鼠标确认三点,程序将会显示由此三点确定的角度,如下图所示。

Python+OpenCV如何实现角度测量

1、鼠标选点

# -*- coding: utf-8 -*- import cv2 path = "picture_MQa\\angle_measure.bmp"img = cv2.imread(path)pointsList = [] def mousePoints(event,x,y,flags,params):    if event  == cv2.EVENT_LBUTTONDOWN:        cv2.circle(img,(x,y),5,(0,0,255),cv2.FILLED)        print(x,y) while True:    cv2.imshow('Image', img)    cv2.setMouseCallback('Image',mousePoints)        key_scan = cv2.waiTKEy(1) & 0xff         if key_scan == ord("q"):        pointsList = []        img = cv2.imread(path)    elif key_scan == ord("s"):        break    cv2.destroyAllwindows()

while循环内cv2.setMouseCallback('Image',mousePoints)为鼠标中断触发事件的开启函数,作用是当在Image图片上鼠标触发中断事件时,程序跳转到mousePoints()中断服务函数内,并给mousePoints()的五个入口参数event,x,y,flags,params赋值。其中, event是cv2_EVENT_* (MouseEventTypes)类型的变量,为鼠标触发中断事件的类型;x和y为鼠标触发中断事件时在image图像的横纵坐标;flags是cv2_EVENT_FLAG_* (MouseEventFlags)类型的变量,为特殊中断事件的标志位;param是用户自定义的参数。本文的程序中使用 EVENT_LBUTTONDOW#左键点击触发事件,当鼠标左键点击时,标注该点并记录其坐标。

event的赋值:

  • EVENT_MOUSEMOVE             #滑动

  • EVENT_LBUTTONDOWN         #左键点击

  • EVENT_RBUTTONDOWN        #右键点击

  • EVENT_MBUTTONDOWN       #中键点击

  • EVENT_LBUTTONUP               #左键放开

  • EVENT_RBUTTONUP              #右键放开

  • EVENT_MBUTTONUP              #中键放开

  • EVENT_LBUTTONDBLCLK      #左键双击

  • EVENT_RBUTTONDBLCLK     #右键双击

  • EVENT_MBUTTONDBLCLK    #中键双击

2、角度计算 

由1可以得到鼠标点击位置处的坐标,我们将其放入pointList列表内。当列表内的坐标数目为3的倍数时调用getAngle()函数,计算出三点确定的两条直线的夹角。

def gradient(pt1,pt2):    return ((pt2[1]-pt1[1])/(pt2[0]-pt1[0])) def getAngle(pointsList):    pt1,pt2,pt3 = pointsList[-3:]     m1 = gradient(pt1, pt2)    m2 = gradient(pt1, pt3)    angR = abs(math.atan((m2-m1)/(1+m2*m1)))    angD = round(math.degrees(angR))        cv2.putText(img,str(angD),(pt1[0]-40,pt1[1]-20),cv2.FONT_HERSHEY_COMPLEX,                1.5,(0,0,255))

由直线的两点式方程可得直线的倾斜角为angle = arctan(y2-y1,x2-x1),则两条直线的夹角为angle0 =angle1-angle2 = arctan(y2-y1,x2-x1) - arctan(y2-y3,x2-x3)。以上函数便可根据三点的坐标值求其形成夹角的角度。

3、完整程序

# -*- coding: utf-8 -*-'''测量鼠标点击过的三点形成的角度'''import cv2import math path = "picture_mqa\\angle_measure.bmp"  #图片路径img = cv2.imread(path)pointsList = [] #鼠标中断触发函数,将鼠标触发事件位置处描点并将该点的坐标值纪录入pointList列表内#连接相邻三点使其形成一个夹角def mousePoints(event,x,y,flags,params):    if event  ==cv2.EVENT_LBUTTONDOWN:        size = len(pointsList)        if size != 0 and size%3 !=0:            cv2.line(img,tuple(pointsList[round((size-1)/3)*3]),(x,y),(0,0,255))        cv2.circle(img,(x,y),5,(0,0,255),cv2.FILLED)        pointsList.append([x,y]) #由两点的坐标值计算两点所在直线的斜率        def gradient(pt1,pt2):    return ((pt2[1]-pt1[1])/(pt2[0]-pt1[0])) #根据相邻的三点计算出其形成夹角的角度值def getAngle(pointsList):    pt1,pt2,pt3 = pointsList[-3:]     m1 = gradient(pt1, pt2)    m2 = gradient(pt1, pt3)    angR = abs(math.atan((m2-m1)/(1+m2*m1)))    angD = round(math.degrees(angR))        cv2.putText(img,str(angD),(pt1[0]-40,pt1[1]-20),cv2.FONT_HERSHEY_COMPLEX,                1.5,(0,0,255))         while True:    cv2.imshow('Image', img) #图片显示    cv2.setMouseCallback('Image',mousePoints) #鼠标触发事件开启        if len(pointsList) % 3 ==0 and len(pointsList)!=0: #鼠标每触发中断3次计算一次其形式夹角的角度值        getAngle(pointsList)        key_scan = cv2.waitKey(1) & 0xff #键盘扫描    if key_scan == ord("q"):  #输入'q'时图片刷新        pointsList = []        img = cv2.imread(path)            elif key_scan == ord("s"): #输入's'时退出程序        break    cv2.destroyAllWindows()

以上是“Python+OpenCV如何实现角度测量”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网Python频道!

--结束END--

本文标题: Python+OpenCV如何实现角度测量

本文链接: https://www.lsjlt.com/news/324031.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python+OpenCV如何实现角度测量
    这篇文章主要为大家展示了“Python+OpenCV如何实现角度测量”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Python+OpenCV如何实现角度测量”这篇文章吧。最终实现效果:在图片上用...
    99+
    2023-06-29
  • Python+OpenCV实现角度测量的示例代码
    本文介绍如何使用python语言实现角度测量,程序包括鼠标选点、直线斜率计算、角度计算三个子程序和一个主程序。最终实现效果:在图片上用鼠标确认三点,程序将会显示由此三点确定的角度,如...
    99+
    2024-04-02
  • opencv实现角点检测
    本文实例为大家分享了opencv实现角点检测的具体代码,供大家参考,具体内容如下 1、特征点的作用:使用特征点代表图像内容 运动目标跟踪物体识别图像配准全景图像拼接三维重建 2、Ha...
    99+
    2022-11-13
    opencv 角点检测
  • Python+OpenCV实现边缘检测与角点检测详解
    目录一、边缘检测1.1、读取图像1.2、图像转换成灰度图像1.3、Sobel算子1.4、Canny算子1.5、显示正常中文的标签1.6、边缘检测结果二、角点检测2.1、读取图像2.2...
    99+
    2023-02-03
    Python OpenCV边缘检测 Python OpenCV角点检测 Python OpenCV 检测
  • OpenCV角点检测的实现示例
    目录Harris 角点检测算法1. 角点角点检测算法的基本思想: 2. 流程3. 实现Harris 角点检测算法 1. 角点 角点是水平方向、垂直方向变化都很大的像素。 角...
    99+
    2024-04-02
  • Python OpenCV实现任意角度二维码矫正
    目录前言一般图片矫正方式二维码图片矫正思路编码实现前言 那天听到领导他们在讨论,说要将图片进行个矫正处理,还叫来了算法部的大佬来讨论将要如何处理这个,讨论场面很是激烈 不得不说好奇心...
    99+
    2024-04-02
  • Python如何实现arctan换算角度
    这篇文章主要介绍了Python如何实现arctan换算角度的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python如何实现arctan换算角度文章都会有所收获,下面我们一起来看看吧。笛卡尔坐标系对于平面坐标系...
    99+
    2023-07-05
  • Android基于OpenCV实现Harris角点检测
    目录什么是角点? 为什么要检测角点? Harris角点检测 API操作效果 源码 什么是角点? 角点就是极值点,即在某方面属性特别突出的点。当然,你可以自己定义角点的属性(设置特定...
    99+
    2024-04-02
  • OpenCV实现绕图片中任意角度旋转任意角度
    最近在做项目需要把把图片绕图片中任意点旋转任意角度,考虑到自己旋转需要编写插值算法,所以想到了用opencv,但是网上都是围绕图片中点旋转任意角度的,都是向下面这样写的: 绕图片中心...
    99+
    2024-04-02
  • OpenCV基于ORB算法实现角点检测
    本文实例为大家分享了OpenCV基于ORB算法实现角点检测的具体代码,供大家参考,具体内容如下 ORB算法是FAST算法和BRIEF算法的结合,ORB可以用来对图像中的关键点快速创建...
    99+
    2024-04-02
  • Python OpenCV Canny边缘检测算法如何实现
    本文小编为大家详细介绍“Python OpenCV Canny边缘检测算法如何实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python OpenCV Canny边缘检测算法如何实现”文章能帮助...
    99+
    2023-07-02
  • Python OpenCV Hough直线检测算法如何实现
    这篇文章主要介绍了Python OpenCV Hough直线检测算法如何实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python OpenCV Hough直线检测算...
    99+
    2023-07-02
  • Python+OpenCV内置方法如何实现行人检测
    小编给大家分享一下Python+OpenCV内置方法如何实现行人检测,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!您是否知道 OpenCV 具有执行行人检测的内置...
    99+
    2023-06-22
  • opencv图片的任意角度旋转实现示例
    目录一 旋转角度坐标的计算二 旋转任意角度的步骤三 实现一 旋转角度坐标的计算 1.如果O点为圆心,则点P绕点O旋转redian弧度之后,点P的坐标变换为点Q的计算公式为: Q.x=...
    99+
    2024-04-02
  • opencv-python+yolov3实现目标检测
    目录目标检测概况目标检测是?目标检测算法?yolov3模型简介性能介绍架构介绍opencv-python实现why opencv?正文因为最近的任务有用到目标检测,所以昨天晚...
    99+
    2024-04-02
  • OpenCV-Python如何获取凸包角点
    这篇文章给大家分享的是有关OpenCV-Python如何获取凸包角点的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。前言逼近多边形是某个图像轮廓的高度近似,而凸包的提出是为了简化逼近多边形的。其实,凸包跟逼近多边形...
    99+
    2023-06-15
  • C++ OpenCV如何实现车道检测
    这篇文章主要为大家展示了“C++ OpenCV如何实现车道检测”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C++ OpenCV如何实现车道检测”这篇文章吧。一、获取车道RO...
    99+
    2023-06-28
  • Python+Opencv实现物体尺寸测量的方法详解
    目录1、效果展示2、项目介绍3、项目搭建4、utils.py文件代码展示与讲解5、项目代码展示与讲解6、项目资源7、项目总结1、效果展示 我们将以两种方式来展示我们这个项目的效果。 ...
    99+
    2024-04-02
  • Python+Opencv文本检测的实现
    目录EAST 深度学习文本检测器项目结构实施说明使用 OpenCV 实现我们的文本检测器OpenCV 文本检测结果视频文字检测结果在本教程中,您将学习如何使用 OpenCV 使用 E...
    99+
    2024-04-02
  • Python+OpenCV实现表面缺陷检测
    对于现在很多工业检测,特别是对一些精密的器件进行筛选,往往都是像素级别的,十分的精确。 主要思想 将图像转化为二值图像在对图像进行腐蚀/膨胀处理在进行轮廓检测筛选目标大小符合的轮廓...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作