zoukankan      html  css  js  c++  java
  • 摄像机标定--很懒的方法

    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技术的总结。

    原创文章第一时间在公众号中更新,博客只在有空时间才更新少量公众号文章

     

  • 相关阅读:
    Linux系统编程 —互斥量mutex
    Linux系统编程 —读写锁rwlock
    Linux系统编程—条件变量
    Linux系统编程—信号量
    SkyWalking 源码的整体结构
    带拼音插件的索引和映射创建
    磁盘扩容后文件目录迁移步骤
    应用注册Eureka配置
    StringUtils.hasText()
    Java后台进行分页参数类封装
  • 原文地址:https://www.cnblogs.com/wxkang/p/9902729.html
Copyright © 2011-2022 走看看