Go OpenCV binding

OpenCV 的 Go 绑定 / 2.x API 在 gocv 中 / 1.x API 在 opencv 中。(Go bindings for OpenCV / 2.x API in gocv / 1.x API in opencv)

  • 所有者: go-opencv/go-opencv
  • 平台: Linux, Mac, Windows
  • 許可證: BSD 3-Clause "New" or "Revised" License
  • 分類:
  • 主題:
  • 喜歡:
    0
      比較:

Github星跟蹤圖

Go OpenCV 绑定

用于 OpenCV 的 Golang 绑定。

通过 CGO 进行 OpenCV 1.x C API 绑定,通过 SWIG 进行 OpenCV 2+ C++ API(GoCV)绑定。

免责声明

这是 chai 的 go-opencv 的一个分支,它仅通过 CGO 支持 OpenCV1,并且所有 OpenCV1 包装程序的功劳(gocv/ 文件夹中的文件除外)应主要归于 Chai。 在分叉时(2013年12月9日),原始项目处于非活动状态,并托管在 Google Code 上,这对社区的贡献有点不便。 因此,我决定在 Github 上托管一个分叉,以便人们可以轻松地为该项目做出贡献。 从那时起,社区添加了一些补丁,还添加了一些实验性的 OpenCV 2 包装器。 这意味着与原始项目相比,该分叉的运行方式略有不同。 但是,现在原始项目似乎再次处于活动状态,并从2014年8月25日开始移至 GitHub。非常欢迎将这两个项目合并的工作。

安装

Linux 和 Mac OS X

安装 Go 和 OpenCV,您可能想通过 apt-get 或 homebrew 来安装它们。

您可以参考链接来安装所需的软件包。

go get github.com/go-opencv/go-opencv
cd $GOPATH/src/github.com/go-opencv/go-opencv/samples
go run hellocv.go

Windows

安装 Go 和 MinGw

安装 OpenCV-2.4.x 到 MinGW 目录

# libopencv*.dll --> ${MinGWRoot}\bin
# libopencv*.lib --> ${MinGWRoot}\lib
# include\opencv --> ${MinGWRoot}\include\opencv
# include\opencv2 --> ${MinGWRoot}\include\opencv2

go get github.com/go-opencv/go-opencv
cd ${GoOpenCVRoot}/trunk/samples && go run hellocv.go

[WIP] OpenCV2 (GoCV)

在 OpenCV 2.x+ 之后,核心团队不再开发和维护 C API。 因此,CGO 将不会用于 CV2 绑定。 相反,我们使用 SWIG 进行包装。 目前正在开发对 OpenCV2 的支持,整个代码将放在 gocv 软件包下。

如果要使用 CV2 的 API,请参阅 gocv/ 目录下的代码。 CV2 包装器的文档还不多,但是您仍可以在 *_test.go 中找到示例用法。

另请注意,OpenCV 中的基本数据结构(例如 cv::Mat,cv::Point3f)目前已部分包装。 有关如何使用这些类型的更多详细信息,请参阅 GoCV 的自述文件。

要求:我们将基于 mat64 构建包装器,因为操作底层数据要容易得多。 在大多数情况下,不需要访问原始 CV 数据,例如 cv::Mat 可以与 *mat64.Dense 进行相互转换。

示例

OpenCV2 的 initCameraMatrix2D

package main

import . "github.com/go-opencv/go-opencv/gocv"
import "github.com/gonum/matrix/mat64"

func main() {

    objPts := mat64.NewDense(4, 3, []float64{
        0, 25, 0,
        0, -25, 0,
        -47, 25, 0,
        -47, -25, 0})

    imgPts := mat64.NewDense(4, 2, []float64{
        1136.4140625, 1041.89208984,
        1845.33190918, 671.39581299,
        302.73373413, 634.79998779,
        1051.46154785, 352.76107788})

    camMat := GcvInitCameraMatrix2D(objPts, imgPts)
    fmt.Println(camMat)
}

Resizing(缩放)

package main

import opencv "github.com/go-opencv/go-opencv/opencv"

func main() {
    filename := "bert.jpg"
    srcImg := opencv.LoadImage(filename)
    if srcImg == nil {
        panic("Loading Image failed")
    }
    defer srcImg.Release()
    resized1 := opencv.Resize(srcImg, 400, 0, 0)
    resized2 := opencv.Resize(srcImg, 300, 500, 0)
    resized3 := opencv.Resize(srcImg, 300, 500, 2)
    opencv.SaveImage("resized1.jpg", resized1, nil)
    opencv.SaveImage("resized2.jpg", resized2, nil)
    opencv.SaveImage("resized3.jpg", resized3, nil)
}

Webcam

还有一个很酷的例子是由 @saratovsource 创建的,它演示了如何使用网络摄像头

cd samples
go run webcam.go

更多...

你可以在此找到更多的例子:https://github.com/go-opencv/go-opencv/tree/master...

(First edition: vz edited at 2019.09.22)


主要指標

