【问题标题】:Why won't cv.findChessboardCorners work for me?为什么 cv.findChessboardCorners 不适合我?
【发布时间】:2014-01-03 06:33:23
【问题描述】:

下面的图像被传递给 cv.findChessboardCorners,由于我无法理解的原因,它只是没有给我角落的位置。棋盘很明显,白线粗细也很突出。

你知道为什么这不起作用吗?

图像尺寸为 960X1280,网格尺寸为 [15,11],即每行 15 个内角,每列 11 个内角。

输出总是一个空矩阵。我尝试更改参数并且函数使用直方图均衡,所以我假设像素分布不会有问题。

【问题讨论】:

  • 请注意,您在那里的投影棋盘看起来已经变形了
  • 我不认为,老实说,我认为这对于算法来说是一个非常简单的案例,但我想问题是门。直方图调整做到了!

标签: matlab opencv image-processing computer-vision


【解决方案1】:

我希望您不介意 Python 中的答案,而不是 matlab。 (他们使用相同的openCV库,我希望命令之间的对应关系清晰。)

您的图像未更改对我来说很好,下面的代码可以找到角并在窗口中用彩色点显示它们:

#!/usr/bin/python
import cv2.cv as cv
import sys

filename = sys.argv[1]
im = cv.LoadImage(filename, cv.CV_LOAD_IMAGE_GRAYSCALE)
im3 = cv.LoadImage(filename, cv.CV_LOAD_IMAGE_COLOR)
chessboard_dim = (15, 11)
found_all, corners = cv.FindChessboardCorners( im, chessboard_dim )
cv.DrawChessboardCorners( im3, chessboard_dim, corners, found_all )
cv.ShowImage("Chessboard with corners", im3)
cv.WaitKey()

输出图像(略微裁剪)如下所示:

【讨论】:

  • 男人!为什么这在 MATlab 上不起作用?!?无论如何,谢谢,我最终调整了直方图以增加对比度,然后它工作得很好,但是为什么没有调整它对我不起作用?
  • @RakshitKothari 如果有什么不同,我使用的是 OpenCV 版本 2.3.1 (Debian Wheezy)。
  • 嗯!我明白了,但它仍然不适合我。其中一个答案建议裁剪门区域,之后似乎效果很好。我猜那通向浅色墙壁的暗门混淆了算法。
  • @RakshitKothari 以我的经验,它通常希望棋盘周围有一个大的白色区域。我很惊讶你的图像第一次对我有用,没有增加白色区域或增加对比度。黑暗之门的存在可能会在这两种情况下混淆它。
  • @RakshitKothari 顺便说一下,这是另一个有问题的棋盘格示例:stackoverflow.com/questions/17993522/…
【解决方案2】:

我在 MATLAB 中使用mexopencv(针对最新的 OpenCV 2.4.7 编译)进行了尝试,但我遇到了同样的问题,没有检测到角。

当然,通过稍微裁剪图像以使更多注意力集中在板上,这个问题很容易解决。您必须对所有图像序列应用一致的处理,并确保所有图像都包含该板。

% read grayscale image
img = imread('http://i.stack.imgur.com/5VsOP.jpg');

% crop image to the area of the chessboard
img2 = img(100:600, 200:1000);

% detect corners
c = cv.findChessboardCorners(img2, [15,11]);
if isempty(c), error('no corners found'); end

% show result
out = cv.drawChessboardCorners(repmat(img2,[1 1 3]), [15,11], c);
imshow(out)

【讨论】:

  • 您可能想在检测后添加c = cv.cornerSubPix(img2, c); 以使用亚像素精度细化角位置。
  • 谢谢!这意味着左边的门混淆了算法。我想知道为什么?调整直方图后,对我来说效果很好。
【解决方案3】:

如果您有计算机视觉系统工具箱,则可以使用detectCheckerboardPoints 函数。它无需任何预处理即可工作,并为您提供亚像素精度。

【讨论】:

  • 我明白了,请注意:获得 2013b!
  • 在这种情况下,您应该查看同样在 2013b 中的 Camera Calibrator 应用程序。 mathworks.com/help/vision/ug/…
猜你喜欢
  • 2011-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多