为了账号安全,请及时绑定邮箱和手机立即绑定

使用 GoCV 进行黄色小圆圈检测

使用 GoCV 进行黄色小圆圈检测

Go
慕姐8265434 2022-11-23 20:23:43
我正在尝试检测带有各种颜色复选标记的圆圈。我要检测的是带有白色复选标记的黄色,以及将来带有 x 标记的红色圆圈。到目前为止我一直在尝试的是下面的这些代码。这一个使用 Hough Circles 方法。package mainimport (    "fmt"    "image"    "image/color"    "os"    "gocv.io/x/gocv")func DetectCircles() {    if len(os.Args) < 2 {        fmt.Println("How to run:\n\tfind-circles [imgfile]")        return    }    filename := os.Args[1]    grey_window := gocv.NewWindow("grey window")    grey_window.MoveWindow(600, 0)    window := gocv.NewWindow("detected circles")    defer grey_window.Close()    defer window.Close()    original_img := gocv.IMRead(filename, gocv.IMReadColor)    defer original_img.Close()    img := gocv.NewMat()    defer img.Close()    gocv.CvtColor(original_img, &img, gocv.ColorBGRToGray)    gocv.MedianBlur(img, &img, 5)    circles := gocv.NewMat()    defer circles.Close()    gocv.HoughCirclesWithParams(        img,        &circles,        gocv.HoughGradient,        1, // dp        // float64(img.Rows()/8), // minDist        26,        200, // param1        48,  // param2        0,   // minRadius        0,   // maxRadius    )    green := color.RGBA{0, 255, 0, 0}    red := color.RGBA{255, 0, 0, 0}    for i := 0; i < circles.Cols(); i++ {        v := circles.GetVecfAt(0, i)        // if circles are found        if len(v) > 2 {            x := int(v[0])            y := int(v[1])            r := int(v[2])            gocv.Circle(&original_img, image.Pt(x, y), r, green, 2)            gocv.Circle(&original_img, image.Pt(x, y), 2, red, 3)        }    }    for {        window.IMShow(original_img)        if window.WaitKey(10) >= 0 {            break        }    }}通过一些调整,我设法检测到一些像这样的更大的圆圈。
查看完整描述

1 回答

?
翻阅古今

TA贡献1780条经验 获得超5个赞

所以我所做的是安装另一个由 vcaesar 称为gcv的库。有一个名为 FindAllImg 的方法,我只需要提供两张图片,一张是源图片,在我的例子中是截图,另一张是需要在截图中搜索的模板图片。



查看完整回答
反对 回复 2022-11-23
  • 1 回答
  • 0 关注
  • 100 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信