如果没有安装gocv,请查看文章《gocv-go语言调用opencv入门》
1、代码展示
package main
// 人脸检测,基于viola-jones方法
import (
"gocv.io/x/gocv"
"fmt"
"image/color"
)
func main() {
webCam, err := gocv.VideoCaptureDevice(0)
if nil != err{
fmt.Println("ErrIno:VideoCaptureDevice! ", err)
return
}
defer webCam.Close()
window := gocv.NewWindow("viola-jones")
defer window.Close()
img := gocv.NewMat()
defer img.Close()
width := int(webCam.Get(gocv.VideoCaptureFrameWidth))
height := int(webCam.Get(gocv.VideoCaptureFrameHeight))
fmt.Printf("video resolution: [%v], [%v]\n",width , height)
classifier := gocv.NewCascadeClassifier()
defer classifier.Close()
if ok := classifier.Load("haarcascade_frontalface_default.xml"); !ok{
fmt.Printf("error load xml!")
return
}
blue := color.RGBA{0, 0, 255, 0}
for{
if ok := webCam.Read(&img);!ok{
fmt.Println("ErrIno:Read! ")
return
}
if img.Empty(){
continue
}
rects := classifier.DetectMultiScale(img)
for _, r := range rects{
gocv.Rectangle(&img, r, blue, 3)
}
window.IMShow(img)
if 27 == window.WaitKey(1){
break
}
}
}
2、代码说明
webCam, err := gocv.VideoCaptureDevice(0)
表示打开电脑的摄像头。
window := gocv.NewWindow("viola-jones")
表示申请显示窗口,左上角显示“viola-jones”
img := gocv.NewMat()
表示创建图像矩阵
classifier := gocv.NewCascadeClassifier()
表示创建一个分类器对象,用于加载模型参数。
classifier.Load("haarcascade_frontalface_default.xml")
表示分类器对象,需要加载xml模型参数。文件haarcascade_frontalface_default.xml在目录%GOPATH%\src\gocv.io\x\gocv\data下。
webCam.Read(&img)
表示从摄像头读取视频内容,并放于图像矩阵中。
rects := classifier.DetectMultiScale(img)
这段代码,告诉opencv使用viola-jonesr的多尺度检测方法进行人脸检测,输出人脸所在位置的矩阵框。
gocv.Rectangle(&img, r, blue, 3)
根据矩阵框参数,对图像矩阵img,绘制一个蓝色的矩形框。
window.IMShow(img)
把图像矩阵的内存内容,显示到显示窗口。
27 == window.WaitKey(1)
等待按“ESC”退出。
2、代码运行效果