使用 OpenCV 进行相机校准 - 如何调整棋盘方块大小?

2024-05-24

我正在使用 OpenCV/Python 示例开发相机校准程序(来自:OpenCV 教程 http://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_calib3d/py_calibration/py_calibration.html)作为指南。

问题:如何定制此示例代码以适应特定棋盘图案上正方形的大小?我对相机校准过程的理解是,必须以某种方式使用此信息,否则将使用以下给出的值:

cv2.calibrateCamera()

将会是不正确的。

这是我的代码部分,它读取图像文件并运行校准过程以生成相机矩阵和其他值。

#import cv2
#import numpy as np
#import glob

"""
Corner Finding
"""
# termination criteria 
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001)

# Prepare object points, like (0,0,0), (1,0,0), ....,(6,5,0)
objp = np.zeros((5*5,3), np.float32)
objp[:,:2] = np.mgrid[0:5,0:5].T.reshape(-1,2)

# Arrays to store object points and image points from all images
objpoints = []
imgpoints = []

counting = 0

# Import Images
images = glob.glob('dir/sub dir/Images/*')

for fname in images:

    img = cv2.imread(fname)     # Read images
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)    # Convert to grayscale



    # Find the chess board corners
    ret, corners = cv2.findChessboardCorners(gray, (5,5), None)

    # if found, add object points, image points (after refining them)
    if ret == True:
        objpoints.append(objp)

        cv2.cornerSubPix(gray, corners, (11,11), (-1,-1), criteria)
        imgpoints.append(corners)

        #Draw and display corners
        cv2.drawChessboardCorners(img, (5,5), corners, ret)
        counting += 1

        print str(counting) + ' Viable Image(s)'

        cv2.imshow('img', img)
        cv2.waitKey(500)

cv2.destroyAllWindows()        


# Calibrate Camera    
ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints, gray.shape[::-1],None,None)    

在这里,如果您的正方形尺寸假设为 30 毫米,则将该值乘以objp[:,:2]。像这样

objp[:,:2] = np.mgrid[0:9,0:6].T.reshape(-1,2)*30   # 30 mm size of square

As objp[:,:2]是一组棋盘角点,给出为 (0,0),(0,1), (0,2) ....(8,5)。 (0,0) 点是左上角,(8,5) 是右下角。在这种情况下,这些点没有单位,但如果我们将这些值乘以正方形大小(例如 30 毫米),那么这些值将变为 (0,0),(0,30), .....(240,150)是现实世界的单位。你的翻译向量将在mm units在这种情况下。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 OpenCV 进行相机校准 - 如何调整棋盘方块大小? 的相关文章

