python+opencv已经比较成熟了,但是比起go,python太缺乏秩序,所以打算后面用go玩opencv。

闲话不多说,开始。

第一步:安装mingw-w64

但是下载链接很难找!而且下载器很难用

下载链接

在上图位置找到自己系统对应的安装包即可。我的64位win10用的是x86_64-win32-seh

第二步:安装gocv

下载完成后,可考虑直接使用gocv自带工具构建opencv。

在$GOPATH/src/gocv.io/x/gocv中执行

但此方法下载极慢,走代理之后也遇到很多坑,并不实用。如想尝试,可直接参考https://gocv.io/getting-started/windows/

笔者选择自己从源码编译。

第三步:编译opencv+contrib源码

下载源码

下载并安装cmake

cmake生成

打开cmake-gui,看到如下界面

cmake-gui界面

依次填写源码位置以及目标地址,点一次configure,弹出如下界面

在此处选择MinGW Makefiles,表示生成MinGW工程

然后出现

这时会报错,因为没有设置环境变量

打开git-bash,依次输入

再按上述步骤操作即可Configure成功

接下来,搜索OPENCV_EXTRA_MODULES_PATH,并在该项中填写之前clone的opencv_contrib/modules的路径,重新configure一次,这样opencv_contrib会一起构建

一般而言,此时可以点Generate使用默认的配置生成代码了。如果有兴趣,可以自己探索一下其它选项。比如选中WITH_CUDA可以使用Intel CUDA用GPU来加速算法。当然,首先你要有Intel显卡以及CUDA开发环境。

编译安装

在构建目录下,执行

即可。注意:此过程预计耗时1小时以上

第四步:go+opencv环境配置

gocv使用cgo来调用opencv的库,本来按照官网说明是支持自定义位置的,但是无论怎么做,都会说找不到静态库。所以只好把编译好的资源,放在gocv默认的位置上。

在git-bash中执行

最后将此路径加入到环境变量PATH中即可

第五步:验证gocv

执行

如果打印出

就大功告成!

问题处理

Q1: gocv版本与opencv版本不一致怎么办?

一般而言,gocv比opencv会稍慢一拍。笔者编译的是opencv4.1.1(2019/7/28发布),而gocv在这天默认使用4.1.0。由于自定义CGO环境出了很多问题,对于版本不一致且又不愿意重新编译一遍的同学,可以使用重命名的方式解决。

在相应库文件目录下(如/c/opencv/build/install/x64/mingw/lib),执行以下脚本

Q2:运行时弹出exit status 3221225781怎么办?

确认第四步中将bin目录加入到了path。在实践中,我使用的地址跟gocv官方提供的不一样。根据github上的反馈,似乎使用gocv官方的那个路径会有问题。

其他

想了解opencv有什么玩法,可以参考笔者另一篇文章

简单介绍了视频防抖的基本流程,还有自己开发的防抖系统的样例视频。