在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 用起来还是很爽的。
欢迎关注我的微信公众号 江达小记
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)