- 操作系统:ubuntu22.04
- OpenCV版本:OpenCV4.9
- IDE:Visual Studio Code
- 编程语言:C++11
算法描述
cv::checkChessboard 是 OpenCV 库中的一个函数,用于检测给定图像中是否存在符合指定尺寸的棋盘格图案。这个函数对于相机校准非常重要,因为它可以帮助验证图像是否适合用于后续的角点检测和相机标定步骤。
函数原型
bool cv::checkChessboard
(InputArray img,Size size
)
参数
- 参数InputArray img: 输入图像,可以是单通道(灰度)或三通道(彩色)图像。
- 参数Size size: 棋盘格内角点的数量,以宽度和高度的形式给出。请注意,这通常是指内部角点的数量,即如果你有一个 7x7 的棋盘格图案,那么你应该传递 Size(6, 6),因为外侧的方格没有内部角点。
返回值
- bool: 如果在图像中找到了指定大小的棋盘格图案,则返回 true;否则返回 false。
代码示例
#include <iostream>
#include <opencv2/opencv.hpp>using namespace cv;
using namespace std;int main()
{// 加载图像 (确保路径正确)Mat img = imread( "/media/dingxin/data/study/OpenCV/sources/images/chessboard.png", IMREAD_COLOR );if ( img.empty() ){cout << "Could not open or find the image!" << endl;return -1;}// 如果图像是彩色的,将其转换为灰度图像Mat grayImg;if ( img.channels() == 3 ){cvtColor( img, grayImg, COLOR_BGR2GRAY );}else{grayImg = img.clone(); // 如果已经是灰度图像,则直接复制}// 检查图像深度是否为 CV_8U,如果不是则进行转换if ( grayImg.depth() != CV_8U ){grayImg.convertTo( grayImg, CV_8U );}// 定义棋盘格的大小(内部角点的数量)Size boardSize( 9, 6 ); // 例如,对于一个 10x7 的棋盘格// 检测图像中是否存在指定大小的棋盘格图案bool found = checkChessboard( grayImg, boardSize );// 打印结果if ( found ){cout << "Chessboard pattern found." << endl;}else{cout << "Chessboard pattern NOT found." << endl;}return 0;
}
运行结果
Chessboard pattern found.
代码中用到的棋盘格图