OpenCV solvePnP 方法 returns NaN 值

OpenCV solvePnP method returns NaN values

我在 C++ 中使用 zbar 库和 opencv 进行条形码检测。条形码检测工作正常,我得到了这样的结果



现在我想使用 cv::solvePnP 获取相机的姿势(已校准)。作为 3D 点,我使用一个模板,在程序启动时,我计算相同的条形码检测,并取左上角和右下角。然后我以这种方式计算这两个点相对于条形码中心的世界坐标:

(pt.x - imageSize.width / 2) * px_to_mm,
(pt.y - imageSize.height / 2) * px_to_mm,
0.

imageSize 是条形码的大小(以像素为单位),px_to_mm 是比率 "length in meters of the barcode height divided by the total number of pixel of the barcode height" 和 pt 是点(左上或右下) ).

模板是



我检查了条形码检测的结果点是否正确。世界坐标为top_left =[0.054160003, 0.025360001, 0], bottom_right = [0.085200004, 0.046080004, 0]。我假设这些是正确的,因为条形码的尺寸(以像素为单位)为 388 x 200,高度(以米为单位)为 0.016


当我 运行 cv::solvePnP 我得到这些结果

translation: [-nan, -nan, -nan] 
rotation: [-nan, nan, -nan;
           -nan, -nan, nan;
           nan, -nan, -nan]

该方法的输入是条形码检测的两个图像点和使用模板计算的两个世界点。有什么问题?

正如 api55 在他的评论中所说,问题在于点数。添加其他 2 个角有效。