我正在使用红外摄像机,试图找出我们是否有镜头畸变。我正在使用来自OpenCV here的示例来指导我的工作。我使用了here中的棋盘模板,并将其附加到书的背面。在拍摄任何图像之前,我先加热了书本/纸张,并观察到棋盘图案非常清晰。
我拍摄了约50个静止的框架,棋the图案倾斜/移动,因此框架的每个部分都包含图案的某些部分。我的一张图片的示例如下:
我使用了以下代码,每个图像均导致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提高对比度和亮度,以产生以下图像作为示例。
这也失败。如果我使用cv2.goodFeaturesToTrack来查找角点,则会得到以下结果:
似乎Opencv拐角检测算法正在积极地避免我的棋盘拐角。在棋盘上找到一个角之前,它将找到任何可能的角。我真的很为难。
作为一个健全性检查,我确保openCV可以在我正在使用的原始棋盘上找到拐角,并且效果很好。
有什么想法吗?
答案 0 :(得分:1)
我有findChessboardCorners
进行了2次调整。
正如其中一条评论所述, openCV
在棋盘周围。为实现您可以“反转”图像,
本质上相当于照相底片。
在打电话给findChessboardCorners
之前,我做了:image_inverted =
numpy.array(256 – image_original, dtype=uint8)
在调用时仅使用cv2.CALIB_CB_ADAPTIVE_THREASH
标志
findChessboardCorners
。 CALIB_CB_FAST_CHECK
和
CALIB_CB_NORMALIZE_IMAGE
标志似乎使findChessboardCorners
找不到角落。
祝你好运