【发布时间】: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