gocv基于Viola-Jones算法人脸检测

如果没有安装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、代码运行效果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值