opencv實現棋盤格檢測
更新時間:2022年08月01日 14:19:46 作者:老王隔壁的禿頭大寶貝
這篇文章主要為大家詳細介紹了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; }
結果展示:
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。