如何在 opencv 中使用矩阵 R 和 T(外部参数矩阵)转换图像?

2023-11-22

我有一个旋转平移矩阵 [RT] (3x4)。

opencv中是否有一个函数可以执行[RT]描述的旋转平移?


我认为这个问题的很多解决方案都做出了隐藏的假设。我将尝试向您快速总结一下我对这个问题的看法(过去我不得不考虑很多)。两个图像之间的变形是一个二维过程,通过称为单应性的 3x3 矩阵完成。您拥有的是一个 3x4 矩阵,它定义了 3 维变换。您可以通过将图像视为 3 维空间中的平面来在两者之间进行转换。诀窍是确定图像平面在世界空间中的初始位置。然后,您可以变换其位置并使用相机内在矩阵将其投影到新的图像平面上。

第一步是确定初始图像在世界空间中的位置,请注意,这不必与初始 R 和 T 矩阵指定的相同。这些是在世界坐标中,我们谈论的是由那个世界创建的图像,图像中的所有对象都已被展平为一个平面。这里最简单的决定是将图像设置为 z 轴上的固定位移且不旋转。从现在开始我将假设不再轮换。如果您想查看一般情况,我可以提供,但稍微复杂一些。

接下来,您定义 3d 空间中两个图像之间的变换。由于两个变换都针对同一原点,因此从 [A] 到 [B] 的变换与从 [A] 到原点的变换相同,然后是从原点到 [B] 的变换。你可以通过

transform = [B]*inverse([A])

现在从概念上讲,您需要做的是拍摄第一张图像,将其像素投影到 3D 空间中图像的几何解释上,然后通过上面的变换在 3D 空间中变换这些像素,然后将它们投影回新的 2D 图像上你的相机矩阵。这些步骤需要组合成一个 3x3 矩阵。

cv::Matx33f convert_3x4_to_3x3(cv::Matx34f pose, cv::Matx33f camera_mat, float zpos)
{   
//converted condenses the 3x4 matrix which transforms a point in world space 
//to a 3x3 matrix which transforms a point in world space.  Instead of 
//multiplying pose by a 4x1 3d homogeneous vector, by specifying that the
//incoming 3d vectors will ALWAYS have a z coordinate of zpos, one can instead 
//multiply converted by a homogeneous 2d vector and get the same output for x and y.

cv::Matx33f converted(pose(0,0),pose(0,1),pose(0,2)*zpos+pose(0,3),
                      pose(1,0),pose(1,1),pose(1,2)*zpos+pose(1,3),
                      pose(2,0),pose(2,1),pose(2,2)*zpos+pose(2,3));

//This matrix will take a homogeneous 2d coordinate and "projects" it onto a 
//flat plane at zpos.  The x and y components of the incoming homogeneous 2d 
//coordinate will be correct, the z component is dropped.  
cv::Matx33f projected(1,0,0,
                      0,1,0,
                      0,0,zpos);
projected = projected*camera_mat.inv();

//now we have the pieces.  A matrix which can take an incoming 2d point, and 
//convert it into a pseudo 3d point (x and y correspond to 3d, z is unused) 
//and a matrix which can take our pseudo 3d point and transform it correctly.  
//Now we just need to turn our transformed pseudo 3d point back into a 2d point 
//in our new image, to do that simply multiply by the camera matrix.

return camera_mat*converted*projected;
}

