func run() { imageName := flag.String("image", "", "Use a static image instead of loading from a webcam") flag.Parse() cv.NamedWindow(windowName, cv.WINDOW_AUTOSIZE) if *imageName != "" { img, err := cv.LoadImage(*imageName, 1) if err != nil { fmt.Println(err) os.Exit(1) } defer img.Release() rects := findRectangles(img) drawRectangles(img, rects) cv.WaitKey(time.Duration(0)) } else { capture, err := cv.CaptureFromCAM(0) if err != nil { fmt.Println(err) os.Exit(1) } for { img, err := capture.QueryFrame() if err != nil { fmt.Println(err) os.Exit(1) } img0 := img.Clone() rects := findRectangles(img0) drawRectangles(img0, rects) if key := cv.WaitKey(time.Duration(10*time.Millisecond)) & 0x7f; key == 'q' { break } img0.Release() //img.Release() } capture.Release() } os.Exit(0) }
func run() { // Create windows cv.NamedWindow(inputWindowName, cv.WINDOW_AUTOSIZE) cv.NamedWindow(outputWindowName, cv.WINDOW_AUTOSIZE) // Set up camera capture, err := NewAxisCamera(axisHost, axisUsername, axisPassword) if err != nil { fmt.Fprintln(os.Stderr, "failed to start capture") os.Exit(1) } for { // Get a frame img, err := capture.QueryFrame() if err != nil { fmt.Fprintln(os.Stderr, "failed to query frame") os.Exit(1) } // Process image out, rects := processImage(img) // Display images drawRectangles(inputWindowName, img, rects) cv.ShowImage(outputWindowName, out) out.Release() // Wait for input key := cv.WaitKey(10 * time.Millisecond) if key == 'q' { break } } os.Exit(0) }