尝试查找棋盘角时出现opencv python错误
Posted
技术标签:
【中文标题】尝试查找棋盘角时出现opencv python错误【英文标题】:open cv python error when trying to find chessboard corners 【发布时间】:2014-11-28 13:36:06 【问题描述】:我必须编写一个相机校准,并想使用 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 的图像,之后我对它们进行了锐化,我什至使用原始的棋盘来获得角落。他们都没有工作。
还有其他方法可以得到它们,还是我从头开始做任何完全错误的事情?
我也尝试使用没有灰度的图像,但问题是一样的。
【问题讨论】:
***.com/questions/17665912/… 正如我之前所说,我几乎阅读了有关此故障的任何有关 *** 的文章,并且我还使用了您在网上找到的教程的校准图像。除此之外,我使用的是原始打印的 opencv 校准 pdf,它是 10x7 【参考方案1】:好的,我发现了问题所在。
我之前不知道的是,你必须输入的尺寸是棋盘的原始尺寸减1:
因此,如果您有 10 x 7 的板,则使用的尺寸为 9 x 6。
也许这对遇到同样问题的其他人会有所帮助。
更新:修正了一个严重的错字。使用的尺寸是 9 x 6,而不是 9 x 7。
【讨论】:
您是说 9x6 吗?还是只减去第一个? 应该是 9 x 6。基本上,您要计算“内”棋盘角。棋盘边缘的“交叉点”不算数。角被定义为 4 个棋盘格的交点。【参考方案2】:感谢 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);
【讨论】:
以上是关于尝试查找棋盘角时出现opencv python错误的主要内容,如果未能解决你的问题,请参考以下文章