绘制棋盘格角点
#include<opencv2/opencv.hpp>
std::vector<cv::Point2f> myFindCorners(int rows, int cols, cv::Mat mat) {
cv::Mat mat_copy = mat;
cv::Mat gray = mat_copy;
int h = rows;
int w = cols;
std::vector<cv::Point2f> corners;
corners.resize(gray.cols * gray.rows);
memset(corners.data(), 0, corners.size() * sizeof(cv::Point2f));
bool patternWasFound = cv::findChessboardCorners(gray, cv::Size(h, w),
corners, cv::CALIB_CB_ADAPTIVE_THRESH);
if (!patternWasFound) {
std::cout << "获取角点失败" << std::endl;
return cv::Mat();
}
cv::TermCriteria termCriteria(CV_TERMCRIT_ITER + CV_TERMCRIT_EPS, 20, 0.1);
cv::cornerSubPix(gray, corners, cv::Size(11, 11), cv::Size(-1, -1), termCriteria);
return corners;
}
int main() {
cv::Mat mat = cv::imread("D:\\pic\\.bmp",
CV_LOAD_IMAGE_GRAYSCALE);
cv::Mat dst, thresh;
cv::threshold(mat, thresh, 0, 255, CV_THRESH_OTSU | CV_THRESH_BINARY_INV);
std::vector<cv::Point2f> corners;
int maxcorners = 10000;
double qualityLevel = 0.01;
double minDistance = 100;
int blockSize = 3;
double k = 0.04;
goodFeaturesToTrack(thresh, corners, maxcorners, qualityLevel,
minDistance, cv::Mat(), blockSize, false, k);
cv::cvtColor(mat, mat, CV_GRAY2BGR);
cv::RNG rng(12345);
for (unsigned i = 0; i < corners.size(); i++)
{
circle(mat, corners[i], 2, cv::Scalar(0, 0, 255), -1, 8, 0);
}
return 0;
}