You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么粉色颜色掩码未返回连续形状?DJI Tello无人机视觉寻线问题

问题根源分析
  • HSV色彩空间参数设置错误:OpenCV中8位图像的HSV通道H分量取值范围是0180,对应色相环0°360°,你设置的upper_pink的H值为225已经超出有效范围,直接导致大量粉色像素没有被inRange命中,才会出现离散小方块的情况。且125~180的H区间本身属于紫色系,完全没有覆盖粉色的色相范围。
  • 色彩转换逻辑适配错误:DJI Tello返回的视频流默认是BGR格式,你使用COLOR_RGB2HSV做转换会导致色彩通道错位,进一步降低颜色过滤的准确率。
  • Canny边缘检测阈值设置不合理:你将Canny的双阈值设为240和255,只有极强的边缘才会被保留,本身粉色掩码就不连续,经过Canny过滤后就只剩下分散的边缘块。
  • 粉色色相区间特殊:粉色本质是低饱和度的红色,色相范围刚好落在H通道的首尾衔接区间(010和170180都属于红色/粉色系),需要做两段掩码合并才能完整覆盖。
修正后的参数与代码
import cv2
import numpy as np

def pinkThreshold(image):
    copy = image.copy()
    # 适配Tello的BGR格式图像做色彩转换
    copy = cv2.cvtColor(copy, cv2.COLOR_BGR2HSV)
    # 拆分两段色相区间覆盖所有粉色/红色范围
    lower_pink1 = np.array([170, 20, 120])
    upper_pink1 = np.array([180, 255, 255])
    lower_pink2 = np.array([0, 20, 120])
    upper_pink2 = np.array([10, 255, 255])
    mask1 = cv2.inRange(copy, lower_pink1, upper_pink1)
    mask2 = cv2.inRange(copy, lower_pink2, upper_pink2)
    pinkImage = cv2.bitwise_or(mask1, mask2)
    # 增加形态学闭运算填补掩码孔洞,让胶带区域连续
    kernel = np.ones((5,5), np.uint8)
    closed_mask = cv2.morphologyEx(pinkImage, cv2.MORPH_CLOSE, kernel, iterations=2)
    # 下调Canny阈值保证连续边缘被识别
    edges = cv2.Canny(closed_mask, 50, 150)
    return edges

参数可根据实际使用环境微调:饱和度、明度阈值的浮动范围控制在±20即可适配大多数光照场景。

补光方案有效性说明
  • 大功率泛光灯补光可以有效提升识别稳定性:固定补光可以统一胶带区域的光照强度,避免局部反光/过暗导致的像素偏离颜色阈值范围,同时可以压制背景的杂色干扰,降低颜色过滤的误判率。
  • 针对Tello的使用建议:可以将补光灯安装在无人机起降区域或寻线路径的上方,对准路径照射即可,不需要挂载在无人机上,避免增加负载影响飞行稳定性。

内容的提问来源于stack exchange,提问作者Josh Solders

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 19:54:05