前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >windows系统构建golang+opencv环境

windows系统构建golang+opencv环境

原创
作者头像
大福加冰
修改2019-07-29 11:11:56
4.1K0
修改2019-07-29 11:11:56
举报
文章被收录于专栏:大福的云大福的云

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

闲话不多说,开始。

第一步:安装mingw-w64

官网https://mingw-w64.org/

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

来这里一步到位https://sourceforge.net/projects/mingw-w64/files/mingw-w64/

下载链接
下载链接

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

第二步:安装gocv

代码语言:shell
复制
go get -u -d gocv.io/w/gocv

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

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

代码语言:javascript
复制
./win_build_opencv.cmd

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

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

第三步:编译opencv+contrib源码

下载源码

代码语言:javascript
复制
git clone https://github.com/opencv/opencv
git clone https://github.com/opencv/opencv_contrib

下载并安装cmake

https://cmake.org/download/

cmake生成

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

cmake-gui界面
cmake-gui界面

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

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

然后出现

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

打开git-bash,依次输入

代码语言:javascript
复制
export CMAKE_CXX_COMPILER=gcc
export CMAKE_C_COMPILER=gcc
cmake-gui

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

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

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

编译安装

在构建目录下,执行

代码语言:shell
复制
make && make install

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

第四步:go+opencv环境配置

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

在git-bash中执行

代码语言:shell
复制
mkdir -p /c/opencv
cp -r YOUR_BUILD_PATH/install /c/opencv/

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

代码语言:javascript
复制
c:/opencv/build/install/bin

第五步:验证gocv

执行

代码语言:shell
复制
go run $GOPATH/src/gocv.io/x/gocv/cmd/version/main.go

如果打印出

就大功告成!

问题处理

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

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

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

代码语言:python
复制
import os

for file in os.listdir():
    if file.find("411.dll") < 0:
        continue
    to = file.replace("411", "410")
    os.system("cp " + file +" "+to)

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

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

其他

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

《OpenCV视频后期防抖实战》

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第一步:安装mingw-w64
  • 第二步:安装gocv
  • 第三步:编译opencv+contrib源码
    • 下载源码
      • 下载并安装cmake
        • cmake生成
          • 编译安装
          • 第四步:go+opencv环境配置
          • 第五步:验证gocv
          • 问题处理
            • Q1: gocv版本与opencv版本不一致怎么办?
              • Q2:运行时弹出exit status 3221225781怎么办?
              • 其他
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档