随机推荐

  • 如何在 Symfony 2.1 中使用 ChoiceList?

    我有一个包含美国各州列表的文件 Alabama Alaska etc 在 symfony 2 0 中 我使用 ChoiceListInterface php 在我的表单中使用它 我简单地写了这个
  • MS Office 使用 WebDAV 以只读方式打开文档

    我们实现了自己的 WebDAV 服务器 某些使用 Office Word Excel 的用户以只读方式打开文档 对于有问题的计算机 接下来的查询是 OPTIONS http pastie org 10957339 http pastie o
  • addToBackStack 之后的 popBackStack() 不起作用

    我的项目包含两个片段 FragmentA 应用启动时默认加载的fragment FragmentB 替换fragmentA当单击按钮完成时 这是我的主视图的 XML
  • 为什么我不能“string”.print()?

    我的理解print 在 Python 和 Ruby 以及其他语言 中 它是字符串 或其他类型 上的方法 因为它的语法非常常用 打印 嗨 works 那么为什么不呢 hi print 在 Python 中或 hi print在红宝石工作 当你
  • 检测计算机是否可以正确支持 3D 变换

    当我检测到 webkit 时 我使用 3D Transforms 属性添加额外的样式表 尽管它在许多不同的计算机上运行良好 全部使用相同的 chrome 版本 有些无法正确渲染动画 这些是较旧的计算机 具有更便宜的显卡 我猜这就是导致问题的
  • 在 Spring 云中保护 Eureka

    我很好奇有哪些选项可以保护连接 注册和获取迪斯科信息 到尤里卡的服务 显然我想在 Eureka 中打开安全性并指定服务的用户名密码 我的一个问题是尝试连接到尤里卡的服务如何指定其凭据 是通过区域的规范吗 这个引用的格式是什么 我实际上是上述
  • Chrome 模拟设备的 OnePlus 3 和 OnePlus 5 视口尺寸

    我想将 OnePlus 3 和 OnePlus 5 作为自定义设备添加到 Google Chrome 的模拟设备列表中 请提供视口大小 以便我可以用它来测试我的网站 像素 2 显示尺寸示例 提前致谢 我正在寻找同样的东西 我发现了这个 ht
  • (Django) AJAX 请求的 CSRF 验证在 Chrome 中工作,但在 Firefox 中不起作用

    正如标题所述 我的 Django CSRF 验证在 Chrome 中有效 但在 Firefox 中无效 我想知道原因 以便解决此问题 我已将此包含在head我的标签基本 html我的应用程序中的所有其他文件都从中扩展的文件 base htm
  • Windows 服务在程序集加载时锁定

    我有一个用 C 编写的 Windows 服务 它还包括一个独立的控制台模式 用于调试目的 它在几乎每台运行它的计算机上都运行良好 但我们遇到了一种情况 当您尝试启动该服务时 它会锁定 然后由于超时而被终止 但是当在同一台机器上以控制台模式运
  • 使用 Mongoose 在 JSLint 中抑制“需要一个标识符,而是看到“默认”(保留字)”

    我在用着jshint验证我的 JavaScript 文件 在服务器端 我使用 Node js 和 Mongoose 在 Mongoose 中 我被鼓励以如下方式编写模式 var UserSchema new mongoose Schema
  • 如何在Windows命令行中执行for循环?

    我想知道这是否可能 我不熟悉使用 Windows 命令行 但我必须将它用于我正在处理的项目 我有许多文件 我需要为每个文件执行一个功能 我习惯使用 python 但显然这有点不同 所以我希望得到一些帮助 基本上 我需要 for 循环来迭代文
  • 如何阻止地址自动填充谷歌地点

    所以我在我的表单上有一个谷歌地图自动完成功能 当它到达一个位置时 它会占据该位置并格式化它 以便所有正确的信息都进入表单上的不同输入 我遇到的问题是在 place changed 事件触发自动完成填充输入之前 我想阻止最初的人口 而是填充我
  • 如何在 .Net Core 3、Visual Studio 2019 和 docker 中使用“dotnet watch run”

    我正在使用 Visual Studio 2019 来使用 docker 和 NET Core 3 我通过将 Dockerfile 添加到我的项目 右键单击项目 gt 添加 gt Docker 支持 来容器化我的应用程序 并且我能够启动它 但
  • 使用Python进行图像识别[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个想法 就是我想识别图像中的字母 可能是 bmp或 jpg 例如 这是一个包含字母 S 的 bmp 图像 我想做的是使用Pyth
  • 模板、decltype 和非类类型

    我有一个像这样的函数定义 template
  • Java byte[] 与 String 之间的转换

    为什么这个junit测试失败了 import org junit Assert import org junit Test import java io UnsupportedEncodingException public class T
  • 引发一系列事件 Backbone event:name

    extend object Backbone Events object on myalert one function msg document body innerHTML eve1 msg msg name this name con
  • 如何使用AVAssetWriter将h264流写入视频?

    我想将 h 264 流从服务器传输到视频文件 但是当我使用assetwrite finishwrite XCode 报告 Video var mobile Applications DE4196F1 BB77 4B7D 8C20 7A5D6
  • 获取TextView的高度

    我有一些文字将被放入TextView 我这样做是使用setText 现在我需要找到文本在文本中占据的行数或高度TextView 我尝试使用getHeight 但它总是返回 0 无论如何 有没有办法获得文本中存在的文本的高度TextView
  • 使用 OpenCV 进行相机校准 - 如何调整棋盘方块大小?

    我正在使用 OpenCV Python 示例开发相机校准程序 来自 OpenCV 教程 http opencv python tutroals readthedocs io en latest py tutorials py calib3d