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

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

这篇文章主要介绍“怎么使用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实现棋盘格检测”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注恰卡网网站,小编会继续努力为大家带来更多实用的文章!

本站部分文章来自网络或用户投稿,如无特殊说明或标注,均为本站原创发布。涉及资源下载的,本站旨在共享仅供大家学习与参考,如您想商用请获取官网版权,如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
开发者

Vue中怎么请求本地JSON文件并返回数据

2022-8-3 21:12:48

开发者

OpenCV形状检测功能怎么实现

2022-8-3 21:12:56

搜索