专栏首页大福的云windows系统构建golang+opencv环境
原创

windows系统构建golang+opencv环境

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

go get -u -d gocv.io/w/gocv

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

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

./win_build_opencv.cmd

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

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

第三步:编译opencv+contrib源码

下载源码

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界面

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

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

然后出现

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

打开git-bash,依次输入

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开发环境。

编译安装

在构建目录下,执行

make && make install

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

第四步:go+opencv环境配置

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

在git-bash中执行

mkdir -p /c/opencv
cp -r YOUR_BUILD_PATH/install /c/opencv/

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

c:/opencv/build/install/bin

第五步:验证gocv

执行

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),执行以下脚本

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视频后期防抖实战》

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

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 玩转golang——JSON高性能自动字段名

    golang最近在中国非常火爆,尤其是后端服务开发场景。原生并发支持、优秀的性能、统一的风格,极大提升了开发效率。笔者用golang独立开发过不少小中型系统,写...

    大福加冰
  • OpenCV视频后期防抖实战

    点播、直播行业的蓬勃发展,使用户生产视频(UGC)逐渐替代了专家生产和平台生产的方式,成为了主流。由于广大用户不可能全都具备专业素质和专业器材,其产出的视频往往...

    大福加冰
  • PWA之离线缓存(一)

    PWA全称是Progressive Web Apps, 是一种渐进式增强 WEB 应用。 这里的渐进式增强是指无论用户用的是什么浏览器都能保证应用能正常工作。

    IMWeb前端团队
  • MacOS Sierra:一些简单记录

    这个时候,用命令 sudo spctl --master-disable 以后,再次进入, 就可以发现早期可爱的界面了

    dodo_lihao
  • redis妙用-string类型

    string类型,是我们最常用的。以及一些特性,我们都比较熟悉,这一节一起回顾一下string的应用场景,以及对这些场景延申的一些思考。

    far
  • 性能测试监控平台:influxdb+grafana+jmeter

    原来的文章介绍了InfluxDB、Telegraf、Grafana的安装和使用方法,这篇文章,介绍下如何利用这些开源工具搭建性能测试监控平台。。。

    老_张
  • Pytorch预训练模型以及修改

    pytorch中自带几种常用的深度学习网络预训练模型,torchvision.models包中包含alexnet、densenet、inception、resn...

    于小勇
  • ES6特性之:参数默认值

    作为一个开发者,跟进行业步伐是非常需要的,不能躺在现有的知识和经验温床上做美梦。JavaScript的ES2015标准(即我们说的ES6)在2016年已经被广泛...

    一斤代码
  • javascript中的setTimeout() 方法和clearInterval() 方法和setInterval() 方法

    用户7657330
  • 外显子测序被Science评为年度十大突破的时候你在做什么

    相信大家这两年都见证了单细胞测序的火爆, 不管是紧锣密鼓的CNS文章,还是雨后春笋般的培训班。单细胞的光环太多了:

    生信技能树

扫码关注云+社区

领取腾讯云代金券