首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将图像转换为二进制不会显示足球场的白线

将图像转换为二进制不会显示足球场的白线
EN

Stack Overflow用户
提问于 2019-09-30 01:39:15
回答 1查看 165关注 0票数 0

我的灵感来自下面的blogpost,但是我正在为第2/3步而苦苦挣扎。我想根据阈值从灰度图像创建一个二进制图像,并最终在图像上显示所有白线。我想要的输出如下所示:

首先,我想使用颜色阈值和形态学来分离足球场。

代码语言:javascript
复制
def isolate_field(img):
   hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

   # find green pitch
   light_green = np.array([40, 40, 40])
   dark_green = np.array([70, 255, 255])
   mask = cv2.inRange(hsv, light_green, dark_green)

   # removing small noises
   kernel = np.ones((5, 5), np.uint8)
   opening = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel)

   # apply mask over original frame
   return cv2.bitwise_and(frame, frame, mask=opening)

这将产生以下输出:

到目前为止,我对结果很满意,但由于阴影很大,当我对图片进行grayscale时,我正在与图像处理作斗争。因此,二值阈值是基于左上角的阳光部分,而不是足球场周围的白线。

按照tutorials上的方法,我得到了以下简单阈值的输出:

和自适应阈值:

最后,Otsu的阈值:

如何确保白线变得更明显?我正在考虑裁剪框架,所以我只看到了字段,然后使用基于白色的蒙版。不幸的是,这并没有成功。

非常感谢你的帮助,

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-30 15:26:50

您可以修改inRange以排除饱和色(即绿色)。我没有你的原始图像,所以我使用了你的中间结果:

inRange的结果是您想要的二进制图像。我希望你能用原始图像达到更好的效果。我在图像中使用了this script -这使得搜索好的HSV值变得很容易。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58157667

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档