Python中Opencv 2.4.3的estimateRigidTransform函数

5

这真的让我很困惑,我很难解决这个问题。我想在Python中使用cv2.estimateRigitTransform方法和numpy数组,但我无法找到任何关于所需的src和dst numpy数组格式的示例或其他说明。

有人能给我发送一个小例子来展示这两个数组如何与此方法一起工作吗?我有所有的数据(当然是2D),但不知道如何将其整理成numpy数组。

请帮帮我。 谢谢!


3
你尝试过阅读文档吗? - Jaime
1个回答

4
这是一个基本示例,试图对齐两组随机的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)

文档在这里


请纠正我如果我错了,你的源数组将会是像这样的 [[x1, y1], [x2, y2], ... , [x10, y10]]。是这样吗? - Jeep87c
1
我注意到一个问题。它需要有第三个维度,否则它会将您的矩阵视为图像,并尝试做一些我不知道的事情,可能是某种图像对齐。 - Geoff
嘿 @Jeep87c,这与你的另一个问题类似。你希望实现什么目标?自己制作最小二乘点集对齐非常容易。也许你可以具体描述一下你想要做什么? - Geoff
6
我已经试了几天想让estimateRigidTransform正常工作...我想补充一个重要的地方,就是3D部分很重要,但astype()转换也很关键,因为这让cv2能够正确识别向量。它并不需要是np.int类型,但是数组一定需要定义dtype,以便cv2正常工作。希望这能帮助某些人避免头痛。 - Brian Hayden
2
补充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 )”。 - CookieOfFortune

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接