OpenCV 3.1 cv2.stereoCalibrate TypeError:需要一个整数

时间:2016-10-13 22:03:31

标签: python c++ opencv opencv3.1

最近我设法用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版本下为我工作,具有相同的数据集。

请帮忙!

1 个答案:

答案 0 :(得分:0)

我已经注意到,在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 ++源代码以找到实际的默认值。