这可能是一个比您想要的更复杂的答案,但我希望它能让您了解您要问的内容。这可能非常令人困惑,我很快就浏览了其中的某些部分,请随时要求澄清。如果您需要解决方案在不假设初始图像在没有旋转的情况下出现的情况下工作,请告诉我,我只是不想让它变得比需要的更复杂。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 opencv 中使用矩阵 R 和 T(外部参数矩阵)转换图像? 的相关文章

  • minAreaRect OpenCV 返回的裁剪矩形 [Python]

    minAreaRectOpenCV 中返回一个旋转的矩形 如何裁剪矩形内图像的这部分 boxPoints返回旋转矩形的角点的坐标 以便可以通过循环框内的点来访问像素 但是在 Python 中是否有更快的裁剪方法 EDIT See code在
  • 如何去除给定图像中的噪声,使 ocr 输出完美?

    我已经对这个孟加拉文本图像进行了大津阈值处理 并使用 tesseract 进行 OCR 但输出非常糟糕 我应该应用什么预处理来消除噪音 我也想校正图像 因为它有轻微的倾斜 我的代码如下 import tesserocr from PIL i
  • 从包含带边框的表格的图像中提取表格结构

    我正在尝试提取下表中的单元格位置 应用自适应阈值处理后 我能够获得细胞位置周围的轮廓 并且 HoughLines 获得垂直和水平结构元素 这是我的代码 img cv2 imread os path join img path file im
  • opencv人脸检测示例

    当我在设备上运行应用程序时 应用程序崩溃并显示以下按摩 java lang UnsatisfiedLinkError 无法加载 detector based tracker findLibrary 返回 null 我正在使用 OpenCV
  • 如何使用 opencv python 计算乐高积木上的孔数?

    我正在开发我的 python 项目 我需要计算每个乐高积木组件中有多少个孔 我将从输入 json 文件中获取有关需要计算哪个程序集的信息 如下所示 img 001 red 0 blue 2 white 1 grey 1 yellow 1 r
  • cv2.drawContours() - 取消填充字符内的圆圈(Python,OpenCV)

    根据 Silencer的建议 我使用了他发布的代码here https stackoverflow com questions 48244328 copy shape to blank canvas opencv python 482465
  • YOLOv8获取预测边界框

    我想将 OpenCV 与 YOLOv8 集成ultralytics 所以我想从模型预测中获取边界框坐标 我该怎么做呢 from ultralytics import YOLO import cv2 model YOLO yolov8n pt
  • OpenCV:如何从网络摄像头获取原始 YUY2 图像?

    你知道如何获得吗raw YUY2来自网络摄像头的图像 使用 OpenCV DirectShow 无 VFW http opencv willowgarage com wiki CameraCapture http opencv willow
  • 如何在 Qt 应用程序中通过终端命令运行分离的应用程序?

    我想使用命令 cd opencv opencv 3 0 0 alpha samples cpp cpp example facedetect lena jpg 在 Qt 应用程序中按钮的 clicked 方法上运行 OpenCV 示例代码
  • 为什么Android的ImageReader类这么慢?

    我尝试了适用于 Android 3 4 1 的全新 OpenCVJavaCamera2View但它太慢了 仅显示相机视图约 15 fps 当我尝试较旧的JavaCameraView相反 它给了我很好的结果 30fps 这是我相机的极限 我想
  • 如何将多行文本插入到框架/图像中

    我使用 C 和 OpenCV 创建了一个框架 并想在其中插入几行文本 使用以下代码 putText frame My text here cvPoint 30 30 FONT HERSHEY COMPLEX SMALL 0 8 cvScal
  • 深度估计的准确性 - 立体视觉

    我正在研究立体视觉 我对这个问题的深度估计的准确性感兴趣 这取决于几个因素 例如 适当的立体校准 旋转 平移和失真提取 图像分辨率 相机和镜头质量 失真越小 色彩捕捉正确 两个图像之间的匹配特征 假设我们没有低成本的相机和镜头 没有廉价的网
  • 开放简历fisherfaces

    我有这个问题 当我使用 vs2010 调试 opencv 2 4 0 facetec demo c 运行时 程序出现此错误 OpenCV错误 未知函数中图像步长错误 矩阵不连续 因此其行数无法更改 文件 src opencv modul e
  • 在骨架图像中查找线 OpenCV python

    我有以下图片 我想找到一些线来进行一些计算 平均长度等 我尝试使用HoughLinesP 但它找不到线 我能怎么做 这是我的代码 sk skeleton mask rows cols sk shape imgOut np zeros row
  • 未加载库:@rpath/libopenblasp-r0.2.19.dylib

    我应该如何解决这个问题 Monas MacBook Pro 02 02 mona python Python 3 6 1 Anaconda custom x86 64 default May 11 2017 13 04 09 GCC 4 2
  • 我的 Opencv 应用程序处理速度非常慢

    我正在构建一个 OpenCV 应用程序 它从相机捕获视频 并在删除背景后将其覆盖在另一个视频上 我无法达到合理的速度 因为它以大约 1 fps 的速度播放输出 而我的背景去除以 3 fps 的速度工作 有没有办法以正常速度显示背景视频并以
  • 旋转矩阵openCV

    我想知道如何找到框架中一组特征的旋转矩阵 我会更具体 我有 2 个具有 20 个特征的帧 假设第 1 帧和第 2 帧 我可以估计两个帧中特征的位置 例如 假设位置 x y 处的某个第 1 帧特征 并且我确切地知道它在哪里 所以假设为 x y
  • Opencv 对象检测:ORB GPU 检测器和 SURF GPU 描述符提取器

    我只是做了一个小实验来尝试不同的检测器 描述符组合 我的代码使用 ORB GPU 检测器来检测特征 并使用 SURF GPU 描述符来计算描述符 我使用 BruteForceMatcher GPU 来匹配描述符 并使用 knnMatch 方
  • 静态 OpenCV 库中未定义的引用

    我有一个使用 OpenCV 3 1 的 C 项目 并且使用共享库可以正常工作 但现在我想使用静态库 位于项目目录中的文件夹中 来编译它 因为我希望能够在未安装 OpenCV 的情况下导出它 如果需要还可以编辑和重新编译 这次我重新编译了 O
  • 尝试使使用 OpenCV 的 java 应用程序(可执行 Jar)可移植。出现不满意的链接错误

    我制作了一个应用程序 用于从网络摄像头抓取视频并使用 OpenCV 和 JavaCV 检测运动 我正在尝试使用 eclipse 导出为可执行 jar 该程序在 eclipse 中运行良好 就像我编写该程序的计算机上的 exe jar 一样

