在go中使用opencv

在go中使用opencv,第1张

在go中使用opencv还是比较麻烦的,如果使用的是 mac 或 linux 还好,在windows下就比较痛苦。

GoCV 包提供了对 opencv 4.5.4 的支持,官方提供了一键安装的脚本。

对于 linux 和 mac 系统,直接按官方的教程就可以了,不会遇到太多问题。官方安装指南在这:
https://gocv.io/getting-started/linux/
https://gocv.io/getting-started/macos/

对于 windows 步骤相对比较复杂,它通过 MinGW 来编译,首先要安装 MinGW 以及 CMake ,直接安 MSYS2 也可以,不过最好还是和 GoCV 官方用的一致,装MinGW 7.3.0,因为接下来可以看到它的编译脚本里已经把目录写死了😂,如果不一致要自己改一下会比较麻烦😂。官方安装指南在这:https://gocv.io/getting-started/windows/

大体上的步骤都可以按官方文档里写的来,如果出错一般是环境没有配好,最好把 MinGW 下的 mingw64\bin 目录加到 PATH 环境变量中。编译 opencv 时可以改一下 GOPATH 下 \src\gocv.io\x\gocv 里的 win_build_opencv.cmd 文件,因为GitHub网络不稳定时常会下载失败,可以把图中标出来的两句删除语句注释掉,以防一遍又一遍的下载文件又删掉。


编译出来的 opencv 是动态库。我试了改编译选项可以编译成静态库,但这样在 go 编译程序时会提示找不到opencv相关的库,具体我也没细究,因为着急用,就直接用的动态库版。

GoCV 这个包有个地方很尴尬,因为它链接的是动态库,所以如果要把自己写的程序打包给别人用,就必须把所有的opencv动态库都和我们写的程序放在一起,少一个都不能用😂😅。

在 go 里写 opencv 还是很舒服的,相对于 c++ go的语法写起来要灵活很多。

下面是一个读图显示图片的例子:

package main

import (
	"gocv.io/x/gocv"
)

func main() {
	img := gocv.IMRead("avatar.jpg", gocv.IMReadColor)
	window := gocv.NewWindow("Hello")

	window.IMShow(img)
	window.WaitKey(0)
}

运行后就会d出一个窗口显示图片。

相对来讲,显示图片的函数(imshow)不像在 c++ 中到处都可以写,在GoCV中只能通过先定义一个 window 然后由window 调用 IMShow 显示图片。而且,window只能在主线程中开,如果开个协程来显示程序会直接挂掉。

除去这一点点不便,GoCV 用起来还是很爽的。


欢迎关注我的微信公众号 江达小记

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/989975.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存