【发布时间】:2021-05-16 18:06:30
【问题描述】:
我有想要检测的 GUI 元素,背景颜色变化很大,我在检测菱形轮廓时遇到问题。
原图:
到目前为止我有什么:
我通过简单的 bgr 到灰度转换得到这张图片,模糊然后使用这段代码应用高斯自适应阈值:
crop_img = img.copy()
crop_gray = cv2.cvtColor(crop_img, cv2.COLOR_BGR2GRAY)
blurred = cv2.blur(crop_gray, (5, 5), 0)
thresh = cv2.adaptiveThreshold(blurred, 255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 21, 4)
我想要的结果是像这样定位图标框架:
我已经尝试过使用一些形态变换组合的不同技术,但我在图像处理方面缺乏经验,这让我很难弄清楚这一点。
编辑:添加原始图像
【问题讨论】:
-
似乎可以改进预处理链。能发一下原图吗?
-
当然。 Image link.
-
我会推荐
cv2.inRange()方法来过滤掉特定范围内菱形物体的颜色,而不是自适应阈值。 -
我也确实尝试过,但是由于图标的亮度和颜色会发生变化,除了迭代它们之外,很难找到一个合理的颜色范围来掩盖。 @ZdaR例如,如果我想掩盖底部图标的紫色,您可以建议什么范围?谢谢
-
您可以尝试掩盖菱形周围的黑色边框,而不是掩盖紫色。它在所有 4 颗钻石中都是一致的。我尝试使用 (0, 0, 0), (15, 15, 15) BGR 范围,它成功检测到前 2 颗钻石,同时部分检测到底部 2 颗钻石,您可以稍微玩一下这个颜色范围,也可以使用 HSV 颜色范围而不是 BGR
标签: python opencv image-processing opencv-python