我正在与一个红外相机工作,并试图找出我们是否有任何镜头畸变。我正在使用OpenCV 这里的示例来指导我的工作。我使用了一个来自这里的棋盘模板,并把它附在一本书的后面。在拍摄任何图片之前,我把书/纸加热,观察到棋盘图案是非常清晰的。
我拿了50帧,棋盘图案倾斜/移动,这样框架的每一部分都包含了图案的一部分。下面是我的一幅图片的例子:

我使用了下面的代码,导致对每个图像都是假的。我尝试了网格模式大小的每一个组合(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可以找到原来的棋盘上的角,我正在使用,它工作得很好。
有什么想法吗?
编辑2019年6月4日:
最后,我编写了一个脚本,允许我手动分配每个角。我成功地获得了摄像机畸变模型。我仍然无法解决为什么openCV无法自动找到这些角落的原因。我想,如果我在IR中再次这样做,我会做一个定制的网格,仅仅因为“白色”和“黑色”网格单元之间的不同热特性(使用不同的材料),就会增加网格单元之间的对比度。
发布于 2020-03-10 20:40:47
我让findChessboardCorners进行了2次调整。
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找不到角落。祝好运
https://stackoverflow.com/questions/56368537
复制相似问题