棋盘格法是摄像机标定中常用的一种方法,在使用该方法时需要对棋盘格的角点进行检测。opencv中封装了一个专门用于棋盘格角点检测的函数即cv::findChessboardCorners(),同时,也提供了一个专门用于绘制棋盘格角点的函数cv::drawChessboardCorners()。下面将对这两个函数进行详细的介绍。

1、cv::findChessboardCorners()棋盘格角点检测

该函数的具体调用形式如下:

 bool cv::findChessboardCorners( // 如果找到角点则返回truecv::InputArray image, // 输入的棋盘格图像(8UC1或8UC3)cv::Size patternSize, // 棋盘格内部角点的行、列数cv::OutputArray corners, // 输出的棋盘格角点int flags = cv::CALIB_CB_ADAPTIVE_THRESH | cv::CALIB_CB_NORMALIZE_IMAGE);

第一个参数是输入的棋盘格图像(可以是8位单通道或三通道图像)。

第二个参数是棋盘格内部的角点的行列数(注意:不是棋盘格的行列数,如下图棋盘格的行列数分别为4、8,而内部角点的行列数分别是3、7,因此这里应该指定为cv::Size(3, 7))。

第三个参数是检测到的棋盘格角点,类型为std::vector<cv::Point2f>。

第四个参数flag,用于指定在检测棋盘格角点的过程中所应用的一种或多种过滤方法,可以使用下面的一种或多种,如果都是用则使用OR:

cv::CALIB_CB_ADAPTIVE_THRESH:cv::findChessboardCorners()默认的阈值化处理基于平均亮度,如果该标志指定,则使用自适应滤波(自适应滤波见

OpenCV3中的阈值化操作——cv::threshold()与cv::adaptiveThreshold()详解

)。

cv::CALIB_CB_NORMALIZE_IMAGE:阈值化前使用cv::equalizeHist()进行直方图均衡化处理。

cv::CALIB_CB_FILTER_QUADS:

cv::CALIB_CV_FAST_CHECK:

当然,找到的角点还需要使用cv::cornerSubPix()进行精度上的优化(具体请参考OpenCV3中的角点检测——cv::goodFeaturesToTrack()与cv::cornerSubPix()详解)。

2、cv::drawChessboardCorners()棋盘格角点的绘制

cv::drawChessboardCorners()的具体调用形式如下:

 void cv::drawChessboardCorners(cv::InputOutputArray image, // 棋盘格图像(8UC3)即是输入也是输出cv::Size patternSize, // 棋盘格内部角点的行、列数cv::InputArray corners, // findChessboardCorners()输出的角点bool patternWasFound // findChessboardCorners()的返回值);

第一个参数是棋盘格图像(8UC3)。

第二个参数是棋盘格内部角点的行、列,和cv::findChessboardCorners()指定的相同。

第三个参数是检测到的棋盘格角点。

第四个参数是cv::findChessboardCorners()的返回值。

下面是棋盘格检测与绘制的测试代码

 cv::Mat image_color = cv::imread("chessboard.png", cv::IMREAD_COLOR);cv::Mat image_gray;cv::cvtColor(image_color, image_gray, cv::COLOR_BGR2GRAY);std::vector<cv::Point2f> corners;bool ret = cv::findChessboardCorners(image_gray,cv::Size(3, 7),corners,cv::CALIB_CB_ADAPTIVE_THRESH |cv::CALIB_CB_NORMALIZE_IMAGE);//指定亚像素计算迭代标注cv::TermCriteria criteria = cv::TermCriteria(cv::TermCriteria::MAX_ITER + cv::TermCriteria::EPS,40,0.1);//亚像素检测cv::cornerSubPix(image_gray, corners, cv::Size(5, 5), cv::Size(-1, -1), criteria);//角点绘制cv::drawChessboardCorners(image_color, cv::Size(3, 7), corners, ret);cv::imshow("chessboard corners", image_color);cv::waitKey(0);return;

检测和绘制的结果如下:

2017.04.07

【OpenCV3】棋盘格角点检测与绘制——cv::findChessboardCorners()与cv::drawChessboardCorners()详解相关推荐

  1. (20)目标检测算法之YOLOv5计算预选框、详解anchor计算

    目标检测算法之YOLOv5计算预选框.详解anchor计算 单节段目标检测算法中:预选框的设定直接影响最终的检测精度 众所周知,yolov5中采用自适应调整预选框anchor的大小,但万事开头难,配置 ...

  2. matlab三次样条曲线的绘制(spline和csape函数详解)

    matlab三次样条函数的绘制(spline和csape函数详解) 前言 1.spline函数详解 1.一维非节点边界 2.第二边界条件 3.高维无约束 4.高维第二边界 5.利用第二边界条件绘制圆 ...

  3. 【OpenCV3】角点检测——cv::goodFeaturesToTrack()与cv::cornerSubPix()详解

    一提到角点检测,最常用的方法莫过于Harris角点检测,opencv中也提供了Harris角点检测的接口,即cv::cornerHarris(),但是Harris角点检测存在很多缺陷(如角点是像素级别 ...

  4. 毛星云opencv之10.1.5综合示例--harris角点检测和绘制

    #include <opencv2/opencv.hpp> #include "opencv2/highgui/highgui.hpp" #include " ...

  5. opencv棋盘格角点检测原理总结

    第一步,局部平均自适应阈值化方法对亮度不均匀情况适应性强,因此用该方法对图像二值化,均衡化后得到了理想的门限,效果如图2所示. 第二步,图像膨胀分离各个黑块四边形的衔接,由于膨胀的是白色像素点,因此能 ...

  6. harris角点检测与绘制。通过滑动滚动条来控制阈值,以控制检测角点的数量并返回角点坐标

    #include<opencv2/opencv.hpp> #include<iostream> using namespace std; using namespace cv; ...

  7. matlab导数曲线怎样画,matlab三次样条曲线的绘制(spline和csape函数详解)

    matlab三次样条函数的绘制(spline和csape函数详解) 样条函数是工程中常用的插值函数.早期工程师制图时,把富有弹性的细长木条(所谓样条)用压铁固定在样点上,在其他地方让它自由弯曲,然后沿 ...

  8. 【三维目标检测】VoxelNet(三):模型详解

    前两节详细介绍了VoxelNet的数据处理部分,本节主要介绍VoxelNet详细的模型结构及其损失函数.数据处理部分请参考:三维点云目标检测 - VoxelNet详解之数据处理 (二)_Coding的 ...

  9. ROC曲线绘制原理即AUC的意义详解

    云走雾走走行程,救苦救难救灾星 有求必应,出古洞四海扬名,在深山修真养性 ROC曲线绘制原理即AUC意义详解 ROC曲线绘制原理 ROC曲线常常用来判定一个分类器的分类效果,想要探究ROC曲线的绘制原 ...

最新文章

  1. 物理学在计算机领域的应用,物理学在计算机中的应用.doc
  2. RNA和机器学习:多维生物标志物的合理设计
  3. c++STL容器的Map和multimap
  4. 从部署 httpd 入手,理清 k8s 配置中的 containerPort、port、nodePort、targetPort
  5. jmu-枚举WeekDay
  6. modprobe命令使用方法
  7. python 装饰器装饰类
  8. [C#]C#补习——类型和操作符—PART1
  9. python画简单图-使用Python中的Turtle库绘制简单的图形
  10. 当前GitHub上排名前十的热门Vue项目
  11. 发票ocr识别查验解决方案
  12. 分析电脑控制的丹佛机场行李系统
  13. oracle怎么写三元表达式,Talend中变量载入(tContextLoad)的用法,及其他注意事项
  14. python 环境配置
  15. 使用百度翻译api支持中转英,中简转中繁等等
  16. 直流无刷电机【一】从零开始上手
  17. 植物代谢组学-线虫信息素的植物代谢介导植物与线虫的相互作用
  18. 手机搜狐 html5,手机搜狐欲改版推全新域名及LOGO 着力Html5技术
  19. java group布局_Java的swing.GroupLayout布局管理器的使用方法和实例
  20. 2019年一月十日 Mixin Network 资产持有量快照

热门文章

  1. 深入理解分布式技术 - 先更新数据库,还是先更新缓存
  2. 深入理解分布式技术 - RocketMQ解析
  3. 白话Elasticsearch68-ES生产集群部署重要的操作系统设置
  4. CPU_X86架构和ARM架构入门篇
  5. Java学习笔记(七)--格式化字符串及格式输出
  6. python barrier option pricing_《Python金融数据分析》书内代码实战与讲解(二)金融衍生物定价...
  7. 在controller中调用指定参数给指定表单_第005课:Spring Boot 中MVC支持
  8. 苹果截屏快捷键_新手小白用苹果电脑搞科研,学会这些才不至于尴尬!
  9. 随机过程:高斯函数导数、梯度
  10. 语音识别:时间序列的匹配算法(Needleman-Wunsch 算法)