gocv库安装,Go安装OpenCV库(windows)
gocv是OpenCV4在Go中的绑定,使用它可以在Go里做图像处理。
Github:https://github.com/hybridgroup/gocv
Windows安装官方介绍:https://gocv.io/getting-started
安装gocv
go get -u -d gocv.io/x/gocv
会安装到%GOPATH%\src下。
编译OpenCV
要使用gocv,需要编译OpenCV。编译并不复杂,需要安装MinGW-W64和CMake。
1、安装MinGW-W64
1)下载地址:https://sourceforge.net/projects/mingw-w64/files/mingw-w64/
2)版本要大于7.0,参数要选posix、seh,如下图;
3)下载后解压到任意位置,再将mingw64\bin添加到环境变量。
2、安装CMake
下载地址:https://cmake.org/download/
正常安装,环境变量自动添加。
3、编译
cd %GOPATH%\src\gocv.io\x\gocv win_build_opencv.cmd
其中gocv库提供的win_build_opencv.cmd为安装过程命令:
1)下载opencv-4.5.2.zip并解压到C:\opencv
2)下载opencv_contrib-4.5.2.zip并解压到C:\opencv
3)cmake
4)mingw32-make
5)mingw32-make install
其中set PATH那行可以省略。
编译好后,添加C:\opencv\build\install\x64\mingw\bin到环境变量。
注意:
1)mingw32-make过程中断,编译失败
可能是由于多线程编译时有的依赖库还没有生成造成的
解决办法:反复执行mingw32-make
2)Python的影响
如果你的电脑装了Python,且环境变量添加了Python安装目录,可能会出现链接错误,这是因为有些lib依赖库按环境变量在Python目录中找到了,而这些库与编译不匹配。
解决办法:环境变量去掉Python目录,更简单的办法是把Python目录改名,编译完成后再改回来。
测试OpenCV
cd %GOPATH%\src\gocv.io\x\gocv go run cmd\version\main.go
结果
gocv version: 0.21.0 opencv lib version: 4.5.2
安装成功。
问题
按以上过程编译、安装,不用额外配置就能直接使用。如果报错找不到 #include<opencv2/opencv.hpp>,可能是你没在C:\opencv下编译,Go就是这么无情!实际上,Gocv的默认Opencv路径在gocv.io\x\gocv\cgo.go里定义:
// +build !customenv,!openvino package gocv // Changes here should be mirrored in contrib/cgo.go and cuda/cgo.go. /* #cgo !windows pkg-config: opencv4 #cgo CXXFLAGS: --std=c++11 #cgo windows CPPFLAGS: -IC:/opencv/build/install/include #cgo windows LDFLAGS: -LC:/opencv/build/install/x64/mingw/lib -lopencv_core452 -lopencv_face452 -lopencv_videoio452 -lopencv_imgproc452 -lopencv_highgui452 -lopencv_imgcodecs452 -lopencv_objdetect452 -lopencv_features2d452 -lopencv_video452 -lopencv_dnn452 -lopencv_xfeatures2d452 -lopencv_plot452 -lopencv_tracking452 -lopencv_img_hash452 -lopencv_calib3d452 */ import "C"
解决办法:如下配置CGO环境变量,然后可以考虑使用-tags customenv执行go编译和运行
set CGO_CXXFLAGS=--std=c++11 set CGO_CPPFLAGS=-IC:\opencv\build\install\include set CGO_LDFLAGS=-LC:\opencv\build\install\x64\mingw\lib -lopencv_core452 -lopencv_face452 -lopencv_videoio452 -lopencv_imgproc452 -lopencv_highgui452 -lopencv_imgcodecs452 -lopencv_objdetect452 -lopencv_features2d452 -lopencv_video452 -lopencv_dnn452 -lopencv_xfeatures2d452 -lopencv_plot452 -lopencv_tracking452 -lopencv_img_hash452
或
go env -w CGO_CXXFLAGS="--std=c++11" go env -w CGO_CPPFLAGS="-IC:\opencv\build\install\include" go env -w CGO_LDFLAGS="-LC:\opencv\build\install\x64\mingw\lib -lopencv_core452 -lopencv_face452 -lopencv_videoio452 -lopencv_imgproc452 -lopencv_highgui452 -lopencv_imgcodecs452 -lopencv_objdetect452 -lopencv_features2d452 -lopencv_video452 -lopencv_dnn452 -lopencv_xfeatures2d452 -lopencv_plot452 -lopencv_tracking452 -lopencv_img_hash452"
其中路径修改为你的OpenCV目录;如果使用了不同版本的OpenCV,修改452为相应的版本号。使用方法:
go run -tags customenv cmd\version\main.go
或
go run cmd\version\main.go
运行时弹出exit status 3221225781怎么办?
解决办法:在实践中,我使用的地址跟gocv官方提供的不一样。根据github上的反馈,似乎使用gocv官方的那个路径会有问题,使用默认路径即可。