OpenCV 3.1 cv2.stereoCalibrate TypeError:需要一个整数
Posted
技术标签:
【中文标题】OpenCV 3.1 cv2.stereoCalibrate TypeError:需要一个整数【英文标题】:OpenCV 3.1 cv2.stereoCalibrate TypeError: an integer is required 【发布时间】:2016-10-13 22:03:30 【问题描述】:最近我设法编译了支持 cuda 的最新 opencv 3.1。 经过一番修补后,我将大部分 python 代码从 2.4.x 正确转换为 3.1.x,没有任何问题。
但是到了尝试 stereCalibrate 功能的时候,出现了错误:
Exception in thread Thread-5:
Traceback (most recent call last):
File "/usr/lib/python2.7/threading.py", line 801, in __bootstrap_inner
self.run()
File "/usr/lib/python2.7/threading.py", line 754, in run
self.__target(*self.__args, **self.__kwargs)
File "./stereo_compute.py", line 245, in calibrate
flags)
TypeError: an integer is required
这是我如何调用函数本身:
criteria = (cv2.TERM_CRITERIA_MAX_ITER + cv2.TERM_CRITERIA_EPS,
30, 1e-56)
flags = (cv2.CALIB_FIX_ASPECT_RATIO +
cv2.CALIB_ZERO_TANGENT_DIST +
cv2.CALIB_SAME_FOCAL_LENGTH)
(value,
self.np_calib_data['lmtx'], self.np_calib_data['ldist'],
self.np_calib_data['rmtx'], self.np_calib_data['rdist'],
self.np_calib_data['R'], self.np_calib_data['T'],
self.np_calib_data['E'], self.np_calib_data['F']
) = cv2.stereoCalibrate(
object_points,
l_image_points,
r_image_points,
(image_size[1], image_size[0],),
self.np_calib_data['lmtx'],
self.np_calib_data['ldist'],
self.np_calib_data['rmtx'],
self.np_calib_data['rdist'],
self.np_calib_data['R'],
self.np_calib_data['T'],
self.np_calib_data['E'],
self.np_calib_data['F'],
flags,
criteria)
一切都在一个线程中运行,这就是它在异常中提到的原因。
我无法获得正确的参数集。
此外,在具有相同数据集的 2.4.x 版本下,该调用对我有效。
请帮忙!
【问题讨论】:
如果我没记错的话,最后两个参数(标志和条件)是在 opencv 3.1 中交换的 我知道,已经交换了它们:3.0-beta doc 计算标志后的总和(标志值)是多少? 【参考方案1】:我注意到,对于 OpenCV 的 Python 绑定,如果一个函数有一个具有默认值的参数,例如 None
,您通常不能显式地使用这个参数及其默认值。这完全违反了正常的 Python 约定和预期的行为。
例如,函数cv2.goodFeaturesToTrack
有参数blockSize
和默认值None
,所以你会期望调用
cv2.goodFeaturesToTrack(image=img, maxCorners=10, qualityLevel=0.1, minDistance=10, mask=None, blockSize=None)
将与
相同cv2.goodFeaturesToTrack(image=img, maxCorners=10, qualityLevel=0.1, minDistance=10, mask=None)
但实际上,第一种使用这个函数的方式会导致
TypeError: an integer is required
因此,对于 OpenCV,您必须要么不提供和参数,要么提供正确的值(根据 Python 函数/方法签名,默认值可能不正确)。
您必须检查 C++ 源代码才能找到实际的默认值。
【讨论】:
以上是关于OpenCV 3.1 cv2.stereoCalibrate TypeError:需要一个整数的主要内容,如果未能解决你的问题,请参考以下文章