OpenCV 找不到棋盘角

Posted

技术标签:

【中文标题】OpenCV 找不到棋盘角【英文标题】:OpenCV fails to find chess board corners 【发布时间】:2019-05-29 21:08:40 【问题描述】:

我正在使用红外摄像机,并试图找出我们是否有任何镜头失真。我正在使用来自 OpenCV here 的示例来指导我的工作。我使用了来自here 的棋盘模板并将其附在书的背面。在拍摄任何图像之前,我加热了书/纸并观察到棋盘图案非常清晰。

我拍摄了大约 50 个静止帧,其中棋盘图案倾斜/移动,因此帧的每个部分都包含图案的某些部分。下面是我的一张图片的示例:

我使用了以下代码,导致每张图片都为 False。我尝试了 (5-9, 5-9) 中网格图案大小的每种组合。

import numpy as np
import cv2
import glob2 as glob
import matplotlib.pyplot as plt

base = 'pathtoimages/'
files = glob.glob(base + '*.png')

for file in files:
    img = cv2.imread(file)
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    ret, corners = cv2.findChessboardCorners(gray, (6,8), None)

    print (ret)

我无法弄清楚为什么算法没有找到角点。有什么想法吗?

2019 年 5 月 30 日编辑:

今天我用相机拍了更多照片。我在没有任何外部光源的情况下在更受控的环境中拍摄照片。这些新图像仍然无法通过 findchessboard 角检测。我尝试使用 cv2.convertScaleAbs 增加对比度和亮度以生成以下图像作为示例。

这也失败了。如果我使用 cv2.goodFeaturesToTrack 查找角点,我会得到以下结果:

Opencv 角点检测算法似乎在主动避开我的棋盘角。它会在棋盘上找到一个角落之前找到它可以找到的任何角落。我真的被难住了。

作为一个健全的检查,我确保 openCV 可以找到我正在使用的原始棋盘上的角并且它运行良好。

有什么想法吗?

2019 年 6 月 4 日编辑:

我最终编写了一个脚本,允许我手动分配每个角。我能够成功获得相机失真模型。我仍然没有解决为什么openCV无法自动找到角落的解决方案。我想如果我要在 IR 中再次执行此操作,我会制作一个自定义网格,这会增加网格单元之间的对比度,这仅仅是因为“白色”和“黑色”网格单元之间的热特性不同(使用不同的材料)。

【问题讨论】:

尝试增加对比度 我尝试了几种阈值技术,但均未成功。我尝试使用自适应高斯方法进行二进制阈值处理,并尝试使用 otsu 方法进行二进制阈值处理。我在高斯方法中使用了参数,但找不到真正有效的方法。我还尝试在某个最小值最大值之间裁剪数据以突出显示棋盘,但还是没有运气。 这里的对比度还是太低了。 > 该函数需要在板子周围留有空白(如方形粗边框,越宽越好),以使检测在各种环境中更加稳健。否则,如果没有边框且背景较暗,则无法正确分割外部黑色方块,因此方块分组和排序算法失败。 我可以看到这一点,并将在以后的测试中记住这一点,但是,即使我有那个边界,显然 openCV 角点检测也很难在棋盘中找到角点。即使我手动将所有不是棋盘的东西都涂黑,大幅增加对比度,并将帧剪辑到棋盘块的数据范围,openCV 拒绝找到角落。 【参考方案1】:

我让findChessboardCorners 进行了 2 次调整。

    正如其中一个 cmets 所说,openCV 需要一个白板 在棋盘周围。为此,您可以“反转”图像, 基本上创造了相当于摄影底片的效果。 在我打电话给findChessboardCorners 之前,我做了:image_inverted = numpy.array(256 – image_original, dtype=uint8)

    调用时只使用cv2.CALIB_CB_ADAPTIVE_THREASH标志 findChessboardCornersCALIB_CB_FAST_CHECKCALIB_CB_NORMALIZE_IMAGE 标志似乎使findChessboardCorners 找不到角落。

祝你好运

【讨论】:

以上是关于OpenCV 找不到棋盘角的主要内容,如果未能解决你的问题,请参考以下文章

pkg-config 找不到 opencv

OpenCV 找不到库 [重复]

cmake 错误 - 找不到 opencv 库或头文件

为啥我在 opencv 3.0 beta 中找不到 balanceWhite?

在 iOS 中找不到 opencv 框架

安装 OpenCV 失败,因为它找不到“skbuild”