首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >OpenCV找不到棋盘角

OpenCV找不到棋盘角
EN

Stack Overflow用户
提问于 2019-05-29 21:08:40
回答 1查看 4.7K关注 0票数 3

我正在与一个红外相机工作,并试图找出我们是否有任何镜头畸变。我正在使用OpenCV 这里的示例来指导我的工作。我使用了一个来自这里的棋盘模板,并把它附在一本书的后面。在拍摄任何图片之前,我把书/纸加热,观察到棋盘图案是非常清晰的。

我拿了50帧,棋盘图案倾斜/移动,这样框架的每一部分都包含了图案的一部分。下面是我的一幅图片的例子:

我使用了下面的代码,导致对每个图像都是假的。我尝试了网格模式大小的每一个组合(5-9,5-9)。

代码语言:javascript
运行
复制
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中再次这样做,我会做一个定制的网格,仅仅因为“白色”和“黑色”网格单元之间的不同热特性(使用不同的材料),就会增加网格单元之间的对比度。

EN

回答 1

Stack Overflow用户

发布于 2020-03-10 20:40:47

我让findChessboardCorners进行了2次调整。

  1. 正如其中一条评论所述,openCV预计棋盘周围会出现一名白人棋手。要做到这一点,你可以“倒置”图像,实质上创造相当于一个摄影底片。在我打电话给findChessboardCorners之前,我打了:image_inverted = numpy.array(256 – image_original, dtype=uint8)
  2. 只在调用cv2.CALIB_CB_ADAPTIVE_THREASH时使用findChessboardCorners标志。CALIB_CB_FAST_CHECKCALIB_CB_NORMALIZE_IMAGE标志似乎使findChessboardCorners找不到角落。

祝好运

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56368537

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档