OpenCV无法找到棋盘角落

时间:2019-05-29 21:08:41

标签: python opencv camera-calibration

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

我拍摄了约50个静止的框架,棋the图案倾斜/移动,因此框架的每个部分都包含图案的某些部分。我的一张图片的示例如下:

example calibration image

我使用了以下代码,每个图像均导致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日:

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

Increased Contrast

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

corners

似乎Opencv拐角检测算法正在积极地避免我的棋盘拐角。在棋盘上找到一个角之前,它将找到任何可能的角。我真的很为难。

作为一个健全性检查,我确保openCV可以在我正在使用的原始棋盘上找到拐角,并且效果很好。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我有findChessboardCorners进行了2次调整。

  1. 正如其中一条评论所述, openCV 在棋盘周围。为实现您可以“反转”图像, 本质上相当于照相底片。 在打电话给findChessboardCorners之前,我做了:image_inverted = numpy.array(256 – image_original, dtype=uint8)

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

祝你好运