温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎么使用opencv实现棋盘格检测

发布时间:2022-08-01 16:20:43 来源:亿速云 阅读:157 作者:iii 栏目:开发技术

这篇文章主要介绍“怎么使用opencv实现棋盘格检测”,在日常操作中,相信很多人在怎么使用opencv实现棋盘格检测问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么使用opencv实现棋盘格检测”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

代码:

#include <iostream>
#include <vector>
#include <opencv2/opencv.hpp>  
#include <opencv2/xfeatures2d.hpp>
#include <opencv2/optflow/motempl.hpp>
using namespace cv;  
using namespace std;
/*
棋盘格角点检测应用
*/
 
int main()
{
    //***********************************  1  ****************************************************************
    /*Mat img = imread("C:\\Users\\H\\Desktop\\13.png", IMREAD_GRAYSCALE);
    vector<Point2f> corner;
    bool result = findChessboardCorners(img, Size(5, 7), corner, CALIB_CB_ADAPTIVE_THRESH | CALIB_CB_NORMALIZE_IMAGE);
    cornerSubPix(img, corner, Size(11, 11), Size(-1, -1), TermCriteria(TermCriteria::EPS | TermCriteria::MAX_ITER, 20, 0.03));
    drawChessboardCorners(img, Size(5, 7), corner, result);
    imshow("src", img);*/
    //**********************************************************************************************************
 
 
    // **********************************  2  **************************************************
    //读入图像
    Mat src = imread("C:\\Users\\H\\Desktop\\13.png", IMREAD_COLOR);
    Mat image_gray;
    cvtColor(src, image_gray, COLOR_BGR2GRAY);
    //定义存储角点的容器
    vector<Point2f> corners;
    //进行角点检测
    bool ret = findChessboardCorners(image_gray,
                                        Size(5, 7), // 棋盘格每列点数和每一行点数
                                        corners,    // 输出检测到角点的数组
                                        CALIB_CB_ADAPTIVE_THRESH |
                                        CALIB_CB_NORMALIZE_IMAGE);
 
    //指定亚像素计算迭代标注
    TermCriteria criteria = TermCriteria(TermCriteria::MAX_ITER + TermCriteria::EPS,
                                        40,   // 要计算的最大迭代次数或元素数
                                        0.1); // 迭代算法停止时所需的精度或参数变化
    //亚像素检测
    cornerSubPix(image_gray, 
                    corners, 
                    Size(5, 5), //搜索窗口大小
                    Size(-1, -1), 
                    criteria);
    //角点绘制
    drawChessboardCorners(src,
                            Size(5, 7), //棋盘格每列点数和每一行点数
                            corners, 
                            ret);
    cout << "corner: " << corners << endl;
 
    //在原图中绘制点
    Point pt;
    pt.x = corners[9].x;
    pt.y = corners[9].y;
    circle(src, pt, 4, Scalar(0, 255, 0),-1);
 
    imshow("chessboard corners", src);
    // ****************************************************************************************
 
    waitKey(0);
 
    return 0;
}

结果展示:

怎么使用opencv实现棋盘格检测

到此,关于“怎么使用opencv实现棋盘格检测”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI