【问题标题】:How to avoid delays caused by cv2.undistort?如何避免 cv2.undistort 造成的延迟?
【发布时间】:2020-09-03 01:16:27
【问题描述】:

我在 python 中使用 OpenCV 来跟踪对象。首先,我应该校准相机,找到属性后,我应该找到对象的精确位置,它应该是实时的

我找到了这段代码

ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints, gray.shape[::-1],None,None)
.
.
.

# undistort
dst = cv2.undistort(img, mtx, dist, None, newcameramtx)

所以基于这段代码我应该不扭曲每一帧,这很耗时, 有没有办法设置相机的参数然后使用机器视觉? 还是其他方式?

【问题讨论】:

  • @Ash 谢谢你的评论,你说得对,首先我得到了ret,mtx等属性的参数并保存,然后我想做对象跟踪,所以我做cap.read( ) 并得到框架,所以在那之后,我应该不扭曲框架,对吧?我教过这条线会增加延迟,再次感谢

标签: python opencv computer-vision real-time camera-calibration


【解决方案1】:

undistort 的问题在于,它每次调用时都会重新计算从失真像素到未失真像素的映射。您只需计算一次坐标变换。您可以使用返回相应映射的cv.initUndistortRectifyMap 来计算它(请参阅此处的documentation)。然后你可以使用函数cv.remap

【讨论】:

  • 所以现在对于每一帧我应该重新映射?这是否解决了实时应用的问题?再次感谢
  • @miladzzz 从技术上讲是的,这应该是实时的。但是,您可能知道 python 通常不是实时应用程序的最佳选择,因此如果您有很多限制(例如低容量硬件等),它可能会在 C++ 中执行(例如 pytorch 有一个很好且易于使用 api)。
猜你喜欢
  • 2019-08-24
  • 2012-02-03
  • 2021-12-18
  • 1970-01-01
  • 1970-01-01
  • 2016-02-24
  • 1970-01-01
  • 1970-01-01
  • 2021-09-27
相关资源
最近更新 更多