golang 开启opencv图形化编程

下面是“golang 开启opencv图形化编程”的完整攻略,共分为以下几个步骤:

1. 安装OpenCV

首先需要安装OpenCV,可以通过以下命令完成安装:

sudo apt-get install libopencv-dev python3-opencv

2. 安装gocv

安装完OpenCV之后,需要安装gocv库,可以使用以下命令完成安装:

go get -u -d gocv.io/x/gocv

3. 设置环境变量

接下来需要设置环境变量,将gocv的库路径添加到环境变量中,可以通过以下命令完成:

export CGO_CPPFLAGS="-I/usr/local/include"
export CGO_LDFLAGS="-L/usr/local/lib -lgocv"

4. 编写golang代码

成功完成前三个步骤之后,就可以开始写golang代码了,以下是一个简单的示例:

package main

import (
    "fmt"
    "image/color"
    "gocv.io/x/gocv"
)

func main() {
    // 打开摄像头
    webcam, _ := gocv.VideoCaptureDevice(0)
    defer webcam.Close()

    // 创建一个窗口
    window := gocv.NewWindow("Face Detection")
    defer window.Close()

    // 加载Haar级联文件
    classifier := gocv.NewCascadeClassifier()
    classifier.Load("haarcascade_frontalface_default.xml")
    defer classifier.Close()

    // 循环检测人脸
    for {
        // 读取摄像头的一帧
        img := gocv.NewMat()
        webcam.Read(&img)

        // 创建灰度图
        gray := gocv.NewMat()
        gocv.CvtColor(img, &gray, gocv.ColorBGRToGray)

        // 检测人脸
        faces := classifier.DetectMultiScale(gray)
        fmt.Printf("Found %d faces\n", len(faces))

        // 绘制矩形框
        for _, r := range faces {
            gocv.Rectangle(&img, r, color.RGBA{0, 0, 255, 0}, 3)
        }

        // 显示结果
        window.IMShow(img)
        if window.WaitKey(1) >= 0 {
            break
        }

        // 释放变量
        img.Close()
        gray.Close()
    }
}

5. 运行golang代码

完成代码编写之后,就可以通过以下命令运行代码了:

go run main.go

示例1:检测并识别人脸并识别

package main

import (
    "fmt"
    "image/color"
    "gocv.io/x/gocv"
    "strings"
)

func main() {
    filename := "classifiers/haarcascade_frontalface_default.xml"
    window := gocv.NewWindow("Face Detection")
    defer window.Close()

    img := gocv.IMRead("images/test.jpg", gocv.IMReadAnyColor)
    if img.Empty() {
        fmt.Println("加载图片失败")
        return
    }
    defer img.Close()
    gocv.CvtColor(img, &img, gocv.ColorBGRToGray)
    classifer := gocv.NewCascadeClassifier()
    classifer.Load(filename)
    defer classifer.Close()

    faces := classifer.DetectMultiScale(img, 1.3, 5)
    fmt.Printf("在该图片中检测到%d个人脸.\n", len(faces))

    tokenizer := gocv.NewLBPHFaceRecognizer()
    tokenizer.Train([]gocv.Mat{}, []int32{})
    defer tokenizer.Close()

    // 遍历检测到的每一个人脸区域
    for i, r := range faces {
        // 绘制人脸框
        gocv.Rectangle(&img, r, color.RGBA{0, 255, 0, 0}, 3)

        // 在框下方标注人脸编号
        position := gocv.Point{r.Max.X, r.Min.Y + 20}
        text := fmt.Sprintf("Face %d", i+1)
        gocv.PutText(&img, text, position, gocv.FontHersheyPlain, 1, color.RGBA{0, 0, 255, 0}, 1)
        // 截取人脸图片
        faceROI := img.Region(r)
        defer faceROI.Close()

        // 将人脸图片转换为可识别的数据格式
        // 设置训练所需的样本和身份标签
        label := int32(i)
        tokenizer.AddSamples([]gocv.Mat{faceROI}, []int32{label})

        // 输出训练样本数量
        fmt.Printf("[Face %d] Added sample (label %d) total samples = %d\n", i+1, label, tokenizer.GetNumSamples())

        // 显示并等待关闭
        window.IMShow(img)
        gocv.WaitKey(100)
    }

    // 开始识别
    fmt.Println("开始识别")
    img = gocv.IMRead("images/test1.jpg", gocv.IMReadAnyColor)
    defer img.Close()
    gocv.CvtColor(img, &img, gocv.ColorBGRToGray)
    detectResult := classifer.DetectMultiScale(img, 1.3, 5)
    if len(detectResult) != 1 {
        fmt.Println("无法检测到人脸或检测到多个人脸,识别失败")
        return
    }
    faceROI := img.Region(detectResult[0])
    defer faceROI.Close()

    id := tokenizer.Predict(faceROI)
    fmt.Printf("检测到编号为%d的人脸\n", id+1)
    window.IMShow(img)
    gocv.WaitKey(0)
}

示例2:捕获摄像头视频流并检测人脸区域

package main

import (
    "fmt"
    "image/color"
    "gocv.io/x/gocv"
)

