golang库-GoCV

流星aday
2021-06-06 / 0 评论 / 33 阅读 / 正在检测是否收录...

Linux上安装GoCV

linux系统建议使用ubuntu来安装gocv,使用centos会出现一堆依赖问题。

需先安装go环境

wget -c https://golang.google.cn/dl/go1.16.5.linux-amd64.tar.gz
tar -C /usr/local -zxvf go1.16.5.linux-amd64.tar.gz
ln -s /usr/local/go/bin /usr/bin/go
go version

安装GoCV

go get -u -d gocv.io/x/gocv
cd $GOPATH/src/gocv.io/x/gocv
make install #编译,有点久可能需要1小时

完成

安装成功后输出如下

gocv version: 0.27.0
opencv lib version: 4.5.2

简单使用(图像人脸识别)

package main

import (
    "fmt"
    "gocv.io/x/gocv"
    "log"
    "time"
)

func main() {
    //打开图片文件,如果参数是string类型文件路径则打开文件,参数是int类型设备id则打开设备
    webcam, e := gocv.OpenVideoCapture("img/2.JPG")
    if e != nil {
        log.Fatal(e)
    }
    defer webcam.Close()

    //创建级联分类器
    classifier := gocv.NewCascadeClassifier()
    defer classifier.Close()

    //载入级联分类器配置
    if !classifier.Load("data/haarcascade_frontalface_default.xml") {
        log.Fatal("load the failure")
    }

    //创建一个空的mat
    img := gocv.NewMat()
    defer img.Close()

    //读取图像的下一帧,如果图像有多帧可使用for循环读取,webcam.Grab()跳过特定帧
    if !webcam.Read(&img) {
        log.Fatal("failed to read image")
    }

    //识别人脸位置,返回切片,每个切片值为矩形坐标x,y,人脸数量等于len(rects)
    rects := classifier.DetectMultiScale(img)
    fmt.Printf("found %d faces\n", len(rects))

    for _, v := range rects {
        //读取人脸坐标信息,剪切图像另存文件
        _ = gocv.IMWrite(fmt.Sprintf("img/%d.jpg", time.Now().UnixNano()), img.Region(v))
    }

}
4

评论

博主关闭了所有页面的评论