日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2025/3/21 编程问答 61 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【OpenCV3】棋盘格角点检测与绘制——cv::findChessboardCorners()与cv::drawChessboardCorners()详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

棋盤格法是攝像機標定中常用的一種方法,在使用該方法時需要對棋盤格的角點進行檢測。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()详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。