1.百度上找半天各种标定的方法,然而复制代码下来各种报错,或者就是没讲清楚到底怎么操作。
后来我突然想到opencv自带的例程说不到也有标定的代码,很幸运在sample/python/下找到了calibrate.py这个程序。
打开后里面有如下代码:
'''
camera calibration for distorted images with chess board samples
reads distorted images, calculates the calibration and write undistorted images
usage:
calibrate.py [--debug <output path>] [--square_size] [<image mask>]
default values:
--debug: ./output/
--square_size: 2.4
<image mask> defaults to ../data/left*.jpg
'''
找到了关键点:上面我复制的代码的最后一行,这行说明,标定用的图片
保存在sample/data文件夹下,并且名字都为leftXX.jpg。进去后可以看到
有14张这样命名的图片。这时很机智的按它图片的样式打印了标定板,并
拍下了14张图片,以同样方式命名,接下来狸猫换太子,把自己摄像头拍
的照片放到data文件夹下,把它的替换掉。第二步,把square_size后面的
数字1.0换成标定板上方块的实际长宽。这里单位是cm。
到此,可达鸭眼睛一眨,发现事情并没完。
重新打开python文件夹下的calibrate.py文件,里面代码如下:
square_size = float(args.get('--square_size'))
pattern_size = (9,6)
pattern_points = np.zeros((np.prod(pattern_size), 3), np.float32)
我复制的代码第二行pattern_size,这是指你拍的图片中的点的个数,如果你不知道
怎么数,你就看一下它原来的图片每一行有几个点,竖着有几个点,与这个size对比
一下就知道该数哪些点了。
然后把你标定板上点的数量填到这个函数里,至此,完事。
在终端里python calibrate.py就完事了。
验证标定成功的几个方法:
1.检查output文件夹下的leftXX_undistorted.png。观察里面
的直线是不是非常直,而在原来的图片中的直线是不是有点弯。
2.查看终端的输出信息,如果fx 接近于fy,几乎相等或者就是相等,那基本就是标定正确了。
这个是我在ubuntu下操作的,在win10下我不懂怎么搞,但我估计大同小异,应该也是可以的。
如果python编译calibrate.py出现错误的话,那肯定是你没用python编译过opencv,有些库没装。
本文来源于微信公众号“ CV技术指南 ” 。更多内容与最新技术动态尽在公众号发布。
欢迎扫描下方二维码关注公众号“CV技术指南”,主要进行计算机视觉方向的论文解读,最新技术跟踪,以及CV技术的总结。
原创文章第一时间在公众号中更新,博客只在有空时间才更新少量公众号文章