2

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

这是一个示例图像:

示例图像

4

1 回答 1

3

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

  • cv2.Canny- 使用minValmaxVal确定边缘的 Canny 边缘检测

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

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

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

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

于 2020-02-07T09:46:51.360 回答