OpenCV Thresholding自适应不同雷电条件

OpenCV Thresholding adaptive to different lightning conditions

对于一个学校项目,我试图在 Python 中编写一个程序来跟踪学生的运动。为此,我正在使用 OpenCV。 在互联网上查找一些教程后,我注意到几乎每个人都在使用阈值来实现这一点,因为几乎每一步都需要二值图像(例如 HoughCircle Transofrmation、Contours)。然而,根据我的理解,阈值对光非常敏感,因此这种方法在最佳闪电条件下只会 return 产生良好效果。 所以我的问题来了:除了对图像进行阈值处理之外,还有其他替代方法或更好的方法吗?或者我对 OpenCV 中阈值的理解首先是错误的?

这是一个示例图片:

阈值化的目的是从背景中分割出所需的对象,然后您可以在其中执行额外的处理(应用形态学操作),然后执行轮廓过滤以进一步隔离所需的对象。不是在范围为 [0...255] 的 BGR(3 通道)图像或灰度(1 通道)图像上应用图像处理技术,阈值化允许我们获得每个像素为 0 的二值图像或 1 这使得区分对象更容易。根据您的情况,获取二值图像的方法有很多种,这里介绍几种方法:

  • cv2.Canny - Canny 边缘检测,它使用 minValmaxVal 来确定边缘

  • cv2.threshold - 用户选择任意全局阈值的简单阈值

  • cv2.threshold + cv2.THRESH_OTSU - Otsu 的阈值自动计算阈值。

  • cv2.adaptiveThreshold - 图像在不同区域具有不同光照条件的自适应阈值处理。本质上,它会自动计算图像不同区域的阈值,并在具有不同光照的图像中给出更好的结果

  • cv2.inRange - 颜色分割。这个想法是使用下限和上限阈值范围来获得二值图像。尝试隔离单个颜色范围时很有用