尝试查找棋盘角时打开 CV Python 错误



我必须写一个相机校准,想要使用python和opencv。我目前遇到的问题如下:

我在下面写下了代码:

import sys
import numpy as np
import cv2
image = cv2.imread(sys.argv[1])
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
ret = False
ret, corners = cv2.findChessboardCorners(image, (7,6), None)
print ret

好吧,到目前为止一切顺利,但是我使用哪个图像并不重要,我的ret变量每次都变成False,这基本上意味着没有找到角。

关于堆栈溢出的问题有一些问题,但没有一个解决方案可以解决我的问题。我尝试使用从 500x500 到 8MP 的图像,之后我锐化了它们,我什至使用原始棋盘来获得角落。他们都没有工作。

有没有其他方法可以得到它们,或者我从头开始做任何完全错误的事情?

我也尝试使用没有灰度的图像,但问题是相同的。

好的,我发现了问题所在。

我之前不知道的是,你必须输入的尺寸是棋盘的原始尺寸减去 1:

因此,如果您有 10 x 7 板,则要使用的尺寸为 9 x 6。

也许这对其他有同样问题的人会有所帮助。

更新:修复了一个严重的拼写错误。要使用的尺寸为 9 x 6,而不是 9 x 7。

谢谢hGen。 你的回答真的很有帮助。但就我而言,9X6 有效(不是 9X7)。

cv::Mat imgClr = cv::imread( "05-00.png" );
cv::Mat imgGray;
cv::cvtColor( imgClr, imgGray, CV_BGR2GRAY );
cv::namedWindow( "Image", cv::WINDOW_NORMAL );
cv::imshow( "Image", imgGray );
cv::waitKey(0);
cv::Size board_sz = cv::Size(9, 6);
std::vector < cv::Point2f > corners;
bool found = cv::findChessboardCorners(imgGray, board_sz, corners, CV_CALIB_CB_ADAPTIVE_THRESH | CV_CALIB_CB_NORMALIZE_IMAGE
                                       | CV_CALIB_CB_FAST_CHECK | CV_CALIB_CB_FILTER_QUADS );
if(found)
{
    cv::drawChessboardCorners(imgGray, board_sz, corners, found);
    cv::imshow( "Image", imgGray );
    cv::waitKey(0);
}

最新更新