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

我正在尝试检测带有各种颜色复选标记的圆圈。我要检测的是带有白色复选标记的黄色,以及将来带有 x 标记的红色圆圈。

http://img1.mukewang.com/637e10e700017fb406591172.jpg

到目前为止我一直在尝试的是下面的这些代码。这一个使用 Hough Circles 方法。


package main


import (

    "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

        }

    }

}


通过一些调整,我设法检测到一些像这样的更大的圆圈。

http://img.mukewang.com/637e10f60001316a06470642.jpg

慕姐8265434
浏览 102回答 1
1回答

翻阅古今

所以我所做的是安装另一个由 vcaesar 称为gcv的库。有一个名为 FindAllImg 的方法,我只需要提供两张图片,一张是源图片,在我的例子中是截图,另一张是需要在截图中搜索的模板图片。
打开App,查看更多内容
随时随地看视频慕课网APP