我目前正在开展一个项目,我需要识别这样的棋盘图案:
https://preview.ibb.co/g7Dnka/cow.jpg
我搜索了一些可以执行此操作的代码并找到了OpenCV函数findChessboardCorners
。我可以用一些图像成功测试它。这是C ++中的代码:
#include <opencv2\core\core.hpp>
#include <opencv2\highgui\highgui.hpp>
#include <opencv2\imgproc\imgproc.hpp>
#include <opencv2\calib3d\calib3d.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
// read the file
Mat image = imread("cow.jpg", IMREAD_COLOR);
// check for valid image
if (!image.data)
{
cout << "Could not open or find the image" << std::endl;
return -1;
}
// grid size (cols, rows)
Size size(7, 7);
// store detected centers
vector <Point2f> centers;
bool sucess = findChessboardCorners(image, size, centers);
cout << "find: " << sucess;
// draw the chessboard
drawChessboardCorners(image, size, Mat(centers), sucess);
// display the result
namedWindow("Display window", WINDOW_AUTOSIZE);
imshow("Display window", image);
waitKey(0);
return 0;
}
我的问题是它只接受高度和宽度大于2的棋盘(仅计算内角),但我使用8 x 2尺寸。
有没有办法绕过它甚至编写我自己的功能?谢谢你的帮助。