最近我设法用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版本下为我工作,具有相同的数据集。
请帮忙!
答案 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 ++源代码以找到实际的默认值。