From 4c94f061e0dc78f7e403318dbb3418926fc4625d Mon Sep 17 00:00:00 2001 From: Kirillov Alexander Date: Wed, 15 Jan 2014 22:44:33 +0400 Subject: [PATCH] Add webcam example --- samples/webcam.go | 70 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 samples/webcam.go diff --git a/samples/webcam.go b/samples/webcam.go new file mode 100644 index 0000000..f404412 --- /dev/null +++ b/samples/webcam.go @@ -0,0 +1,70 @@ +package main + +import ( + "fmt" + "os" + //"path" + //"runtime" + + //"github.com/lazywei/go-opencv/opencv" + "../opencv" // can be used in forks, comment in real application +) + +func main() { + win := opencv.NewWindow("Go-OpenCV Webcam") + defer win.Destroy() + + cap := opencv.NewCameraCapture(0) + if cap == nil { + panic("can not open camera") + } + defer cap.Release() + + win.CreateTrackbar("Thresh", 1, 100, func(pos int, param ...interface{}) { + for { + if cap.GrabFrame() { + img := cap.RetrieveFrame(1) + if img != nil { + ProcessImage(img, win, pos) + } else { + fmt.Println("Image ins nil") + } + } + + if key := opencv.WaitKey(10); key == 27 { + os.Exit(0) + } + } + }) + opencv.WaitKey(0) +} + +func ProcessImage(img *opencv.IplImage, win *opencv.Window, pos int) error { + w := img.Width() + h := img.Height() + + // Create the output image + cedge := opencv.CreateImage(w, h, opencv.IPL_DEPTH_8U, 3) + defer cedge.Release() + + // Convert to grayscale + gray := opencv.CreateImage(w, h, opencv.IPL_DEPTH_8U, 1) + edge := opencv.CreateImage(w, h, opencv.IPL_DEPTH_8U, 1) + defer gray.Release() + defer edge.Release() + + opencv.CvtColor(img, gray, opencv.CV_BGR2GRAY) + + opencv.Smooth(gray, edge, opencv.CV_BLUR, 3, 3, 0, 0) + opencv.Not(gray, edge) + + // Run the edge detector on grayscale + opencv.Canny(gray, edge, float64(pos), float64(pos*3), 3) + + opencv.Zero(cedge) + // copy edge points + opencv.Copy(img, cedge, edge) + + win.ShowImage(cedge) + return nil +}