【问题标题】:Why isn't my pink color mask returning a continuous shape为什么我的粉红色面具没有恢复连续形状
【发布时间】:2021-11-28 03:21:19
【问题描述】:

我正在尝试使用带有前置摄像头的无人机创建线路跟踪程序。我知道这可能有点困难,因为相机没有朝下并且会拾取环境。我需要它面向前方进行人脸识别算法。所以我选择让这条线变成粉红色。我在这个网站上找到了一些颜色过滤的参数。我以为他们会过度补偿颜色范围,但胶带并没有显示在整张纸上,而是显示在胶带内的大量盒子中。

def pinkThreshold(image):
    copy = image.copy()
    copy = cv2.cvtColor(copy,cv2.COLOR_RGB2HSV)
    lower_pink = np.array([125,30,100])
    upper_pink = np.array([225,255,255])
    pinkImage = cv2.inRange(copy, lower_pink, upper_pink)
    edges = cv2.Canny(pinkImage,240,255)
    return edges

我得到的图像是这样的: 我认为这可能与相机返回红色方块有关,但我不完全确定我应该怎么做,如果这甚至是问题。红色图案区域似乎与我所看到的一样,但我并不完全确定。如果这是真的,那么什么是粉红色和红色的好滤色器?另外,是否可以通过在要跟踪的线路上方安装一个大型泛光灯来解决这个问题?

相机连接到 DJI Tello 无人机。我无法更换设备。

【问题讨论】:

  • 输入图像的色彩保真度很差,可能是因为光照条件差。如果放大,您会在粉红色区域看到黄色、橙色、红色甚至紫色的斑块。这会导致您的颜色检测失败。您可以先对图像应用强烈的模糊,但我不知道这是否足够。更好的照明绝对是一种解决方案。
  • 我确实找到了一些更好的照明,这确实有帮助。我有点担心在整个空间中获得足够强的照明以供后续行使用。看来我需要一个灯泡直接覆盖所有磁带。 HSV 中红色的颜色频率是多少?将其包含在轮廓中可能不会有什么坏处。或者黄色可能是一种更好的颜色,因为它不是粉红色或橙色这样的复合颜色?
  • Hsv 色调是圆形的,因此您可能需要有 2 个范围,一个在 0 左右,一个在 360° 左右(opencv 中的值为 180)。请参阅stackoverflow.com/a/29162813/2393191,了解如何移动色调以使其围绕一个目标值居中,这使得设置范围更容易(但总体上可能更昂贵)。
  • 在应用canny之前检查inRange结果,以便调试。

标签: python opencv image-processing


【解决方案1】:

我认为这可能与相机返回红色方块有关,但我不完全确定我应该怎么做,如果这甚至是问题。

让我们调整对比度并使用颜色替换来看看实际问题:

如您所见,颜色噪点很大。如果您尝试进行基于颜色的分割或尝试通过针对任何特定颜色应用任何其他“颜色敏感逻辑”,您将看到噪声被拾取:

您始终可以改善照明条件并扩展您定义的范围,但还有另一种方法:您可以使用多种颜色来找到您需要的实际形状,您可以使用阈值来增强某些特定区域等等:

长话短说:

  • 改善闪电条件
  • AND/OR 使用更广泛的颜色范围进行一些特定的预处理,以正确处理图片的噪点和整体质量

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多