No description
Find a file
Chih-Wei Chang 119a8baae1 Merge pull request #44 from lazywei/cv2
Wrap OpenCV2's Calib3d module with SWIG
2015-02-15 14:20:40 +08:00
images import svn rep 2013-10-08 10:13:28 +08:00
opencv Re-organize 2015-02-13 17:12:29 +08:00
opencv2 Wrap CalibrateCamera 2015-02-15 13:59:32 +08:00
samples fix api path. 2014-12-29 21:01:19 +08:00
AUTHORS Implement basic calib3d 2015-02-06 23:08:22 +08:00
Dockerfile removed python-setuptools 2014-10-26 07:18:26 -07:00
go-opencv.go Add package file 2014-01-14 17:21:26 +04:00
INSTALL import svn rep 2013-10-08 10:13:28 +08:00
LICENSE import svn rep 2013-10-08 10:13:28 +08:00
README.md Update README 2015-02-15 14:20:20 +08:00

Go OpenCV binding

A Golang binding for OpenCV.

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

DISCLAIMER

Install

Linux & Mac OS X

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

go get github.com/lazywei/go-opencv
cd ${GoOpenCVRoot}/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 code.google.com/p/go-opencv/trunk/opencv
cd ${GoOpenCVRoot}/trunk/samples && go run hellocv.go

[WIP] OpenCV2

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.

If you want to use CV2's API, please refer to the code under opencv2/ directory. There has no too much document for CV2 wrapper yet, but you can still find the usage example in *_test.go.

Note that the basic data structures in OpenCV (e.g., cv::Mat, cv::Point3f) hasn't been wrapped fully yet. For now, we have some specific wrappers. We will try to wrapped those data structures fully as soon as possible.

Example

OpenCV2's initCameraMatrix2D

package main

import "github.com/lazywei/go-opencv/opencv2/gcv_utils"
import "github.com/lazywei/go-opencv/opencv2/gcv_calib3d"

func main() {
	objPts := gcv_utils.NewGcvPoint3fVector(int64(4))
	objPts.Set(0, gcv_utils.GetPoint3f(0, 25, 0))
	objPts.Set(1, gcv_utils.GetPoint3f(0, -25, 0))
	objPts.Set(2, gcv_utils.GetPoint3f(-47, 25, 0))
	objPts.Set(3, gcv_utils.GetPoint3f(-47, -25, 0))

	imgPts := gcv_utils.NewGcvPoint2fVector(int64(4))
	imgPts.Set(0, gcv_utils.GetPoint2f(1136.4140625, 1041.89208984))
	imgPts.Set(1, gcv_utils.GetPoint2f(1845.33190918, 671.39581299))
	imgPts.Set(2, gcv_utils.GetPoint2f(302.73373413, 634.79998779))
	imgPts.Set(3, gcv_utils.GetPoint2f(1051.46154785, 352.76107788))

	cameraMatrix := GcvInitCameraMatrix2D(objPts, imgPts)
}

Resizing

package main

import opencv "github.com/lazywei/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, 0)
	opencv.SaveImage("resized2.jpg", resized2, 0)
	opencv.SaveImage("resized3.jpg", resized3, 0)
}

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/lazywei/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/lazywei/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!


Disclaimer

This is a fork of chai's go-opencv, which has only OpenCV1 support through CGO. At the time of the fork (Dec 9, 2013) the original project was inactive, and hence I decide to host a fork on Github so people can contribute to this project easily. However, now it seems to be active again starting from Aug 25, 2014. Efforts to merge the two projects are very welcome.