c++ opencv 通过网络连接工业相机_相机参数标定(camera calibration)推导结束,理论的应用(2)...

本文介绍了使用OpenCV进行相机参数标定的步骤,通过国际象棋棋盘进行不同角度拍摄来获取数据。接着,阐述了如何利用特征匹配和单应性矩阵实现图片拼接,提到了SIFT特征提取和KNN匹配方法。在编程实践中,提到了图片预处理以防止旋转导致信息丢失,并展示了实验结果及存在的问题,如点匹配过多和缺乏深度信息导致的误差。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上一篇说了相机参数标定的数学推导,在这里,开头先说下一般相机标定的方法。然后介绍用python的opencv进行图片拼接过程。

1.相机参数标定过程

在opencv库里也提供了相机标定方法(Camera Calibration — OpenCV.[1]):用一块国际象棋的棋板,在镜头前面不断转动,这是为了图.1里的第一个刚体变换。借此来生成不同参数,构成多个方程来解开参数。

97ae1798a4fc8584d49687532c79c2ec.png

(这里我用Ubuntu写的,标点就成英式了)

2.特征匹配和单应性查找对象

现在从上边的公式来看,对于世界坐标里的一个点,但是在图片里的位置不一样,是因为有了刚体变换,也就是说产生了物体的旋转或是镜头位置的变化.

如果我们需要求出所有相机参数,也就是说需要世界坐标系的信息.但是,我们没空.

所以单纯从两张图片上找很多很多相同点,然后进行点的匹配.

(我要道个歉,上一篇有部分写错了,已改正,不过变量名还是用重复了,需要注意下)

69691405645e1ff952352bf8a5e24a2a.png

所以,在找到两张图片相同点后,可以用H矩阵(Homography)进行变换.

83eedb7c7a6cbb4c293fca43e59361ca.png

带(')和不带(')的x,y是两张图片的对应点,H矩阵有8个未知变量

H矩阵有8个未知变量,至少需要两张图中的4个对应点,求出H矩阵后,对整张图变换,就可以了.

3.编程方法

具体看[OpenCV-Python-Toturial(有中文版)],说的特别详细. 有需要的话我可以分享到什么网盘里,一般不难找.说的是程序的事,书上基本都有.

b1c3228d5579c30eec1bc34e33adf9ca.png

图片来自[2]

a).程序里用了SIFT(Scale-invariant feature transform)特征提取两张图的特征点,一般是边角特征.

b).然后用knn做特征点匹配,官方代码上用了至少10个匹配点.计算时候用的就是伪逆变换.

c).需要先把图片加边,把原来图片扩展后,再乘一个单应性矩阵时,图片就不会因为经过旋转而丢失一部分. 函数用cv2.warpPerspective就行.

d).之后就是对两张图叠加,后期处理之类的了.

e25d35c4f0ba07871e012b0d376e13ca.png

实验结果

上边的实验结果,第一第二张是要拼接的图,第三张是第二张进行了旋转,即应用了单应性矩阵,第四张是拼接后.单纯的从结果来看,效果很差,

原因有两点:1).检测的点太多了,因为树的枝杈,匹配度太高,使得很多不一样的点被分类成了相同点; 2).最重要的是这是我拍的视频,当时在走动,根据上边的式子,它是没有深度(距离)信息的.在边往前走,边左转,就造成了合成照片越靠右侧出现越大误差.

下回预告:

下一篇,还是这个理论,试着说明怎么分析人脸朝向,这里需要用到另外一个库文件dlib.

References:

[1].https://docs.opencv.org/3.0-beta/doc/py_tutorials/py_calib3d/py_calibration/py_calibration.html

[2].https://docs.opencv.org/3.0-beta/doc/py_tutorials/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值