我有一个程序从RSTP获取视频,并检查对象。唯一的问题是对象需要大约6"从相机,但当我使用有线网络摄像头时,物体可以在几英尺之外。两台摄像机都以相同的分辨率进行传输,导致这个问题的原因是什么?
相机传输规格:
Resolution: 640 * 480
FPS: 20
Bitrate: 500000
Focal Length: 2.8mm
编辑: 我使用的算法是OpenCV ORB算法,但我之前在OpenCV中使用Haar分类器方法时也看到了这种行为。
以下是网络摄像头无法再检测到对象的限制。 (约66像素)
以下是Glass无法再检测到对象的限制。 (约68像素)
查看图像看起来距离相似,但距离至少是网络摄像头图像的两倍,这对我来说就像是相机属性造成了这个问题?如果是这样,相机的哪一部分会造成这种情况?
答案 0 :(得分:2)
正如您已经认识到的那样,两个图像中的对象大小非常相似,因此算法似乎停止了某个对象分辨率。
两个相机之间的距离差异(对于相同的物体尺寸)来自相机内部参数,如焦距(来自镜头物镜)和传感器芯片的尺寸。
根据您用于检测对象的方法,您可以调整(升级)第二个图像的大小,除非这会导致太多的插值瑕疵(检测方法可能无法处理)。
对于许多具有最小物体尺寸的探测器,直接来自训练数据或训练窗口大小,可以对图像进行升级。提升可能会导致额外(急剧)速度提升。
如果已知两个摄像机的内部参数且图像未经失真,则可以计算两个图像之间的比例因子,即:
ratioX = fx1/fx2
ratioY = fy1/fy2
如果要升级第二张图像和fx1,则fy1是第一张图像的焦距值。 您可以在之后以主点为中心裁剪放大的图像。之后,两个图像区域应该匹配得很好。
希望这会有所帮助,祝你好运。
编辑:您可以使用cv :: undistort函数让图像看起来像是有另一个相机矩阵,进行测试。