本文实例为大家分享了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实现棋盘格检测

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。