zoukankan      html  css  js  c++  java
  • 相机标记[置顶] OpenCV for Ios 学习笔记(6)-标记检测3

    时光紧张,先记一笔,后续优化与完善。

        

        本文原始址地:OpenCV for Ios 学习条记(6)-标记测检3

        

        标记位置的精细化

    //根据相机的旋转,整调标记的姿态
    //marker:捕获到的标记
                std::rotate(marker.points.begin(), marker.points.begin() + 4 - nRotations, marker.points.end());

        
    在捕获到标记后并且根据标记编码筛选后,我们该应重新定义它们的角。这步有助于面下估计标记的3d态形。

    std::vector<cv::Point2f> preciseCorners(4 * goodMarkers.size());
            //找到全部标记的角点
            for (size_t i=0; i<goodMarkers.size(); i++)
            {
                const Marker& marker = goodMarkers[i];
                
                for (int c = 0; c <4; c++)
                {
                    preciseCorners[i*4 + c] = marker.points[c];
                }
            }
            //类型
            /* 
             CV_TERMCRIT_ITER 用大最迭代次数作为止终条件
             CV_TERMCRIT_EPS 用精度作为迭代条件
             CV_TERMCRIT_ITER+CV_TERMCRIT_EPS 用大最迭代次数或者精度作为迭代条件,决定于哪个条件先满意
             */
            //迭代的大最次数
            //特定的阀值
            cv::TermCriteria termCriteria = cv::TermCriteria(cv::TermCriteria::MAX_ITER | cv::TermCriteria::EPS, 30, 0.01);
            
            //输入图像
            //输入的角点,也作为输出更确精的角点
            //亲近的小大(Neighborhood size)
            //Aperture parameter for the Sobel() operator
            //像素迭代(扩大)的方法
            cv::cornerSubPix(grayscale, preciseCorners, cvSize(5,5), cvSize(-1,-1), termCriteria);
            
            // 保存最新的点顶
            for (size_t i=0; i<goodMarkers.size(); i++)
            {
                Marker& marker = goodMarkers[i];
                
                for (int c=0;c<4;c++)
                {
                    marker.points[c] = preciseCorners[i*4 + c];
                }
            }

        我们到得的图像该应像这样:

        

        

        但是须要意注一点,我们在标记测检的初期的阶段没有用应cornerSubPix数函是因为它的复杂性-调用这个数函处置大批点顶时会消耗大批的处置时光,因此我们只在处置有效标记时用应。

        

        描写标记的3维态形

        

        总所周知,增强实现技巧是将实现界世与虚拟物体完善融合。为了将物体呈现到3维间空中,我们必须晓得它于对相我们正在行进帧捕获的相机的姿态。因此,我们将会在笛卡尔坐标系中用应欧几里得转换来示表这个姿态。

        标记在3维间空的位置和它本身的投影矩阵有以下关联:

        P = A * [R|T] * M;

        其中:

        每日一道理
    共和国迎来了她五十诞辰。五十年像一条长河,有急流也有缓流;五十年像一幅长卷,有冷色也有暖色;五十年像一首乐曲,有低音也有高音;五十年像一部史诗,有痛苦也有欢乐。长河永远奔流,画卷刚刚展开,乐曲渐趋高潮,史诗还在续写。我们的共和国正迈着坚定的步伐,跨入新时代。

        M示表一个3维的点

        [R|T] 示表一个[3|4]的欧几里得矩阵

         A示表一个相机矩阵或者固有的矩阵数参

        P示表M在屏幕间空中的投影

        

        

        

        在我们实现标记标记测检,并且到得它在2维间空的4个角点(屏幕间空投影),下一步我们就要取获A矩阵和M向量数参并算计欧几里得矩阵变换。

        Camera Calibration and 3D Reconstruction

        

        相机准校

        每一个相机都有具特独的数参,如焦距、主点,和镜头畸变模型。

        找出相机内涵数参的程过就是相机准校。因为相机准校描述了透视变换和在输出图像上的镜头畸变,因此对增强实现用应至关重要。为了得取最好的用户体验,增强实现中的物体也该应用应同相的透视投影。

        为了准校相机,我们须要一个特别的图案(棋盘或者白色景背上的色黑圆圈)。面下是实现相机准校的一个较好的法算:

        用应棋盘格来行进摄像机标定

        

        

        为了示展相机准校,我们建创CameraCalibration类:

        

    /**
     * 一个相机准校类,存储相机的内涵数参和畸变向量
     */
    
    class CameraCalibration
    {
    public:
      CameraCalibration();
      CameraCalibration(float fx, float fy, float cx, float cy);
      CameraCalibration(float fx, float fy, float cx, float cy, float distorsionCoeff[4]);
      
      void getMatrix34(float cparam[3][4]) const;
    
      const Matrix33& getIntrinsic() const;
      const Vector4&  getDistorsion() const;
      
    private:
      Matrix33 m_intrinsic;
      Vector4  m_distorsion;
    };

        体具实现:

        待传

        

        

        接链:

        http://docs.opencv.org/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html

        注:该学习条记重要翻译自Mastering OpenCV with Practical Computer Visi

        

    文章结束给大家分享下程序员的一些笑话语录: 程序员打油诗   
      写字楼里写字间,写字间里程序员;
      程序人员写程序,又拿程序换酒钱。
      酒醒只在网上坐,酒醉还来网下眠;
      酒醉酒醒日复日,网上网下年复年。
      但愿老死电脑间,不愿鞠躬老板前;
      奔驰宝马贵者趣,公交自行程序员。
      别人笑我忒疯癫,我笑自己命太贱;
      不见满街漂亮妹,哪个归得程序员。

  • 相关阅读:
    elasticsearch 基础 —— 集群原理
    剑指 offer set 10 栈的压入、弹出序列
    剑指 offer set 9 包含min函数的栈
    剑指 offer set 8 树的子结构
    剑指 offer set 7 调整数组顺序使奇数位于偶数前面
    剑指 offer set 6 打印从 1 到 N 的所有数
    剑指 offer set 5 二进制中 1 的个数
    剑指 offer set 4 矩形覆盖
    剑指 offer set 3 旋转数组的最小数字
    剑指 offer set 2 从头到尾打印链表
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3045568.html
Copyright © 2011-2022 走看看