
gocv/opencv,适用于Linux、macOS和Windows系统,旨在使Go语言成为与OpenCV生态系统最新发展兼容的“一等”客户端。
GoCV支持使用Nvidia GPU的CUDA硬件加速,详情参见CUDA README;同时支持Intel OpenVINO工具包,详情参见OpenVINO README。
以下示例打开设备“0”(通常为默认摄像头),读取视频帧并在GUI窗口显示:
gopackage main import ( "gocv.io/x/gocv" ) func main() { webcam, _ := gocv.OpenVideoCapture(0) window := gocv.NewWindow("Hello") img := gocv.NewMat() for { webcam.Read(&img) window.IMShow(img) window.WaitKey(1) } }
!GoCV
该示例打开摄像头,使用级联分类器检测人脸并绘制绿色矩形框:
gopackage main import ( "fmt" "image/color" "gocv.io/x/gocv" ) func main() { // 设置使用视频捕获设备0 deviceID := 0 // 打开摄像头 webcam, err := gocv.OpenVideoCapture(deviceID) if err != nil { fmt.Println(err) return } defer webcam.Close() // 打开显示窗口 window := gocv.NewWindow("Face Detect") defer window.Close() // 准备图像矩阵 img := gocv.NewMat() defer img.Close() // 人脸检测框颜色(蓝色) blue := color.RGBA{0, 0, 255, 0} // 加载人脸分类器 classifier := gocv.NewCascadeClassifier() defer classifier.Close() if !classifier.Load("data/haarcascade_frontalface_default.xml") { fmt.Println("错误:无法读取分类器文件 data/haarcascade_frontalface_default.xml") return } fmt.Printf("开始读取摄像头设备: %v\n", deviceID) for { if ok := webcam.Read(&img); !ok { fmt.Printf("无法读取设备 %v\n", deviceID) return } if img.Empty() { continue } // 检测人脸 rects := classifier.DetectMultiScale(img) fmt.Printf("发现 %d 个人脸\n", len(rects)) // 在图像上绘制人脸矩形框 for _, r := range rects { gocv.Rectangle(&img, r, blue, 3) } // 在窗口显示图像,等待1毫秒 window.IMShow(img) window.WaitKey(1) } }
项目cmd目录提供多种实用命令行工具示例:
安装GoCV前需先安装匹配版本的OpenCV(当前需OpenCV 4.5.3),以下是各系统安装指南。
克隆仓库:
shellcd $HOME/folder/with/your/src/ git clone [***] cd gocv
使用Makefile安装OpenCV 4.5.3:
shellmake install
如需静态库:
shellmake install BUILD_SHARED_LIBS=OFF
成功安装后将显示:
gocv version: 0.28.0 opencv lib version: 4.5.3
参见cuda目录获取详细说明。
shellcd $HOME/folder/with/gocv/ make install_all
如需静态库:
shellmake install_all BUILD_SHARED_LIBS=OFF
shellcd $HOME/src/gocv.io/x/gocv go run ./cmd/version/main.go
应输出:
gocv version: 0.28.0 opencv lib version: 4.5.3
禁用pkg-config自动配置,手动设置CGO环境变量:
shellexport CGO_CPPFLAGS="-I/usr/local/include" export CGO_LDFLAGS="-L/usr/local/lib -lopencv_core -lopencv_face -lopencv_videoio -lopencv_imgproc -lopencv_highgui -lopencv_imgcodecs -lopencv_objdetect -lopencv_features2d -lopencv_video -lopencv_dnn -lopencv_xfeatures2d" go run -tags customenv ./cmd/version/main.go
安装Homebrew后执行:
shellbrew install opencv pkgconfig
验证安装:
shellcd $HOME/folder/with/your/src/gocv go run ./cmd/version/main.go
C:\Program Files\mingw-w64\x86_64-7.3.0-posix-seh-rt_v5-rev2\mingw64\bincmdchdir %GOPATH%\src\gocv.io\x\gocv win_build_opencv.cmd
C:\opencv\build\install\x64\mingw\bincmdgo run cmd\version\main.go
shellcd $HOME/folder/with/your/src/ git clone [***] cd gocv make install_raspi
项目提供Dockerfile,可通过Makefile快速构建:
shellmake docker
指定Go版本:
shellmake docker GOVERSION='1.15'
安装依赖:
shellbrew cask install xquartz brew install socat
安装后需注销并重新登录
配置XQuartz:
启动socat代理:
shellsocat TCP-LISTEN:6000,reuseaddr,fork UNIX-CLIENT:\"$DISPLAY\"
运行容器:
shelldocker run -it --rm -e DISPLAY=docker.for.mac.host.internal:0 your-gocv-app
注意:Docker for Mac不支持摄像头设备,无法运行依赖摄像头的应用
GoCV的Mat对象需显式关闭以避免内存泄漏,可使用-tags matprofile构建标签启用内存分析:
shellgo run -tags matprofile cmd/version/main.go
通过gocv.MatProfile.Count()获取未释放Mat数量,或集成HTTP调试接口监控:
goimport _ "net/http/pprof" // 启动HTTP服务后访问 http://localhost:6060/debug/pprof/gocv.io/x/gocv.Mat
===FULL_DESC===# GoCV
,适用于Linux、macOS和Windows系统,旨在使Go语言成为与OpenCV生态系统最新发展兼容的"一等"客户端。
GoCV支持使用Nvidia GPU的CUDA硬件加速,详情参见CUDA README;同时支持Intel OpenVINO工具包,详情参见OpenVINO README。
以下示例打开设备"0"(通常为默认摄像头),读取视频帧并在GUI窗口显示:
gopackage main import ( "gocv.io/x/gocv" ) func main() { webcam, _ := gocv.OpenVideoCapture(0) window := gocv.NewWindow("Hello") img := gocv.NewMat() for { webcam.Read(&img) window.IMShow(img) window.WaitKey(1) } }
!GoCV
该示例打开摄像头,使用级联分类器检测人脸并绘制绿色矩形框:
gopackage main import ( "fmt" "image/color" "gocv.io/x/gocv" ) func main() { // 设置使用视频捕获设备0 deviceID := 0 // 打开摄像头 webcam, err := gocv.OpenVideoCapture(deviceID) if err != nil { fmt.Println(err) return } defer webcam.Close() // 打开显示窗口 window := gocv.NewWindow("Face Detect") defer window.Close() // 准备图像矩阵 img := gocv.NewMat() defer img.Close() // 人脸检测框颜色(蓝色) blue := color.RGBA{0, 0, 255, 0} // 加载人脸分类器 classifier := gocv.NewCascadeClassifier() defer classifier.Close() if !classifier.Load("data/haarcascade_frontalface_default.xml") { fmt.Println("错误:无法读取分类器文件 data/haarcascade_frontalface_default.xml") return } fmt.Printf("开始读取摄像头设备: %v\n", deviceID) for { if ok := webcam.Read(&img); !ok { fmt.Printf("无法读取设备 %v\n", deviceID) return } if img.Empty() { continue } // 检测人脸 rects := classifier.DetectMultiScale(img) fmt.Printf("发现 %d 个人脸\n", len(rects)) // 在图像上绘制人脸矩形框 for _, r := range rects { gocv.Rectangle(&img, r, blue, 3) } // 在窗口显示图像,等待1毫秒 window.IMShow(img) window.WaitKey(1) } }
项目cmd目录提供多种实用命令行工具示例:


manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务