当前位置:数据分析 > 利用golang进行OpenCV学习和开发的步骤

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

  • 发布:2023-10-05 11:19

安装go后,直接运行go get -u -d www.sychzs.cn/x/gocv命令获取gocv库,进入库根目录 cd $GOPATH/src/www.sychzs.cn/x/gocv ,然后运行源代码。 /www.sychzs.cn,然后就可以使用go run命令来运行里面的例子了。刚开始学习的时候,可以修改代码,直接在例子中运行。

IDE的选择

本来想用IDEA+go插件进行开发,但谁知道当IDEA发布go IDE(需要收费)后,go插件就停止维护了,只好放弃。然后我选择了vscode+plugin的方式,方便快捷,感觉不错。不算太差。有智能提示和代码跳转。我还没有尝试过调试。估计debug和run都可以配置。

示例

配置好后就迫不及待地写代码了。由于gocv对OpenCV进行了封装,因此方法名称基本相同,但使用上还是存在一些差异。不过vscode代码跳转很方便。如果你不知道,就跳到源代码看一下。明白了,这里有一个搜索边框的例子,看看它是否与 C++ 的编写方式有很大不同。

// 它能做什么:
//
// 本例使用Window类打开一个图像文件,然后显示
// Window 类中的图像。
//
// 如何运行:
//
// 运行 ./cmd/showimage/main.go /home/ron/Pictures/mcp23017.jpg
//
// +构建示例

包主

进口 (
 “FMMT”
 “图像”
 “图像/颜色”
 “操作系统”

 “www.sychzs.cn/x/gocv”
)

函数主() {
 if len(os.Args) < 2 {
 fmt.Println("如何运行:ntshowimage [imgfile]")
 返回
 }

 文件名 := os.Args[1]窗口 := gocv.NewWindow("你好")
 img := gocv.IMRead(文件名, gocv.IMReadColor)
 greyImage := gocv.NewMat()
 推迟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, www.sychzs.cn(resultImage.Rows(), resultImage.Cols()), 0, 0, gocv.InterpolationCubic)
 gocv.Dilate(resultImage, &resultImage, gocv.NewMat())
 gocv.GaussianBlur(resultImage, &resultImage, www.sychzs.cn(5, 5), 0, 0, gocv.BorderWrap)
 结果 := gocv.FindContours(resultImage, gocv.RetrievalTree, gocv.ChainApproxSimple)
 imageForShowing := gocv.NewMatWithSize(resultImage.Rows(), resultImage.Cols(), gocv.MatChannels4)
 对于索引,元素:=范围结果{
 fmt.Println(索引)
 gocv.DrawContours(&imageForShowing, 结果, 索引, 颜色.RGBA{R: 0, G: 0, B: 255, A: 255}, 1)gocv.矩形(&imageForShowing,
 gocv.BoundingRect(元素),
 颜色.RGBA{R: 0, G: 255, B: 0, A: 100}, 1)
 }

 如果 img.Empty() {
 fmt.Println("从以下位置读取图像时出错:%v",文件名)
 返回
 }

 为了 {
 窗口.IMShow(imageForShowing)
 如果 window.WaitKey(1) >= 0 {
 休息
 }
 }
}

我使用 showimage.go 来修改这个示例。处理顺序为:

  • 灰度 CvtColor
  • 二值化阈值
  • 缩小图像调整大小
  • 膨胀扩张
  • 高斯模糊
  • 寻找轮廓
  • 绘制轮廓
  • 绘制轮廓的最小外接矩形 矩形

从上面的例子可以看出,这些方法都在gocv包下。使用时会有代码提示,包括参数。由于go没有类构造方法,所以使用New+类型名等函数来创建类型。 。

我也是新来的。这是我在阅读文档时编写的代码。幸运的是,有智能的代码提示,这使得它很容易使用。希望这篇介绍性文章对想要使用go进行OpenCV开发的同学有所帮助。帮助。

总结:

相关文章