func main() {
    capture, err := gocv.OpenVideoCapture(0)
    if err != nil {
        fmt.Printf("Error opening video capture device: %v\n", 0)
        return
    }
    defer capture.Close()

    window := gocv.NewWindow("Face Detection")
    defer window.Close()

    img := gocv.NewMat()
    defer img.Close()

    classifier := gocv.NewCascadeClassifier()
    defer classifier.Close()
    filename := "haarcascade_frontalface_default.xml"
    classifier.Load(filename)

    for {
        // 从摄像头获取一帧图片
        if ok := capture.Read(&img); !ok {
            fmt.Println("不能从摄像头获取数据")
            return
        }
        if img.Empty() {
            continue
        }

        // 检测人脸
        rects := classifier.DetectMultiScale(img)
        for _, r := range rects {
            size := gocv.GetTextSize("Human", gocv.FontHersheyPlain, 1.2, 2)
            pt := image.Pt(r.Min.X+(r.Min.X/2)-(size.X/2), r.Min.Y-2)
            gocv.Rectangle(&img, r, color.RGBA{0, 255, 0, 0}, 2)
            gocv.PutText(&img, "Human", pt, gocv.FontHersheyPlain, 1.2, color.RGBA{0, 0, 255, 0}, 2)
        }

        window.IMShow(img)
        if window.WaitKey(1) == 27 {
            break
        }
    }

}

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:golang 开启opencv图形化编程 - Python技术站

(0)
上一篇 2023年5月25日
下一篇 2023年5月25日

相关文章

  • Python+OpenCV实战之拖拽虚拟方块的实现

    “Python+OpenCV实战之拖拽虚拟方块的实现”是一个非常有趣的实践项目,可以提高我们的Python编程和OpenCV图像处理技能。下面是实现该项目的攻略: 1. 准备工作 在开始项目之前,需要进行以下准备工作: 1.1 安装OpenCV 如果你还没有安装OpenCV,请通过以下命令在终端中安装: pip3 install opencv-python …

    人工智能概论 2023年5月25日
    00
  • 解决django后台样式丢失,css资源加载失败的问题

    解决 Django 后台样式丢失、CSS 资源加载失败的问题,可能是因为 Django 默认使用的是静态文件路径是相对路径,而不是绝对路径,导致浏览器无法加载相关资源,显示出错。下面给出两种解决方法。 方法一:修改静态文件路径 打开 settings.py 文件,找到 STATIC_URL、STATIC_ROOT 和 STATICFILES_DIRS 这三个…

    人工智能概论 2023年5月25日
    00
  • Python实现功能完整的个人员管理程序

    要实现功能完整的个人员管理程序,可以按以下步骤进行: 1. 确定需求和数据结构 首先需要确定个人员管理程序的需求,例如需要储存和管理的信息类型,比如姓名、年龄、性别等。在此基础上,可以选择合适的数据结构来储存和处理信息。比如可以使用Python中的字典(dict)或列表(list)。 2. 实现基本的增删改查功能 根据需求和数据结构,可以实现基本的增删改查功…

    人工智能概论 2023年5月24日
    00
  • 有密码 优酷视频 破解方法

    有密码优酷视频破解方法 登录优酷账号,找到需要观看的有密码视频,在视频页面右下角找到“复制链接”按钮,复制视频链接。 打开一个新的浏览器窗口,访问秘迹网。 在搜索框输入“优酷破解”,点击“搜索”按钮,选择其中一个页面打开。 在页面中粘贴复制的视频链接,点击“获取真实地址”按钮,等待几秒钟。 在页面下方会显示出视频的真实地址,复制该地址。 打开一个新的浏览器窗…

    人工智能概论 2023年5月25日
    00
  • 关于feign对x-www-form-urlencode类型的encode和decode问题

    Feign是一个RESTful风格的HTTP客户端框架,它通过注解的方式来定义和调用HTTP方法,简化了HTTP请求的实现过程。在进行POST请求时,我们通常有两种方式来对请求参数进行编码:application/x-www-form-urlencoded和application/json。相对于后者,前者的请求参数格式类似于name=value&n…

    人工智能概论 2023年5月25日
    00
  • 2020新版本pycharm+anaconda+opencv+pyqt环境配置学习笔记,亲测可用

    下面是详细讲解“2020新版本pycharm+anaconda+opencv+pyqt环境配置学习笔记,亲测可用”的完整攻略。 环境配置学习笔记 安装Anaconda 首先需要下载安装Anaconda,官网下载速度较慢,可以考虑使用国内镜像下载。推荐使用清华镜像,下载地址为:https://mirrors.tuna.tsinghua.edu.cn/anaco…

    人工智能概览 2023年5月25日
    00
  • OpenCV4.1.0+VS2017环境配置的方法步骤

    下面是OpenCV4.1.0+VS2017环境配置的方法步骤: 前置条件 在搭建OpenCV4.1.0+VS2017环境之前,需要先安装VS2017或以上版本,并安装C++开发环境。 步骤一:下载OpenCV4.1.0 访问OpenCV官网,下载OpenCV4.1.0版本的zip文件,解压到任意一个目录。 步骤二:配置VS2017 启动VS2017,创建C+…

    人工智能概论 2023年5月25日
    00
  • 用Python做一个简单的图书管理系统

    下面是使用Python实现一个简单的图书管理系统的攻略: 1. 确定需求和功能 在着手实现图书管理系统之前,我们需要先明确需要实现的功能,例如图书的添加、删除、修改和查询,借阅、归还等。具体的需求可以根据实际情况进一步补充。 2. 构建数据库 构建数据库是实现图书管理系统的关键步骤之一。在Python中,可以使用SQLite或者其他第三方数据库模块(如MyS…

    人工智能概览 2023年5月25日
    00
合作推广
合作推广
分享本页
返回顶部