cv2.getOptimalNewCameraMatrix 在某些数据集上返回 [0,0,0,0] 的 ROI

2023-11-29

我正在使用 OpenCV 2.x 开发一个 Python 程序,下面是我的代码摘录,该代码在已捕获和保存的文件列表上运行。所有图像都是80 x 60 8 位灰度图像。我得到的最好的投资回报率是[1, 6, 73, 49]对于一台相机,但我的另一台相机获得了最佳的投资回报率[8, 9, 55, 39]。我已经在处理如此小的图像,丢弃约 50% 的像素并不是真正可行的解决方案。我只是不确定是什么原因造成的cv2.getOptimalNewCameraMatrix()返回这么小的 ROI,尤其是当我向它提供 15-40 张似乎已正确找到角点的图像时。

import numpy as np
import cv2
import glob

# termination criteria
criteria = (cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_COUNT, 100, .01)
goodImages = 0

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

# Arrays to store object points and image points from all the images.
objpoints = [] # 3d point in real world space
imgpoints = [] # 2d points in image plane.

images = glob.glob('*Left.bmp')

for fname in images:
print("Working on file: %s" % (fname))
img = cv2.imread(fname,cv2.CV_LOAD_IMAGE_COLOR)
gray = cv2.imread(fname,0)

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

# If found, add object points, image points (after refining them)
if ret == True:
    print("Found Corners for %s" % (fname))

    objpoints.append(objp)

    cv2.cornerSubPix(gray,corners,(3,3),(-1,-1),criteria)
    if corners is None:
        print("Something went wrong with cornerSubPix in file: %s" % (fname))
    else:
        imgpoints.append(corners)
        goodImages+=1

        # Draw and display the corners
        cv2.drawChessboardCorners(img, (4,3), corners,ret)
        cv2.imshow('img',img)
        cv2.waitKey(0)



if goodImages >9:           
ret, intrinsicMatrix, distortionCoeffs, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints, gray.shape[::-1],None,None)


h,  w = img.shape[:2]
refinedCameraMatrix, roi=cv2.getOptimalNewCameraMatrix(intrinsicMatrix,distortionCoeffs,(w,h),1,(w,h))

np.savez("LeftCamera", refinedCameraMatrix=refinedCameraMatrix, roi=roi, intrinsicMatrix=intrinsicMatrix, distortionCoeffs=distortionCoeffs)

样本数据集可以在以下位置下载:http://s000.tinyupload.com/?file_id=67483192025612443532

EDIT经过多次试验和错误,我发现了一个数据集,它给我带来了投资回报率[3, 4, 75, 53]所以这个问题的必要性并不迫切,但我确实觉得这个问题很有趣。当我进行实验时,我发现一个好的数据集+另一个好的图片并不总是会增加投资回报率,实际上还会降低投资回报率。这对我来说并不直观,因为更多好的数据应该会增加可用区域。


解决了。

Tl;dr:确保校准图像中的棋盘能够很好地表示边缘和角落。

由于数据仅位于中心,失真最小,因此解决方案会出现更大的误差。

这里进一步讨论。

http://answers.opencv.org/question/28438/un Distortion-at-far-edges-of-image/?answer=180493#post-id-180493

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

cv2.getOptimalNewCameraMatrix 在某些数据集上返回 [0,0,0,0] 的 ROI 的相关文章