概覽
名稱與所有者go-opencv/go-opencv
主編程語言Go
編程語言Go (語言數: 4)
平台Linux, Mac, Windows
許可證BSD 3-Clause "New" or "Revised" License
所有者活动
創建於2013-12-09 09:43:26
推送於2023-03-30 20:19:32
最后一次提交2019-01-15 08:07:42
發布數0
用户参与
星數1.3k
關注者數59
派生數198
提交數213
已啟用問題?
問題數72
打開的問題數38
拉請求數57
打開的拉請求數5
關閉的拉請求數1
项目设置
已啟用Wiki?
已存檔?
是復刻?
已鎖定?
是鏡像?
是私有?

Go OpenCV binding

Join the chat at https://gitter.im/lazywei/go-opencv

A Golang binding for OpenCV.

OpenCV 1.x C API bindings through CGO, and OpenCV 2+ C++ API (GoCV) through SWIG.


Disclaimer

This is a fork of chai's go-opencv, which has only OpenCV1 support through CGO, and all credits for OpenCV1 wrapper (except files in gocv/ folder) should mainly go to Chai. At the time of the fork (Dec 9, 2013) the original project was inactive and was hosted on Google Code, which was a little inconvenient for community contribution. Hence, I decided to host a fork on Github so people can contribute to this project easily. Since then, some patches were added by community, and some experimental OpenCV 2 wrappers were added as well. That means this fork went on a little bit divergent way comparing to the origin project. However, now the origin project seems to be active again and be moved to GitHub starting from Aug 25, 2014. Efforts to merge the two projects are very welcome.


Install

Linux & Mac OS X

Install Go and OpenCV, you might want to install both of them via apt-get or homebrew.

You can reference the link to install required packages.

go get github.com/go-opencv/go-opencv
cd $GOPATH/src/github.com/go-opencv/go-opencv/samples
go run hellocv.go

Windows

  • Install Go and MinGw
  • install OpenCV-2.4.x to MinGW dir
# libopencv*.dll --> ${MinGWRoot}\bin
# libopencv*.lib --> ${MinGWRoot}\lib
# include\opencv --> ${MinGWRoot}\include\opencv
# include\opencv2 --> ${MinGWRoot}\include\opencv2

go get github.com/go-opencv/go-opencv
cd ${GoOpenCVRoot}/trunk/samples && go run hellocv.go

[WIP] OpenCV2 (GoCV)

After OpenCV 2.x+, the core team no longer develop and maintain C API. Therefore, CGO will not be used in CV2 binding. Instead, we are using SWIG for wrapping. The support for OpenCV2 is currently under development, and whole code will be placed under gocv package.

If you want to use CV2's API, please refer to the code under gocv/ directory. There is no too many documents for CV2 wrapper yet, but you can still find the example usages in *_test.go.

Please also note that the basic data structures in OpenCV (e.g., cv::Mat, cv::Point3f) are wrapped partially for now. For more detail on how to use these types, please refer to GoCV's README.

Requirement: we will build the wrappers based on mat64, given it is much easier to manipulate the underlaying data. In most case, it is not necessary to access the original CV data, e.g., cv::Mat can be converted from/to *mat64.Dense.

Example

OpenCV2's initCameraMatrix2D

package main

import . "github.com/go-opencv/go-opencv/gocv"
import "github.com/gonum/matrix/mat64"

func main() {

	objPts := mat64.NewDense(4, 3, []float64{
		0, 25, 0,
		0, -25, 0,
		-47, 25, 0,
		-47, -25, 0})

	imgPts := mat64.NewDense(4, 2, []float64{
		1136.4140625, 1041.89208984,
		1845.33190918, 671.39581299,
		302.73373413, 634.79998779,
		1051.46154785, 352.76107788})

	camMat := GcvInitCameraMatrix2D(objPts, imgPts)
	fmt.Println(camMat)
}

Resizing

package main

import opencv "github.com/go-opencv/go-opencv/opencv"

func main() {
	filename := "bert.jpg"
	srcImg := opencv.LoadImage(filename)
	if srcImg == nil {
		panic("Loading Image failed")
	}
	defer srcImg.Release()
	resized1 := opencv.Resize(srcImg, 400, 0, 0)
	resized2 := opencv.Resize(srcImg, 300, 500, 0)
	resized3 := opencv.Resize(srcImg, 300, 500, 2)
	opencv.SaveImage("resized1.jpg", resized1, nil)
	opencv.SaveImage("resized2.jpg", resized2, nil)
	opencv.SaveImage("resized3.jpg", resized3, nil)
}

Webcam

Yet another cool example is created by @saratovsource which demos how to use webcam:

cd samples
go run webcam.go

More

You can find more samples at: https://github.com/go-opencv/go-opencv/tree/master/samples

How to contribute

  • Fork this repo

  • Clone the main repo, and add your fork as a remote

    git clone https://github.com/go-opencv/go-opencv.git
    cd go-opencv
    git remote rename origin upstream
    git remote add origin https://github.com/your_github_account/go-opencv.git
    
  • Create new feature branch

    git checkout -b your-feature-branch
    
  • Commit your change and push it to your repo

    git commit -m 'new feature'
    git push origin your-feature-branch
    
  • Open a pull request!