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(img) return nil }
func ProcessbetterImage(img *opencv.IplImage, win *opencv.Window, pos int) error { _, currentfile, _, _ := runtime.Caller(0) //image := opencv.LoadImage(path.Join(path.Dir(currentfile), "../images/eye.jpg")) if counter == 1 { //find eye, cache them and then mark them counter = 0 cachedPointsCenterY = []int{} cachedPointsCenterX = []int{} if haarClassifier == nil { //load and cache haarClassifier haarClassifier = opencv.LoadHaarClassifierCascade(path.Join(path.Dir(currentfile), "/cascades/haarcascade_eye_tree_eyeglasses.xml")) } rects := haarClassifier.DetectObjects(img) for _, value := range rects { var pointRect1 = opencv.Point{value.X() + value.Width(), value.Y()} var pointRect2 = opencv.Point{value.X(), value.Y() + value.Height()} var centerPointX = int((pointRect1.X + pointRect2.X) / 2) var centerPointY = int((pointRect1.Y + pointRect2.Y) / 2) var center = opencv.Point{centerPointX, centerPointY} cachedPointsCenterX = append(cachedPointsCenterX, center.X) cachedPointsCenterY = append(cachedPointsCenterY, center.Y) //draw eye marker drawEyeMarker(img, center) } } else { //if we have a cached value for i := 0; i < len(cachedPointsCenterY); i++ { drawEyeMarker(img, opencv.Point{cachedPointsCenterX[i], cachedPointsCenterY[i]}) } } win.ShowImage(img) //counter for cache counter = counter + 1 return nil }