【问题标题】:Opencv 2.4.3 estimateRigidTransform in pythonpython中的Opencv 2.4.3估计RigidTransform
【发布时间】:2013-03-24 15:54:30
【问题描述】:

这对我来说真是一团糟,我很难解决这个问题。我想在 Python 中将 cv2.estimateRigitTransform 方法与 numpy 数组一起使用,但我无法在任何地方找到解释所需 src 和 dst numpy 数组格式的示例或其他内容。

有人可以给我一个小例子,说明这两个数组可以使用这种方法吗?我拥有所有数据(当然是 2D 数据),但找不到如何在 numpy 数组中对其进行整形。

请帮助我。 谢谢!

【问题讨论】:

标签: python opencv python-2.7 numpy


【解决方案1】:

这是一个尝试对齐两组随机 10 个点的基本示例

import numpy as np
import cv2
shape = (1, 10, 2) # Needs to be a 3D array
source = np.random.randint(0, 100, shape).astype(np.int)
target = source + np.array([1, 0]).astype(np.int)
transformation = cv2.estimateRigidTransform(source, target, False)

Documentation is here.

【讨论】:

  • 如果我错了,请纠正我,但是您的源数组将类似于 [[x1, y1], [x2, y2], ... , [x10, y10]]。对吗?
  • 我发现了一个问题。它需要具有第三维,否则它将您的矩阵视为图像,并尝试做我不知道的事情,也许是某种图像对齐。
  • 嘿@Jeep87c,这与您的其他问题相似。你希望达到什么目标?制作自己的最小二乘点集对齐非常容易。也许你可以准确地描述你想要什么?
  • 我已经尝试让estimateRigidTransform 工作了几天...我想补充一点,3D 部分很重要,但 astype() 对于 cv2 正确识别矢量也很重要.它不必是 np.int 类型,但数组肯定需要为 cv2 定义的 dtype 才能正常工作。希望有朝一日这可以使某人免于头痛。
  • 要添加到 Brian 的评论,它需要是 np.float32,该函数不接受 np.float64 和错误消息:“两个输入图像必须在函数 cvEstimateRigidTransform 中具有 8uC1 或 8uC3 类型”仅适用于 2D 图像情况。你必须深入源代码才能看到这一行:“else if( CV_MAT_TYPE(A->type) == CV_32FC2 || CV_MAT_TYPE(A->type) == CV_32SC2 )”
猜你喜欢
  • 2012-11-03
  • 2013-04-04
  • 1970-01-01
  • 2017-06-08
  • 2013-03-29
  • 1970-01-01
  • 2012-10-28
  • 2023-03-21
  • 1970-01-01
相关资源
最近更新 更多