随机推荐

  • 如何将地理点经度+纬度转换为双精度?

    我正在检索地图视图的中心 我需要将经度和纬度作为双精度传递到我的服务器以针对数据库进行测试 我如何将 mapView getMapCenter getLongitudeE6 转换为 double Calling mapView getMap
  • Angularjs对页面加载调用函数

    我在学习AngularJS 我有一些文章标签 单击按钮就会显示每个文章页面 而无需任何页面刷新 这是一页网站 我想要的是当加载文章 id showSelector 时我想调用myFunction 在这个函数中我想显示一个警报 但警报没有显示
  • 根据条件渲染 JSX 元素

    因此 我在我一直在开发的 Web 应用程序中有一个简单的组件 我想知道是否有一种方法可以根据 this props item 的值在该组件中渲染元素 这是我的 JSX var React require react var actions
  • 删除 jQuery Scrollable 插件中特定的轮播窗格

    我在用这个可滚动插件 并且正在研究如何从轮播组中删除轮播窗格 例如 如果我有 5 个轮播窗口 如何以编程方式删除轮播窗口 2 Check this 要删除特定选项卡 请使用此函数 对上面示例的方法稍加修改 function removeIt
  • 替换 ICollection 中的元素

    假设我有一个ICollection
  • -webkit-backdrop-filter 在 Safari 上不起作用

    Safari 14 1 2 不显示 webkit backdrop filter blur 10px 我尝试过多个版本 内联 使用 jQuery 使用 supports但没有任何作用 最奇怪的是 它在 Safari 的 Web Inspec
  • Android 手机方向概述(包括指南针)

    一段时间以来 我一直在尝试了解 Android 方向传感器 我以为我明白了 然后我意识到我没有 现在我想 希望 我对它有了更好的感觉 但我仍然没有100 我将尝试解释我对它的不完整的理解 如果我有部分错误或填补任何空白 希望人们能够纠正我
  • 使用 PowerShell 打开文件

    是否有命令可以从 Visual Studio 中的包管理器控制台 也称为 PowerShell 打开项目项 例如类文件 当我在解决方案资源管理器中双击该文件时 也会发生同样的情况 我尝试使用Invoke Item但这恰好打开了 Visual
  • 将轴名称添加到图表中 C#

    我正在与winforms使用 C 我使用图表 我想在代码中设置 X 轴和 Y 轴的标题 我试过 chart1 chartarea 0 axisX title xxx 但它不起作用 我不知道为什么 我正在使用网络上的图表控件 并通过以下方式设
  • 为什么Oracle监听器和数据库服务没有运行?

    我刚刚开始接触 Red Hat Linux 7 2 和 Oracle 12c 因此 我上周末致力于尝试看看是否可以在 RHEL 7 2 上支持 Oracle 12c 最后 是的 我能够在 RHEL 7 2 VM 上运行 Oracle 但并非
  • 如何使用nodejs获取mongodb单个文档的大小(以字节为单位)?

    我正在使用 db coll findOne 获取文档 我想使用仅具有 mongo 本地驱动程序的 NodeJS 获取文档的大小 以字节为单位 这可能吗 可以使用BSON 这是 mongodb 驱动程序的依赖项 var bson requir
  • 在 Os.Rename 中强制覆盖

    如果另一个文件已经存在 是否可以强制重命名 os rename 来覆盖另一个文件 例如 在下面的代码中 如果文件 Tests csv 已存在 它将被 Tests txt 文件替换 也已重命名为 Tests csv os rename C U
  • 如何将数组列表放入列表框中

    因此 我在一项作业上需要帮助 并且我已经尝试解决它一个多星期了 但我需要帮助将数组列表放入列表框中 That s what the GUI should look like in the end all the information ha
  • 从 Swing GUI 编译并运行 Java 代码

    我正在用 Java Swing 构建一个 GUI 并且必须从中执行 Java 代码 为了测试简单的代码 比如用 Java 打印 HelloWorld 就可以了 我看过论坛问题 我只知道我必须调用操作系统 我使用的是Windows7 来执行该
  • 初始化网格时,同一 DataGridView 列中的控件不呈现

    好坏 我在 DataGridView 列中托管不同的控件 当我在初始化网格的同时添加控件时 控件显示为文本框 不好 如果我在 DataGridView 初始化后添加控件 控件会正确呈现 好 public Form1 InitializeCo
  • jQuery 在 for 循环中动态增加变量名称

    是否可以将 i 添加到 for 循环内的 var 中 如果语法错误 它看起来像下面的代码 for i 1 i lt countProjects i var test i otherVar something Thanks 为此最好使用数组
  • 反射 - 获取 lambda 表达式内的方法调用列表

    我正在尝试找到一种方法来获取 C 3 5 中 lambda 表达式内的方法调用列表 例如 在下面的代码中 我想使用方法 LookAtThis Action a 来分析 lambda 表达式的内容 换句话说 我希望 LookAtThis 返回
  • 如何使用散景后端控制全息视图中的(活动)工具

    如何控制在某个环境中使用 激活哪些工具holoviews情节与bokeh后端 我见过这个答案 但仅此而已adds一个新的活跃工具 它不会阻止任何其他工具 例如平移 处于活动状态 对于一个具体的例子 假设我只想要悬停工具 我会尝试这样做 im
  • 项目的选择器不是另一个项目的后代

    给定下面的 HTML 您将如何选择所有不是 itemcontainer 后代的 name s 类似于 group header name not 源自 itemcontainer 我知道这可以通过 jQuery 或添加其他类很容易地完成 但
  • cv2.getOptimalNewCameraMatrix 在某些数据集上返回 [0,0,0,0] 的 ROI

    我正在使用 OpenCV 2 x 开发一个 Python 程序 下面是我的代码摘录 该代码在已捕获和保存的文件列表上运行 所有图像都是80 x 60 8 位灰度图像 我得到的最好的投资回报率是 1 6 73 49 对于一台相机 但我的另一台