Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Pythoncv2.校准points抛出错误: objectPoints应该包含Point3f类型点的向量

Pythoncv2.校准points抛出错误: objectPoints应该包含Point3f类型点的向量
EN

Stack Overflow用户
提问于 2018-03-04 12:43:13
回答 3查看 8.3K关注 0票数 6

我有密码

代码语言:javascript
运行
AI代码解释
复制
img = cv2.imread("poolPictures\chessboard3.jpg", cv2.IMREAD_COLOR)
chessboardImage = cv2.imread("poolPictures\chessboardActual.jpg", cv2.IMREAD_COLOR)

ret, corners = cv2.findChessboardCorners(img, (9,6), None)
cv2.drawChessboardCorners(img, (9,6), corners, ret)

chessRet, chessCorners = cv2.findChessboardCorners(chessboardImage, (9,6), None)
ret, matrix, dist, rvecs, tvecs = cv2.calibrateCamera(corners, chessCorners, chessboardImage.shape[::-1][1:3], None, None)`

运行代码会引发错误:

ret, matrix, dist, rvecs, tvecs = cv2.calibrateCamera(corners, chessCorners, chessboardImage.shape[::-1][1:3], None, None) cv2.error: C:\projects\opencv-python\opencv\modules\calib3d\src\calibration.cpp:3110: error: (-210) objectPoints should contain vector of vectors of points of type Point3f in function cv::collectCalibrationData

棋盘3.jpg:

chessboardActual.jpg:

棋盘抽签结果:

通过引入虚拟的第三维空间,我尝试将对象点转换为三维矢量而不是2--我找不到Point3f()的python版本。

我还从这里看到了https://github.com/opencv/opencv/issues/6002,有时这个错误可能会产生误导,而真正的问题是imagePoints中的一个向量是空的--我尝试过打印向量,但没有一个是空的。

希望有人能帮忙,可能只是拍更多的照片.

干杯,

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-03-08 04:10:05

正如Zenith042所指出的,我的图像点和对象点都是错误的。但是,主要的问题是,对于我的图像点来说,不是一个numpy数组,比如:

代码语言:javascript
运行
AI代码解释
复制
[[[ 137.5  205. ]]
[[ 143.5  206.5]]
 .
 .
 .
[[ 137.5  209.5]]]

相反,我需要:

代码语言:javascript
运行
AI代码解释
复制
[[ 137.5 205. ]
[ 143.5 206.5]
.
.
.
[ 137.5 209.5]]]

我做到了以下几点:

代码语言:javascript
运行
AI代码解释
复制
ret, corners = cv2.findChessboardCorners(img, (9,6), None)
corners = np.array([[corner for [corner] in corners]])

尽管我怀疑numpy.reshape有一种更好的方法。

对于对象点,我也需要相同的结构,即

代码语言:javascript
运行
AI代码解释
复制
objp = np.array([objp])
票数 4
EN

Stack Overflow用户

发布于 2019-09-26 04:22:24

OpenCV还要求浮点数具有单精度,如问题所示。

这意味着在传递到np.float32之前,每个数组都需要转换为calibrateCamera

票数 3
EN

Stack Overflow用户

发布于 2018-03-04 13:04:18

您可以使用以下方法创建虚拟objPoints

代码语言:javascript
运行
AI代码解释
复制
>>> objp = np.zeros((6*9, 3), np.float32)
>>> objp[:,:2] = np.mgrid[0:9, 0:6].T.reshape(-1,2)
>>> objp
array([[ 0.,  0.,  0.],
   [ 1.,  0.,  0.],
   [ 2.,  0.,  0.],
   [ 3.,  0.,  0.],
   [ 4.,  0.,  0.],
   [ 5.,  0.,  0.],
   [ 6.,  0.,  0.],
   [ 7.,  0.,  0.],
   [ 8.,  0.,  0.],
   [ 0.,  1.,  0.],
   [ 1.,  1.,  0.],
   [ 2.,  1.,  0.],
   [ 3.,  1.,  0.],
   [ 4.,  1.,  0.],
   [ 5.,  1.,  0.],
   [ 6.,  1.,  0.],
   [ 7.,  1.,  0.],
   [ 8.,  1.,  0.],
   [ 0.,  2.,  0.],
   [ 1.,  2.,  0.],
   [ 2.,  2.,  0.],
   [ 3.,  2.,  0.],
   [ 4.,  2.,  0.],
   [ 5.,  2.,  0.],
   [ 6.,  2.,  0.],
   [ 7.,  2.,  0.],
   [ 8.,  2.,  0.],
   [ 0.,  3.,  0.],
   [ 1.,  3.,  0.],
   [ 2.,  3.,  0.],
   [ 3.,  3.,  0.],
   [ 4.,  3.,  0.],
   [ 5.,  3.,  0.],
   [ 6.,  3.,  0.],
   [ 7.,  3.,  0.],
   [ 8.,  3.,  0.],
   [ 0.,  4.,  0.],
   [ 1.,  4.,  0.],
   [ 2.,  4.,  0.],
   [ 3.,  4.,  0.],
   [ 4.,  4.,  0.],
   [ 5.,  4.,  0.],
   [ 6.,  4.,  0.],
   [ 7.,  4.,  0.],
   [ 8.,  4.,  0.],
   [ 0.,  5.,  0.],
   [ 1.,  5.,  0.],
   [ 2.,  5.,  0.],
   [ 3.,  5.,  0.],
   [ 4.,  5.,  0.],
   [ 5.,  5.,  0.],
   [ 6.,  5.,  0.],
   [ 7.,  5.,  0.],
   [ 8.,  5.,  0.]], dtype=float32)

然后你可以打电话给

代码语言:javascript
运行
AI代码解释
复制
ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objp, corners, img.shape[::-1],None,None)

您不需要实际为calibrateCamera提供“实际的”棋盘图像。

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

https://stackoverflow.com/questions/49100256

复制
相关文章
OpenCV相机标定全过程
第一个参数是输入的棋盘格图像(可以是8位单通道或三通道图像); 第二个参数是棋盘格内部的角点的行列数(注意:不是棋盘格的行列数,如棋盘格的行列数分别为4、8,而内部角点的行列数分别是3、7,因此这里应该指定为cv::Size(3, 7)); 第三个参数是检测到的棋盘格角点,类型为std::vectorcv::Point2f。 第四个参数flag,用于指定在检测棋盘格角点的过程中所应用的一种或多种过滤方法,可以使用下面的一种或多种,如果都是用则使用OR: cv::CALIB_CB_ADAPTIVE_THRESH:使用自适应阈值将图像转化成二值图像 cv::CALIB_CB_NORMALIZE_IMAGE:归一化图像灰度系数(用直方图均衡化或者自适应阈值) cv::CALIB_CB_FILTER_QUADS:在轮廓提取阶段,使用附加条件排除错误的假设 cv::CALIB_CV_FAST_CHECK:快速检测
全栈程序员站长
2022/08/24
2.5K0
OpenCV相机标定全过程
张正友相机标定Opencv实现以及标定流程&&标定结果评价&&图像矫正流程解析(附标定程序和棋盘图)
使用Opencv实现张正友法相机标定之前,有几个问题事先要确认一下,那就是相机为什么需要标定,标定需要的输入和输出分别是哪些?
用户1148525
2019/05/29
6.5K0
张正友相机标定Opencv实现以及标定流程&&标定结果评价&&图像矫正流程解析(附标定程序和棋盘图)
我是这样搞定第一次单目相机测距的
之前在做一个单目测距的小项目,大概需要就是用单目相机,对一个特定的目标进行识别并测算相机与该目标的距离。所以便去网上找了一堆教程,这里给大家总结一下,希望给小白们一个参考。
周旋
2020/06/04
6.5K3
我是这样搞定第一次单目相机测距的
应该抛出什么异常?不应该抛出什么异常?(.NET/C#)
2018-02-04 13:25
walterlv
2018/09/18
1.7K0
OpenCV相机标定与畸变校正
在图像测量过程以及机器视觉应用中,为确定空间物体表面某点的三维几何位置与其在图像中对应点之间的相互关系,必须建立相机成像的几何模型,这些几何模型参数就是相机参数。在大多数条件下这些参数必须通过实验与计算才能得到,这个求解参数的过程就称之为相机标定(或摄像机标定)。相机标定常见的分为:
OpenCV学堂
2019/09/29
3.2K0
ArUco与OpenCV
        ArUco标记可以用于增强现实、相机姿势估计和相机校准等应用场景,具体如无人机的自主降落地标、机器人定位。标记中白色部分为唯一标识的二进制编码。
小锋学长生活大爆炸
2022/05/09
1.2K0
ArUco与OpenCV
opencv相机标定示例代码
https://blog.csdn.net/dcrmg/article/details/52939318
用户1148525
2019/05/27
1.9K0
你应该知道的7 个 JavaScript 原生错误类型
我们有一个数组,带有两个元素的 arr。接下来,尝试将数组扩展为包含 90**99 == 2.9512665430652753e+193 个元素。
疯狂的技术宅
2020/03/13
2.8K0
高翔Slambook第七讲代码解读(3d-2d位姿估计)
上回咱们读完了pose_estimation_2d2d.cpp这个文件,基本上明白了通过对极几何计算相机位姿变换的过程,简单地说就是:你给我两帧图像,我给你算个R、t。
小白学视觉
2019/10/24
1.7K0
海康相机SDK联合c++标定
本文出处:https://blog.csdn.net/qq_15029743/article/details/81133443
vv彭
2020/10/27
1.5K0
海康相机SDK联合c++标定
使用计算机视觉实战项目精通 OpenCV:1~5
本章将向您展示如何为 Android 智能手机和平板电脑编写一些图像处理过滤器,该过滤器首先针对台式机(使用 C/C++)编写,然后移植到 Android(使用相同的 C/C++ 代码,但使用 Java GUI), 这是为移动设备开发时的推荐方案。 本章将涵盖:
ApacheCN_飞龙
2023/04/27
2.3K0
R语言的数据结构(包含向量和向量化详细解释)
个人理解,向量是有方向的,由大于等于2个元素构成的数据类型。也就是说,向量的所有元素必须属于同种模式(mode),或数据类型(见1.2),比如数值型,字符型等。其类型可以用typeof()查看。 标量只含有一个元素,在R中没有0维度或标量类型。单独的数字或字符串本质是一元向量。
Y大宽
2020/01/02
7.2K0
视觉里程计原理_视觉定位和里程计辅助定位
路标节点:也就是观测方程【数学形式下见】的观测值,也就是特征点的像素坐标[u,v],或者该帧相机坐标系下的3d坐标[x,y,z];
全栈程序员站长
2022/09/20
7410
BSC币安链智能合约系统开发搭建技术(参照)
Asch中有三种类型的网络:localnet、testnet和mainnet。最后两个是在线发布的,可以通过公共网络访问。第一种localnet在本地运行,只有一个节点的私有链,主要是为了方便本地测试和开发。Dapp的开发还涉及这三个网络,即
开发v_StPv888
2022/10/28
6700
OpenCV2 计算机视觉应用编程秘籍:6~10
滤波是信号和图像处理的基本任务之一。 它是一个过程,旨在有选择地提取图像的某些方面,这些方面被认为在给定应用的上下文中传达了重要信息。 过滤可以消除图像中的噪点,提取有趣的视觉特征,允许图像重采样等。 它起源于一般的信号和系统理论。 在此我们将不详细介绍该理论。 但是,本章将介绍一些与过滤有关的重要概念,并说明如何在图像处理应用中使用过滤器。 但首先,让我们先简要介绍一下频域分析的概念。
ApacheCN_飞龙
2023/04/27
1.2K0
【说站】python抛出raise异常的注意点
1、系统的自带的异常只要触发会自动抛出,但用户自定义的异常需要用户自己决定什么时候抛出。
很酷的站长
2022/11/23
4210
如何找到抛出ORA-00933错误的SQL
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
bisal
2019/11/20
2.6K0
如何找到抛出ORA-00933错误的SQL
关于MySQL连接抛出Authentication Failed错误分析
    1.只有用Connector/NET 出现这个问题, 用JDBC驱动没有类似问题。     2.多台应用服务器,只有一台报这个错,因此可以排除服务器端的问题。     3.问题非常随机,重启一下服务器/IIS,就能临时解决问题。     4.有一些场景应用服务器CPU并不是很高,也会偶尔抛出这个错来。
星哥玩云
2022/08/17
1.2K0
关于MySQL连接抛出Authentication Failed错误分析
点击加载更多

相似问题

Python OpenCV calibrateCamera: objectPoints应该包含Point3f类型的向量向量

18

OpenCV错误:不支持的格式或格式的组合(Point3f类型的向量向量)

11

向量向量中Point3f的极大值

34

主方法中包含类对象抛出错误的向量

12

根据包含的类型检索向量的向量

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档