• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    利用golang进行OpenCV学习和开发的步骤

    前言

    记得开始使用 OpenCV 的时候是在大学时期,当时用的是 C 语言,OpenCV 版本好像是1.1,随着时间的推移,后面 C++逐渐代替了 C,iOS 也有整合好的 lib 可以使用 OpenCV,现在Python, go 等语言进行开发,今天主要是说一说如何使用 go 语言配置开发 OpenCV。

    OpenCV这一名称包含了Open和 Computer Vision两者的意思。实际上,Open指Open Source(开源,即开放源代码),Computer Vision则指计算机视觉。OpenCV的发展对软件的开发具有重要影响。

    OpenCV作为开放的数字图像处理和计算机视觉软件平台,有以下特点:

    ① 开放C源码。

    ② 基于Intel处理器指令集开发的优化代码。

    ③ 统一的结构和功能定义。

    ④ 强大的图像和矩阵运算能力。

    ⑤ 方便灵活的用户接口。

    ⑥ 同时支持MSWindows和Linux平台。

    作为一个基本的计算机视觉、图像处理和模式识别的开源项目,OpenCV可以直接应用于很多领域,作为二次开发的理想工具。

    库的选择

    使用 Opencv 2+的话,可以用这个库 https://github.com/go-opencv/go-opencv,但这个库没有支持 OpenCV 3+, 所以想用 OpenCV 3+ 可以使用https://github.com/hybridgroup/gocv,今天主要就是介绍 gocv 的使用。

    环境配置

    如果还没安装 OpenCV 的话, Mac OS可以通过 brew install opencv 进行安装OpenCV 3.4.1。

    安装好 go 之后,直接运行 go get -u -d gocv.io/x/gocv 命令获取 gocv 库,进入该库根目录 cd $GOPATH/src/gocv.io/x/gocv, 运行 source ./env.sh,然后就可以使用 go run命令运行里面的示例了,刚开始学可以直接在示例里面修改代码运行。

    IDE 的选择

    本来想使用 IDEA + go plugin 的方式来开发,谁知 IDEA 出了 go IDE(需要收费),go plugin 就停止维护了,只能放弃,随后选择 vscode+plugin 的方式,方便快捷,感觉也不错,智能提示和代码跳转都有了,调试还没试,估计调试和 run 的话都是可以配置的。

    示例

    配置好之后迫不及待就写代码了,由于 gocv 对 OpenCV 进行了封装,方法名基本都一致,但是使用上还是有些区别,不过 vscode 代码跳转很方便,不清楚直接跳到源码看看就知道了,下面贴一个查找边框的例子,看看是不是和 C++的写法很不一样。

    // What it does:
    //
    // This example uses the Window class to open an image file, and then display
    // the image in a Window class.
    //
    // How to run:
    //
    // go run ./cmd/showimage/main.go /home/ron/Pictures/mcp23017.jpg
    //
    // +build example
    
    package main
    
    import (
     "fmt"
     "image"
     "image/color"
     "os"
    
     "gocv.io/x/gocv"
    )
    
    func main() {
     if len(os.Args)  2 {
     fmt.Println("How to run:\n\tshowimage [imgfile]")
     return
     }
    
     filename := os.Args[1]
     window := gocv.NewWindow("Hello")
     img := gocv.IMRead(filename, gocv.IMReadColor)
     grayImage := gocv.NewMat()
     defer grayImage.Close()
    
     gocv.CvtColor(img, grayImage, gocv.ColorBGRToGray)
     destImage := gocv.NewMat()
     gocv.Threshold(grayImage, destImage, 100, 255, gocv.ThresholdBinaryInv)
     resultImage := gocv.NewMatWithSize(500, 400, gocv.MatTypeCV8U)
    
     gocv.Resize(destImage, resultImage, image.Pt(resultImage.Rows(), resultImage.Cols()), 0, 0, gocv.InterpolationCubic)
     gocv.Dilate(resultImage, resultImage, gocv.NewMat())
     gocv.GaussianBlur(resultImage, resultImage, image.Pt(5, 5), 0, 0, gocv.BorderWrap)
     results := gocv.FindContours(resultImage, gocv.RetrievalTree, gocv.ChainApproxSimple)
     imageForShowing := gocv.NewMatWithSize(resultImage.Rows(), resultImage.Cols(), gocv.MatChannels4)
     for index, element := range results {
     fmt.Println(index)
     gocv.DrawContours(imageForShowing, results, index, color.RGBA{R: 0, G: 0, B: 255, A: 255}, 1)
     gocv.Rectangle(imageForShowing,
     gocv.BoundingRect(element),
     color.RGBA{R: 0, G: 255, B: 0, A: 100}, 1)
     }
    
     if img.Empty() {
     fmt.Println("Error reading image from: %v", filename)
     return
     }
    
     for {
     window.IMShow(imageForShowing)
     if window.WaitKey(1) >= 0 {
     break
     }
     }
    }

    我是用 showimage.go 这个示例改的,处理顺序是:

    从上面例子可以看到,方法都是在 package gocv下,使用的时候会有代码提示,包括参数也有提示,由于 go 没有类构造方法,都是使用 New+类型名称这样的函数还创建类型。

    我也是 go 的新手,这里是边看着文档边写的代码,还好有智能代码提示,用起来还算得心应手,希望这篇入门文章对想使用 go 来进行 OpenCV 开发的同学有所帮助。

    总结:

    以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

    您可能感兴趣的文章:
    • Golang极简入门教程(一):基本概念
    • Golang极简入门教程(四):编写第一个项目
    • GO语言(golang)基础知识
    • Ubuntu中Opencv的安装使用教程
    上一篇:基于golang如何实现error工具包详解
    下一篇:golang sql连接池的实现方法详解
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    利用golang进行OpenCV学习和开发的步骤 利用,golang,进行,OpenCV,学习,