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的冲浪代码,边界多边形不符合预期:
有效识别场景中物体的方向和距离有哪些限制?
答案 0 :(得分:0)
关于你的第一个问题:
由于img_object
填充在场景图像的左侧,因此场景图像中(x, y)
的像素变为(x+img_object.cols, y)
。因此,您需要添加该偏移量以创建正确的边界框。
对于你的第二个问题:很难说一下算法的方向和距离的局限性。它取决于很多东西:对象特征,图像分辨率,图像质量等。
在您的情况下,您提到边界多边形不是预期的。但是你期望的边界多边形是什么?我注意到的一件事是你的物体图像并不完全平坦。如果从一个角度观察对象图像,则生成的单应性看起来就像这样。 (如果对象图像是平的,我认为生成的边界多边形应该有与该笔记本边缘平行的边界)