我正在使用zbar
库和C ++中的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
是“条形码高度的长度(以米为单位)除以条形码高度的像素总数”与{{ 1}}是点(左上角或右下角)。
模板是
我检查了条形码检测的结果点是否正确。世界坐标为pt
。我认为这些是正确的,因为条形码的像素尺寸为top_left =[0.054160003, 0.025360001, 0], bottom_right = [0.085200004, 0.046080004, 0]
,高度为388 x 200
。
运行0.016
时我得到这些结果
cv::solvePnP
该方法的输入是条形码检测的两个图像点和使用模板计算的两个世界点。有什么问题吗?
答案 0 :(得分:1)
正如api55在他的评论中所说,问题在于分数。添加其他2个角即可。