我正在尝试检测带有各种颜色复选标记的圆圈。我要检测的是带有白色复选标记的黄色,以及将来带有 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 回答
- 0 关注
- 122 浏览
添加回答
举报
0/150
提交
取消