【问题标题】:Couldn't find Chessboard corners找不到棋盘角
【发布时间】:2020-11-23 11:44:04
【问题描述】:

我的目标是在 Chessgame 中获得对棋子颜色和位置的识别。由于 github 上有许多教程,因此识别非常容易。使用opencv函数cv2.findChessboardCornerscv2.drawChessboardCorners(清除棋盘)我得到了满意的结果,如下图:

但是当我尝试使用已识别的棋子或棋盘(不是空棋盘)上的棋子图像获取图像的角落时,它会失败并且我没有得到任何结果。

我没有附上任何代码,因为我只使用了这两个函数。

我该如何解决这个问题?我需要手动校准吗?

我希望有人做过类似的事情并且可以解决我的问题。

【问题讨论】:

    标签: python opencv calibration


    【解决方案1】:

    我的答案是 C++,但很容易转移到 Python。

    您正在使用 OpenCV 的函数 findChessboardCorners,它实际上不是在任何可能的棋盘上查找角点的函数。该功能通常用于相机校准(确定相机参数)并需要例如一个自己印制的黑白棋盘。可以在here 找到一个较旧的示例。有趣的是,它也适用于您的棕色棋盘。

    为了寻找棋盘角,我建议使用不同的 OpenCV 工作流程。 我正在读取图像,在图像上应用双边滤波器以平滑图像但保留边缘,然后我使用函数 goodFeaturesToTrack 来查找图像中最强的角。由于您没有提供没有附加线的图像,因此我使用了棕色棋盘的随机互联网图像: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);
    }
    

    结果:

    【讨论】:

      猜你喜欢
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多