在代码行之前,stitcher = cv2.Stitcher_create()
您必须附加一些算法,通过单应性方法将梯形图像视图转换为矩形图像视图。
利用:cv2.findHomography(srcPoints, dstPoints[, method[, ransacReprojThreshold[, mask]]])
- srcPoints – 原始平面中点的坐标,CV_32FC2 或向量类型的矩阵。
- dstPoints – 目标平面中点的坐标,CV_32FC2 类型的矩阵或向量。
另请参阅此处的findHomography
OpenCV。
特别是:在您的情况下,底部(图像的底部)显示大部分信息,而顶部有更多不相关的信息。在这里,您应该保持顶部的纵横比相同并缩小底部。这应该对每张图像都进行。完成后,您可以尝试再次缝合它们。
将基于梯形的图像信息转换为方形图像的方法示例:
(information ratio x)
----+++++++---- (1)
---+++++++++--- (1)
--+++++++++++-- (1)
-+++++++++++++- (1)
+++++++++++++++ (1)
成平方图像信息:
(information ratio x)
----+++++++---- (1)
----+++++++---- (1.1)
----+++++++---- (1.2)
----+++++++---- (1.3)
----+++++++---- (1.4; most compressed information ratio)
完成后,您可以缝合它。不要忘记发布结果;-)
另一种方法是将相机视为线路检查器。当您从每个图像中获取信息时使用此方法,比如说第 y1060 到 1080 行(例如图像大小 1920x1080px),然后用这 20 行中的信息按升序填充一个新数组。
2019 年 1 月更新:
由于陡峭的 60 度角,单应性似乎不能完成 100% 的工作,您可以尝试通过执行第一个来校正角度PerspectiveTransform
。
# you can add a for-loop + image counter here to perform action on all images taken from
# the movie-file. Then its easily replacing numbers in the next part for the name
# of the image.
scr_array = [] # source e.g. pts1 = np.float32([[56,65],[368,52],[28,387],[389,390]])
dest_array = [] # destination e.g. pts2 = np.float32([[0,0],[300,0],[0,300],[300,300]])
Matrix1 = cv2.getPerspectiveTransform(scr_array,dest_array)
dst = cv2.warpPerspective(image, Matrix1 , (cols, rows))
label = 'CarImage1' # use ('CarImage%s' % labelnr) here for automated annotation.
# cv2.imshow(label , dst) # check the image
# cv2.imwrite(('%s.jpg' % label), dst)
另请参阅 PerspectiveTransform 上的文档。