当前位置: 首页 > news >正文

摄像机模型与标定—棋盘、亚像素角点和绘制棋盘角点

转载:http://blog.csdn.net/gdut2015go/article/details/48244683?locationNum=9

棋盘

1)cvFindChessboardCorners:定位棋盘的角点。


int cvFindChessboardCorners(  
const void* image,  
CvSize pattern_size,  
CvPoint2D32f* corners,  
int* corner_count = NULL,  
int flags = CV_CALIB_CB_ADAPTIVE_THRESH  );  

1、image,输入的棋盘图必须是8位灰度或者彩色图像
2、pattern_size,棋盘图中每行和每列的角点个数(内角点的个数)。如上图为(6,7)。
3、corners,存储角点位置的数组指针,该数组表现事先分配空间,而且至少必须大于棋盘的所有角点的个数。
4、corner_count,变量是可选的,如果不是NULL,则它是一个指向所记录角点数目的正数指针。
5、flag,用来定义额外的滤波步骤以有助于寻找棋盘角点。所有的变量都可以单独或者以逻辑或的方式组合使用。

CV_CALIB_CB_ADAPTIVE_THRESH ,cvFindChessboardCorners()的默认方式是,首先根据平均亮度对图像进行二值化,但如果设置此标志,则使用自适应二值化。

CV_CALIB_CB_NORMALIZE_IMAGE ,如果设置了该标志,则会在二值化之前应用cvEqualizeHist()来归一化图像。

CV_CALIB_CB_FILTER_QUADS ,一旦二值化图像以后,算法试图根据棋盘上黑色方块的投影视场中定位四边形。这是一个逼近的过程,因为四边形的每个边都假设为直角,而实际上由于图像的径向畸变,这个不完全成立。如果这个标志被设置了,那么将对这个四边形使用额外的约束以拒绝错误的四边形。

函数成功找到所有的角点,则返回非0,否则返回0。


亚像素角点
2)cvFindChessboardCorners()返回的角点仅仅是近似值。这意味着实际上位置的精度受限于图像设备的精度,即小于一个像素。该函数使用近似位置和图像作为输入,计算角点的精确位置,以达到亚像素精度。


绘制棋盘角点
3)cvDrawChessboardCorners()将函数cvFindChessboardCorners()发现的所有角点绘制到所提供的图像上。

如果没有发现所有的角点,那么角点将使用红色圆圈绘制。

如果发现了所有的角点,那么角点将用不同颜色绘制(每行使用单独的颜色绘制),并且把角点以一定顺序用线连接起来。

void cvDrawChessboardCorners(  
CvArr* image,  
CvSize pattern_size,  
CvPoint2D32f*  corners,  
int count,  
int pattern_was_found  );  

1、image,欲绘制的图像,通常是cvFindChessboardCorners()函数所使用图像的复制品,该图像为8位的彩色图像。
2、pattern_size,corners和cvFindChessboardCorners()中定义的一样。
3、count,角点数目
4、pattern_was_found,表示是否所有的棋盘模式都被成功找到,这可以设置为cvFindChessboardCorners()函数的返回值。

相关文章:

  • 摄像机模型与标定——单应性
  • 摄像机模型与标定——摄像机标定
  • 摄像机模型与标定——标定函数
  • 摄像机模型与标定——三个坐标系及其之间关系
  • 推导四对对应点单应矩阵的计算公式?
  • 透视投影中已知两平面的单应矩阵,能否求出这两平面的夹角?
  • 相机标定的网页收纳
  • 机器视觉的相机标定到底是什么?
  • 摄像机标定--矫正畸变
  • 机器学习(Machine Learning)深度学习(Deep Learning)资料汇总
  • 机器学习(Machine Learning)深度学习(Deep Learning)资料(下)
  • 【深度学习Deep Learning】资料大全
  • 【机器学习Machine Learning】资料大全
  • 深度学习
  • 深度学习框架的评估与比较
  • Android 控件背景颜色处理
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • co.js - 让异步代码同步化
  • Flex布局到底解决了什么问题
  • gcc介绍及安装
  • Invalidate和postInvalidate的区别
  • LeetCode18.四数之和 JavaScript
  • Linux下的乱码问题
  • orm2 中文文档 3.1 模型属性
  • python学习笔记 - ThreadLocal
  • Redux系列x:源码分析
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • Selenium实战教程系列(二)---元素定位
  • Vue 动态创建 component
  • Vue2 SSR 的优化之旅
  • vue-router的history模式发布配置
  • Windows Containers 大冒险: 容器网络
  • 服务器之间,相同帐号,实现免密钥登录
  • 前端路由实现-history
  • 微信开源mars源码分析1—上层samples分析
  • 原生js练习题---第五课
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • (17)Hive ——MR任务的map与reduce个数由什么决定?
  • (5)STL算法之复制
  • (附源码)springboot工单管理系统 毕业设计 964158
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (离散数学)逻辑连接词
  • (南京观海微电子)——I3C协议介绍
  • (十)T检验-第一部分
  • (一) springboot详细介绍
  • (一)WLAN定义和基本架构转
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • .bat批处理(六):替换字符串中匹配的子串
  • .Net 6.0 处理跨域的方式
  • .Net IE10 _doPostBack 未定义
  • .NET 设计模式—简单工厂(Simple Factory Pattern)
  • .NET 设计模式—适配器模式(Adapter Pattern)
  • .NetCore部署微服务(二)