python - 适应不同雷电条件的OpenCV阈值

标签 python opencv image-processing computer-vision image-thresholding

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

这是一个示例图像:

example image

最佳答案

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

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

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

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

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

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

关于python - 适应不同雷电条件的OpenCV阈值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60110313/

相关文章:

python - 如何将最相似的 Unicode 字符返回到图像的一部分?

Python kwargs 从其他参数中获取值

javascript - 获取发送到 Python/Django 的 POST 请求的 None 值(通过 Axios 库)

python - PyCUDA 使用字符串但不使用字符串数组

python - python openCV中的人口普查转换

python - 重新调整视频帧之间的时间差

python - 如何删除文件夹中低像素值的图片

python - 如何通过单击python标签中的按钮开始录制

opencv - 笔划宽度使用python转换opencv

JavaFX ImagePane 调整大小质量差