我正在使用Raspberry Pi 2和官方的500万像素相机。我使用OpenCV 3.2.0校准了相机。我在Python 3.4.2编码(我知道它不是最新版本,但重新编译OpenCV的新版本是不可能的。)
我的问题是,如果我在相对于相机的正方形内有一个点,并且我有相对于相机的正方形的所有4个角的点(不完全是正方形,因为它可能会旋转并稍微移动) ,我如何找到相对于广场的那个点?
例如,如果正方形的左上角是(10,20),并且原始点有点向右和向下,可能(21,33),那么最后一点可能是类似的(15,18)。
将此结果基于1个角(并且仅减去输入点和角点)是不够的,因为图像可能会缩放。将其基于2个相对的角(假设正方形是完全正方形而不是旋转)是不够的,因为图像可能会旋转。从理论上讲,如果我正确校准相机(并制作完美的正方形或矩形),3应该足够了,但4最好完全确定。
问题是我不知道如何将图像上的点重新映射到正方形上的点。我该怎么做?
示例(抱歉质量低):
鉴于4个红色摄像头和输出点以及绿色摄像头,如何找到绿色输出点?
答案 0 :(得分:0)
写完之后(我发誓我刚写完),我发现了这个功能:cv2.getPerspectiveTransform()
。以下是该示例的用法:
rows = 5
columns = 8
inputs = [(163, 17), (294, 50), (313, 273), (145, 275)]
outputs = [(0, 0), (5, 0), (5, 8), (0, 8)]
transform_matrix = cv2.getPerspectiveTransform(inputs, outputs)
def transform(point):
global transform_matrix
return cv2.perspectiveTransform(point, transform_matrix)