随机推荐

  • C++ 为什么 SFINAE 仅使用类模板参数就会失败?

    我使用 SFINAE 的风格这个答案为了通过使用适当的成员函数调用通用向量对象 例如 以下代码调用operator int const首先 如果不存在的话operator int const template
  • HSQLDB 神秘异常消息:“功能不支持”

    我有 JDBC 代码 它通过执行PreparedStatement 插入到数据库表中 当我在内存 HSQLDB 数据库上运行代码 作为 JUnit 测试的一部分 时 我收到 SQLFeatureNotSupportedException 唯
  • C# - SQLClient - 最简单的插入

    我基本上试图找出使用 SqlClient 命名空间在 C NET 中执行基本插入操作的最简单方法 我在用着SqlConnection对于我的数据库链接 我已经成功执行了一些读取 并且我想知道插入数据的最简单方法 当我谷歌搜索时 我发现了一些
  • FormsAuthentication.SetAuthCookie() 是否创建基于会话的 cookie?

    好吧 我很困惑 asp net 中的 FormsAuthentication SetAuthCookie 是否创建基于会话的 cookie 根据我收集的信息 将某些内容放入会话中 您将在后面的代码中执行类似的操作 Session userA
  • C# 中的强制转换操作优先级

    下面的差异在 C 中会很重要吗 int a b double result result double a b result a double b result double a double b 您使用哪一款 演员阵容将在分裂之前进行 在
  • .NET 上的双精度问题

    我有一个简单的 C 函数 public static double Floor double value double step return Math Floor value step step 它计算小于或等于 值 的较高数字 即 步长
  • Maven ojdbc jar依赖错误:包oracle.jdbc不存在

    Heading 我正在尝试在我的 Java EE 6 应用程序中使用 jdbc 连接 类名 Visualizer Repository java 我在 nexus 存储库中有 jdbc 驱动程序 该类必须执行存储过程并打印该过程的结果 由于
  • 如何让 Visual Studio 2008 Windows 窗体设计器呈现实现抽象基类的窗体?

    我遇到了 Windows 窗体中继承控件的问题 需要一些建议 我确实对列表中的项目 由面板组成的自制 GUI 列表 和一些继承的控件使用了基类 这些控件适用于可以添加到列表中的每种数据类型 没有问题 但我现在发现 将基本控件设置为抽象类是正
  • 对象属性的 Numpy 数组[重复]

    这个问题在这里已经有答案了 我有一个多维对象数组 例如 a np array obj1 obj2 obj3 这些对象是具有多个属性的类的实例 假设其中之一是高度 其中之一是长度 为了获得相应的长度和高度的多维数组 我这样做 lengths
  • 在alwaysdata.com上部署Django

    我是 django 的新手 我尝试了这个 但无法部署 我能怎么做 usr bin python import sys import os base os path dirname os path abspath file sys path
  • 应用程序启动方法中出现异常 java.lang.reflect.InitationTargetException

    我刚刚开始使用 JavaFX 我正在尝试构建一个带有标签 文本字段和按钮的简单应用程序 单击该按钮时 会将标签的值设置为文本字段的值 一切都很顺利 直到我将控制器连接到主文件 这是我的代码 主程序 java package applicat
  • 如何从 Selenium 中调用 JavaScript 函数?

    我需要从 Firefox 中的 Selenium WebDriver 调用 JavaScript 函数 登录我的网站后 我在 Firebug 的命令编辑器中使用此命令来调用文件上传应用程序 infoPanel applicationMana
  • 无法在 asp.net core 中为身份服务器 4 启用 CORS

    好的 我已经为我的 net core API 添加了 CORS 策略 但不知何故 这些 CORS 策略不适用于 Identity Server 4 端点 我有以下 api 我尝试在其中注册用户 EnableCors AllowAllCors
  • 搜索框内的搜索按钮,如 Bing

    如何在搜索框中实现搜索按钮 如 Bing 等网站上所示 它看起来像是在里面 但实际上不是 你不能将 html 放在输入中 这 2 个元素 一个输入和一个按钮 靠得很近 边距为 0 并且高度相同 该按钮的图形有 3 像素的白边距 所以就造成了
  • OpenCV 显示 2 通道图像(光流)

    我将光流存储在 2 通道 32F 矩阵中 我想可视化内容 最简单的方法是什么 我如何转换CV 32FC2到 RGB 并带有一个空的蓝色通道 诸如此类imshow可以处理 我正在使用 OpenCV 2 C API 超级奖励积分 理想情况下 我
  • python3中的自定义比较函数

    我想按距原点 0 0 的距离按升序对 2D 坐标系中的点进行排序 我发现this并尝试了一些东西 但我仍然无法得到想要的结果 这是我的代码 from functools import cmp to key def my comp point
  • 当应用程序在后台执行 uploadTask 时,使用 NSURLSession 时出现 CFNetwork SSLHandshake failed (-9806) 错误

    当应用程序处于后台时 我在使用 NSURLSession UploadTask 上传视频文件时遇到 CFNetwork SSL 握手错误 当应用程序处于前台时 上传视频没有问题 仅当应用程序处于后台时才会出现问题 背景NSURLSessio
  • 如何在 SailsJS/Waterline 中将 Model.query() 与 Promise 一起使用?

    我在使用 Sails JS 0 9 8 时遇到问题 我想将 Promise 与 Model query 函数一起使用 我使用 sails mysql 适配器 此代码将起作用 User findOne email email then fun
  • 您是否应该仅使用准备好的语句进行转义? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我看到很多人说你应该始终使
  • 如何在 opencv 中使用矩阵 R 和 T(外部参数矩阵)转换图像?

    我有一个旋转平移矩阵 RT 3x4 opencv中是否有一个函数可以执行 RT 描述的旋转平移 我认为这个问题的很多解决方案都做出了隐藏的假设 我将尝试向您快速总结一下我对这个问题的看法 过去我不得不考虑很多 两个图像之间的变形是一个二维过