[英]Couldn't find Chessboard corners
我的答案是 C++,但很容易转移到 Python。
您正在使用 function findChessboardCorners
of OpenCV 这实际上不是 function 用于在任何可能的棋盘上查找角落。 function通常用于相机标定(确定相机参数),需要自行打印黑白棋盘等。 可以在此处找到一个较旧的示例。 有趣的是它也适用于你的棕色棋盘。
为了找到棋盘角,我建议使用不同的 OpenCV 工作流程。 我正在读取图像,在图像上应用双边滤波器以使图像平滑但保留边缘,然后我使用 function goodFeaturesToTrack
找到图像中最强的角。 由于您没有提供没有附加线条的图像,因此我使用了棕色棋盘的随机 inte.net 图像: C++代码如下:
int main(int argc, char** argv)
{
// Reading the images
cv::Mat img = cv::imread("chessboard_2.jpg", cv::IMREAD_GRAYSCALE);
cv::Mat img_rgb = cv::imread("chessboard_2.jpg", cv::IMREAD_COLOR);
cv::Mat bilateral_filtered_image;
// Applying a bilateral filter to smooth the image
cv::bilateralFilter(img, bilateral_filtered_image, 5, 75, 75);
cv::namedWindow("Bilateral Filter", cv::WINDOW_NORMAL);
cv::imshow("Bilateral Filter", bilateral_filtered_image);
cv::waitKey(0);
// Find corner points using goodFeaturestoTrack with appropriate parameters
std::vector<cv::Point2f> corners;
cv::goodFeaturesToTrack(bilateral_filtered_image, corners, 200, 0.01, 120);
std::cout << corners.size() << std::endl;
// Draw all corners on the original image and show the image
for (size_t i = 0; i < corners.size(); ++i) {
cv::circle(img_rgb, cv::Point2f(corners[i].x, corners[i].y), 7, (0,0,255), 3);
}
cv::namedWindow("Corners", cv::WINDOW_NORMAL);
cv::imshow("Corners", img_rgb);
cv::waitKey(0);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.