Python+OpenCV实现角度测量的示例代码

我们来详细讲解一下“Python+OpenCV实现角度测量的示例代码”的完整攻略。

简介

本攻略介绍如何使用Python和OpenCV来进行角度测量,包括了从照片中测量物体旋转角度和计算两个物体之间的旋转角度。

准备工作

首先,我们需要安装并配置好Python和OpenCV。可以参考以下步骤:

1.安装Python:可以从Python官网下载安装包进行安装。

2.安装OpenCV:可以通过pip进行安装,运行以下命令即可:

pip install opencv-python

3.安装numpy:同样可以通过pip进行安装,运行以下命令即可:

pip install numpy

从照片中测量物体旋转角度

下面我们将从简单的示例开始,介绍如何从照片中测量物体的旋转角度。

示例1

我们首先需要准备一张包含待测物体的照片,然后进行如下操作:

1.读取照片并将其转换为灰度图像。代码如下:

import cv2

img = cv2.imread('image.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

2.使用Canny算法检测边缘。代码如下:

edges = cv2.Canny(gray, 50, 150, apertureSize=3)

3.使用HoughLines函数检测出直线。代码如下:

lines = cv2.HoughLines(edges, 1, np.pi / 180, 200)

4.遍历检测到的直线对,并使用arctan函数计算角度。代码如下:

for line in lines:
    rho, theta = line[0]
    a = np.cos(theta)
    b = np.sin(theta)
    x0 = a * rho
    y0 = b * rho
    x1 = int(x0 + 1000 * (-b))
    y1 = int(y0 + 1000 * (a))
    x2 = int(x0 - 1000 * (-b))
    y2 = int(y0 - 1000 * (a))
    cv2.line(img, (x1, y1), (x2, y2), (0, 0, 255), 2)
    if theta > np.pi / 2:
        theta = theta - np.pi
    angle = theta * 180 / np.pi

5.将角度输出到图像上,并显示图像。代码如下:

cv2.putText(img, 'Angle = ' + str(int(angle)), (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)
cv2.imshow('Result', img)
cv2.waitKey(0)

示例2

除了测量单一物体的角度,我们还可以使用模板匹配技术测量物体之间的角度。下面我们通过示例来介绍如何实现:

1.首先,我们需要准备两张照片,一张包含需要匹配的物体,一张包含需要测量旋转角度的物体。代码如下:

import cv2

img1 = cv2.imread('template.jpg', cv2.IMREAD_GRAYSCALE)
img2 = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)

2.使用ORB算法检测图像中的关键点,并计算其描述符。代码如下:

orb = cv2.ORB_create()
keypoints_1, descriptors_1 = orb.detectAndCompute(img1, None)
keypoints_2, descriptors_2 = orb.detectAndCompute(img2, None)

3.使用BFMatcher算法计算两张照片中描述符之间的距离,并找到距离最短的匹配。代码如下:

bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True)
matches = bf.match(descriptors_1, descriptors_2)
matches = sorted(matches, key=lambda x: x.distance)

4.计算匹配点之间的角度,并将其输出到图像上。代码如下:

pts1 = []
pts2 = []
for match in matches:
    pts1.append(keypoints_1[match.queryIdx].pt)
    pts2.append(keypoints_2[match.trainIdx].pt)
