当前位置: 首页 > news >正文

OpenCV 图形API(7)用于将笛卡尔坐标(x, y)转换为极坐标(magnitude, angle)函数cartToPolar()

  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

计算二维向量的大小和角度。
cartToPolar 函数计算每个二维向量 (x(I), y(I)) 的大小、角度,或同时计算两者:
magnitude ( I ) = x ( I ) 2 + y ( I ) 2 , angle ( I ) = atan2 ( y ( I ) , x ( I ) ) [ ⋅ 180 / π ] \begin{array}{l} \texttt{magnitude} (I)= \sqrt{\texttt{x}(I)^2+\texttt{y}(I)^2} , \\ \texttt{angle} (I)= \texttt{atan2} ( \texttt{y} (I), \texttt{x} (I))[ \cdot180 / \pi ] \end{array} magnitude(I)=x(I)2+y(I)2 ,angle(I)=atan2(y(I),x(I))[180/π]
cartToPolar 函数计算角度的准确度约为0.3度。对于点 (0,0),其角度被设定为0。
第一个输出是一个与输入 x 具有相同大小和深度的矩阵,表示各个向量的大小(magnitude)。 第二个输出也是一个与 x 具有相同大小和深度的矩阵,但表示的是各个向量的角度(angle)。这些角度以弧度(范围从 0 到 2π)或度数(0 到 360 度)测量。

注意事项:
函数的文本ID是 “org.opencv.core.math.cartToPolar”。

函数原型

std::tuple<GMat, GMat> cv::gapi::cartToPolar
(
 	const GMat &  	x,
	const GMat &  	y,
	bool  	angleInDegrees = false 
) 		

参数

  • 参数x:CV_32FC1 类型的 x 坐标的矩阵。
  • 参数y:CV_32FC1 类型的 y 坐标的数组。
  • 参数angleInDegrees:一个标志,指示角度是用弧度(这是默认设置)测量,还是用度数测量。

返回值

返回一个 std::tuple<GMat, GMat>,其中:

  • 第一个元素是表示向量大小(magnitude)的 GMat。
  • 第二个元素是表示向量角度(angle)的 GMat。

代码示例

#include <opencv2/gapi/core.hpp>  // 包含G-API核心功能
#include <opencv2/opencv.hpp>
#include <tuple>

int main()
{
    // 创建示例数据
    cv::Mat x = ( cv::Mat_< float >( 4, 1 ) << 1.0f, 0.0f, -1.0f, 0.0f );
    cv::Mat y = ( cv::Mat_< float >( 4, 1 ) << 0.0f, 1.0f, 0.0f, -1.0f );

    // 检查输入矩阵是否为空
    if ( x.empty() || y.empty() )
    {
        std::cerr << "无法加载输入矩阵,请检查数据。" << std::endl;
        return -1;
    }

    // 定义G-API图中的输入
    cv::GMat gx, gy;
    auto res = cv::gapi::cartToPolar( gx, gy, true );  // 将角度转换为度数

    // 创建一个计算图
    cv::GComputation cartToPolar_graph( cv::GIn( gx, gy ), cv::GOut( std::get< 0 >( res ), std::get< 1 >( res ) ) );

    // 输出矩阵
    cv::Mat magnitude, angle;

    // 编译并执行计算图
    cartToPolar_graph.apply( cv::gin( x, y ), cv::gout( magnitude, angle ) );

    // 打印结果
    std::cout << "Magnitude: " << magnitude << std::endl;
    std::cout << "Angle (degrees): " << angle << std::endl;

    return 0;
}

运行结果

Magnitude: [1;
 1;
 1;
 1]
Angle (degrees): [0;
 90;
 180;
 270]
http://www.dtcms.com/a/107087.html

相关文章:

  • 【编程之路】按指定大小合并数据块
  • 局域网内便捷实现多设备文件共享方法
  • 【论文阅读】Anchor Graph Network for Incomplete Multiview Clustering
  • 【django】3 (django路由) 路由配置和反向解析
  • Python•输入输出基本运算
  • 浏览器指纹攻防技术深度解析:从多账号隔离到自动化矩阵架构设计
  • UG NX二次开发(C#)-采用Open/C与NXOpen获取曲线的长度
  • 【dp】有序三元组中的最大值 I
  • 关于依赖注入框架VContainer DIIOC 的学习记录
  • 壹起航:引领中国工厂迈向全球市场的先锋
  • 【蓝桥杯】每日练习 Day19,20
  • es分页边界数据重复问题处理
  • 【ArcGIS微课1000例】0142:如何从谷歌地球保存高清影像图片
  • 开发技巧 flex 布局,使用 gap 设置 flex 项目之间的间距
  • cursor的.cursorrules详解
  • Uniapp 实现微信小程序滑动面板功能详解
  • Graph RAG 面 —— 一种 基于知识图谱的大模型检索增强实现策略
  • 基于Flask框架的动漫推荐系统设计与实现(源码+lw+部署文档+讲解),源码可白嫖!
  • Oracle慢查询日志
  • 4月2日工作日志
  • C++__list
  • 第十二章网络规划设计
  • 《系统之美》读后感
  • Python数据分析及相关库(一)
  • 在Qt中直接在构建目录下直接运行.exe文件报错问题分析
  • antvX6自定义 HTML 节点创建与更新教程
  • 使用Leaflet对的SpringBoot天地图路径规划可视化实践-以黄花机场到橘子洲景区为例
  • 爬虫【Scrapy-redis分布式爬虫】
  • SQL 转 PHP Eloquent、Doctrine ORM, 支持多数据库
  • [python] 正则表达式