登录
首页 >  Golang >  Go问答

HSV 值的自动识别

来源:stackoverflow

时间:2024-03-06 20:21:26 184浏览 收藏

珍惜时间,勤奋学习!今天给大家带来《HSV 值的自动识别》,正文内容主要涉及到等等,如果你正在学习Golang,或者是对Golang有疑问,欢迎大家关注我!后面我会持续更新相关内容的,希望都能帮到正在学习的大家!

问题内容

我遇到了这个堆栈溢出问题来识别棋盘游戏的各个部分及其位置(以及骰子位置等)。

我很感兴趣,所以使用他们提供的图片,我玩了 opencv 并调整了 hsv 值等,直到找到每种颜色的所有玩家棋子 - 以及它们所在的位置(三角形)。我得到了这个工作。但显然这仅适用于该特定板上的一组特定颜色。

如果我们知道我们正在寻找大量两种不同颜色的圆形游戏块以及它们所在的三角形,即 3 条边和圆形的多边形,您会推荐什么方法,以便用户不必调整 hsv 值来解决问题(首先要说的是“一定”的准确度,而不是 100% 完美)。

我从用户体验的角度思考,我认为你不能要求普通人摆弄 h、s 和 v,直到一切都设置完毕,因此自动检测它似乎在某种程度上是必要的...... p>

我认为可以要求用户根据已知的设置(例如板的启动设置或其他设置)进行校准,并询问他们是否正确 - 或者单击已错过的区域或其他内容。 顺便说一句,我使用 gocv 来实现,但通常它是 opencv 的一个端口。但是,为了测试这一点,我相信我无法直接在点击下访问颜色,因此我研究使用 selectroi 来获取点击下的颜色

selected := gamewindow.selectroi(originalimage)
    x := (selected.max.x + selected.min.x)/2
    y := (selected.max.y + selected.min.y)/2
    fmt.println("x", x, "y", y)
    colorat := selected.rgba64at(x, y)
    //r, g, b, _ := colorat.
    r := colorat.r
    g := colorat.g
    b := colorat.b
    fmt.println("color is ", colorat, r, g, b, " hsv", coco.rgb2hsv(float64(r), float64(g), float64(b)))

但据我所知,这会返回垃圾:

x 309 y 187
color is  {65535 65535 65535 65535} 65535 65535 65535  HSV [0 0 25700]

关于我如何解决这个问题还有其他建议吗?

另一个问题 - 当颜色是闪亮/白色/黑色并且它们与背景仅略有不同时,是否有“技巧”来强制更多区分或使它们更加哑光或更容易检测它们并将它们分开? p>

所以...

  1. 如果我知道校准配置,我可以根据一组规则自动检测吗?
  2. 我可以直接从图像中制作/使用颜色选择器
  3. 我可以分离出某种类似的亮/白/黑颜色吗?

正确答案


为了您的目的,我向您推荐 MatchTemplate functionopencv documentation 对此进行了更好的解释,甚至还有一个演示如何识别游戏片段。

理论要掌握,实操不能落!以上关于《HSV 值的自动识别》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>