pts1 = np.float32(pts1)
pts2 = np.float32(pts2)
homography, _ = cv2.findHomography(pts1, pts2, cv2.RANSAC)
angle = np.arctan2(homography[1, 0], homography[0, 0]) * 180 / np.pi
cv2.putText(img2, 'Angle = ' + str(int(angle)), (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)
cv2.imshow('result', img2)
cv2.waitKey(0)

总结

通过以上两个示例,我们学习了如何通过Python和OpenCV进行角度测量,包括通过直线检测测量单一物体的角度和通过模板匹配测量物体间的角度。相信这些方法对于实际场景中的角度测量能够提供一定的参考。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python+OpenCV实现角度测量的示例代码 - Python技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • python实现控制台输出颜色

    一、背景介绍 在Python控制台中,输出的文字是以黑底白字的形式呈现的,可是在一些需要强调或区分的情况下,我们希望能用不同的颜色来显示文字,类似于Windows命令提示符中的效果,这时我们就需要使用Python实现控制台输出颜色的方法。 二、实现方法 1.使用ANSI转义序列实现 ANSI转义序列是一种控制字符,其以ESC字符(ASCII码为27)打头,用…

    python 2023年6月5日
    00
  • Python接口自动化测试框架运行原理及流程

    Python接口自动化测试框架运行原理及流程 自动化测试框架运行原理:自动化测试框架主要分为三个层次,分别是基础层、关键字层和逻辑层,其运行原理如下: 基础层:最底层的是基础层,它主要提供一些底层的API调用操作,例如HTTP请求、数据库操作等。 关键字层:在基础层的基础上,构建关键字层,即将常用的测试步骤封装成具有复用性的函数,其中每一个函数都代表着一个测…

    python 2023年5月19日
    00
  • Python文件读取的3种方法及路径转义

    以下是详细讲解Python文件读取的3种方法及路径转义的完整攻略: Python文件读取的3种方法 1. 使用open()函数读取文件 使用Python的内置函数open()可以打开一个文件,并返回文件对象。通过文件对象可以操作文件。 语法如下: f = open("文件路径", "访问模式") 其中,文件路径可以是相…

    python 2023年6月5日
    00
  • python开发App基础操作API使用示例过程

    Python开发App基础操作API使用示例过程 Python是一种流行的编程语言,可以用于开发各种类型的应用程序,包括桌面应用程序、Web应用程序和移动应用。本文将为您供一个完整攻略,详细讲解Python开发App基础操作API的使用示例过程,包括环境搭建、API使用和两个示例说明。 1. 环境搭建 在Python中,我们可以使用第三方库来开发移动应用程序…

    python 2023年5月14日
    00
  • Python 文件处理注意事项总结

    Python 文件处理注意事项总结 一、打开文件 Python通过 open() 函数打开文件,该函数返回一个文件对象。在Python中,可以使用绝对路径或相对路径来打开一个文件。 文件打开函数格式 open(file_path, mode=’r’, buffering=-1, encoding=None, errors=None, newline=None…

    python 2023年6月2日
    00
  • Python正则表达式re.compile()和re.findall()详解

    在 Python 中,我们可以使用 re 模块提供的 compile() 和 findall() 函数来进行正则表达式的匹配。compile() 函数用于编译正则表达式,而 findall() 函数用于在字符串中查找所有匹配的子串。下面将详细讲解这两个函数的用法。 1. re.compile() 函数 re.compile() 函数用于编译正则表达式,将正则…

    python 2023年5月14日
    00
  • python爬虫指南之xpath实例解析(附实战)

    XPath是一种用于在XML和HTML文档中定位元素的语言。在Python爬虫中,XPath是一种非常常用的定位元素的方式。以下是Python爬虫指南之XPath实例解析的完整攻略,包含两个示例。 步骤1:安装必要的库 在使用XPath之前,我们需要先安装必要的库。以下是需要安装的库: requests:用于发送HTTP请求和获取响应。 lxml:用于解析X…

    python 2023年5月15日
    00
  • 基于Python实现Excel转Markdown表格

    下面我将为您详细讲解如何基于Python实现Excel转Markdown表格的完整实例教程。 准备工作 在进行Excel转Markdown之前,我们需要先安装一些Python库。在控制台或命令行中输入以下命令,依次安装即可。 pip install pandas pip install tabulate 其中,pandas用于读取和处理Excel表格数据,t…

    python 2023年5月14日
    00
合作推广
合作推广
分享本页
返回顶部