opencv surf对象检测Homography边界框

时间:2018-03-14 22:23:17

标签: opencv object-detection surf homography

Why are we adding Point2f( img_object.cols, 0) to every point in the scene_corners

perspectiveTransform( obj_corners, scene_corners, H);
// Draw lines between the corners (the mapped object in the scene -image_2 )
line( img_matches, scene_corners[0] + Point2f( img_object.cols, 0),  scene_corners[1] + Point2f( img_object.cols, 0), Scalar(0, 255, 0), 4 );
line( img_matches, scene_corners[1] + Point2f( img_object.cols, 0), scene_corners[2] + Point2f( img_object.cols, 0), Scalar( 0, 255, 0), 4 );
line( img_matches, scene_corners[2] + Point2f( img_object.cols, 0), scene_corners[3] + Point2f( img_object.cols, 0), Scalar( 0, 255, 0), 4 );
line( img_matches, scene_corners[3] + Point2f( img_object.cols, 0), scene_corners[0] + Point2f( img_object.cols, 0), Scalar( 0, 255, 0), 4 );`

按照Opencv的冲浪代码,边​​界多边形不符合预期:

有效识别场景中物体的方向和距离有哪些限制?

here is the output image

1 个答案:

答案 0 :(得分:0)

关于你的第一个问题: 由于img_object填充在场景图像的左侧,因此场景图像中(x, y)的像素变为(x+img_object.cols, y)。因此,您需要添加该偏移量以创建正确的边界框。

对于你的第二个问题:很难说一下算法的方向和距离的局限性。它取决于很多东西:对象特征,图像分辨率,图像质量等。

在您的情况下,您提到边界多边形不是预期的。但是你期望的边界多边形是什么?我注意到的一件事是你的物体图像并不完全平坦。如果从一个角度观察对象图像,则生成的单应性看起来就像这样。 (如果对象图像是平的,我认为生成的边界多边形应该有与该笔记本边缘平行的边界)