Go bindings for OpenCV / 2.x API in gocv / 1.x API in opencv

Overview

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!

Issues
  • Package opencv was not found in the pkg-config search path.

    Package opencv was not found in the pkg-config search path.

    Hi,

    I am newbie Go developer and I am trying to test your project but when I try to execute:

    go run hellocv.go
    

    I receive the following message:

    exec: "pkg-config": executable file not found in $PATH
    

    How to fix it?

    opened by jabrena 23
  • "could not determine kind of name for C.cvCeil / C.cvFloor / C.cvIsInf / C.cvIsNaN / C.cvRound"

    When running go run hellocv.go, I get:

    # github.com/lazywei/go-opencv/opencv
    could not determine kind of name for C.cvCeil
    could not determine kind of name for C.cvFloor
    could not determine kind of name for C.cvIsInf
    could not determine kind of name for C.cvIsNaN
    could not determine kind of name for C.cvRound
    

    Posting gcc -v output too, just in case.

    Using built-in specs.
    COLLECT_GCC=gcc
    COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.8/lto-wrapper
    Target: x86_64-linux-gnu
    Configured with: ../src/configure -v --with-pkgversion='Ubuntu 4.8.4-2ubuntu1~14.04' --with-bugurl=file:///usr/share/doc/gcc-4.8/README.Bugs --enable-languages=c,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.8 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.8 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --disable-libmudflap --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-4.8-amd64 --with-arch-directory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
    Thread model: posix
    gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04)
    
    opened by filiptc 9
  • Interfacing with core image library

    Interfacing with core image library

    Do you have any examples of working with opencv and golang's native image objects? Just before I start digging. I assume there'll be some encoding/decoding back and forth.

    opened by dpup 8
  • Memory leak

    Memory leak

    I tried to reproduce a C++ code that did motion detection using this package and I have a memory leak that I can't seem to find the source of. I'm not sure if it's from my code or from one of the bindings. Can someone look at my code and help me out with this? If it's not my code, maybe this will help find the possible source in the binding code.

    https://gist.github.com/fredcarle/2b73b82ed2657b297824fe55caf94b52#file-motiondetect-go

    opened by fredcarle 7
  • Error: could not determine kind of name for C.cvGetImageROI (etc...)

    Error: could not determine kind of name for C.cvGetImageROI (etc...)

    I'm getting the following errors on running the samples:

    could not determine kind of name for C.cvGetImageROI
    could not determine kind of name for C.cvRawDataToScalar
    could not determine kind of name for C.cvResetImageROI
    could not determine kind of name for C.cvCreateSparseMat
    could not determine kind of name for C.cvSetZero
    could not determine kind of name for C.cvLine
    could not determine kind of name for C.cvCloneMat
    could not determine kind of name for C.cvReleaseSparseMat
    could not determine kind of name for C.cvIncRefData
    could not determine kind of name for C.cvInitImageHeader
    could not determine kind of name for C.cvReleaseImageHeader
    could not determine kind of name for C.cvCloneImage
    could not determine kind of name for C.cvGetCols
    could not determine kind of name for C.cvGetCol
    
    opened by matheuscandido 7
  • Ability to load in a buffer instead of a file path

    Ability to load in a buffer instead of a file path

    When I have a web app with a multipart form file coming in, I have to save it to disk so I can later do image := opencv.LoadImage(filepath). That seems inefficient. Would it be possible to create an Image object from a byte buffer instead?

    opened by peterbe 5
  • Error: Conflicting types

    Error: Conflicting types

    When I try to run any of the samples on Ubuntu with Open CV 2.4.0 I get the following error:

    # _/usr/share/go/src/pkg/github.com/lazywei/go-opencv/opencv
    In file included from $WORK/_/usr/share/go/src/pkg/github.com/lazywei/go-opencv/opencv/_obj/_cgo_export.c:2:0:
    highgui.go:15:19: error: conflicting types for ‘int64’
    /usr/local/include/opencv2/core/types_c.h:153:17: note: previous declaration of ‘int64’ was here
    highgui.go:16:28: error: conflicting types for ‘uint64’
    /usr/local/include/opencv2/core/types_c.h:154:18: note: previous declaration of ‘uint64’ was here
    
    opened by viktorstaikov 5
  • Samples not working

    Samples not working

    Hi,

    I tried to run the hellocv example and got this error:

    $ go run hellocv.go

    github.com/lazywei/go-opencv/opencv

    37: error: 'CV_INPAINT_TELEA' undeclared (first use in this function) 37: error: 'CV_INPAINT_NS' undeclared (first use in this function) 38: error: 'cvInpaint' undeclared (first use in this function)

    I use

    Ubuntu 13.10 Go: go1.2 linux/amd64 OpenCV: libopencv-dev (2.4.5+dfsg-0ubuntu4)

    opened by beldur 5
  • ToImage would raise panic: runtime error: index out of range.

    ToImage would raise panic: runtime error: index out of range.

    code blow:

    	filename := "./test.jpeg"
    	img := opencv.LoadImage(filename, opencv.CV_LOAD_IMAGE_UNCHANGED)
    	if img == nil {
    		fmt.Printf("LoadImage fail: %s\n", filename)
    		return
    	}
    	srcImage := img.ToImage()
    	cvImage := opencv.FromImage(srcImage)
    	srcImage = cvImage.ToImage()
    	imaging.Save(srcImage, "cvout.jpeg")
    	defer img.Release()
    
    

    Any idea?

    opened by lbeeon 4
  • Add subtract

    Add subtract

    Implemented the following C APIs:

    • cvAdd() - Adds two arrays (or images)
    • cvAddS() - Adds an array plus a scalar
    • cvSub() - Subtracts two arrays
    • cvSubS() - Subtracts an array by a scalar
    • cvSubRS() - Subtracts a scalar by an array

    These functions allow for an optional mask and I created two golang calls for each one. The default opencv.Add() opencv.Subtract(), etc. which doesn't use a mask. And then separate functions opencv.AddWithMask(), opencv.SubWithMask() that does use the masks.

    I also added tests for each call with and without masks.

    opened by kevinabrandon 4
  • ld.exe cannot find -lopencv_core249.dll

    ld.exe cannot find -lopencv_core249.dll

    I compiled OpenCV 2.4.9 with cmake and mingw on Windows 7. The library works fine with C++, but with these Go bindings I get the following errors when running any of the samples.

    PS C:\Repositories\Go\src\github.com\lazywei\go-opencv\samples> go run .\hellocv.go
    # github.com/lazywei/go-opencv/opencv
    c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: cannot find -lopencv_core242.dll
    c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: cannot find -lopencv_imgproc242.dll
    c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: cannot find -lopencv_photo242.dll
    c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: cannot find -lopencv_highgui242.dll
    c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: cannot find -lopencv_core242.dll
    c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: cannot find -lopencv_imgproc242.dll
    c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: cannot find -lopencv_photo242.dll
    c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: cannot find -lopencv_highgui242.dll
    c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: cannot find -lopencv_core242.dll
    c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: cannot find -lopencv_imgproc242.dll
    c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: cannot find -lopencv_photo242.dll
    c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: cannot find -lopencv_highgui242.dll
    c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: cannot find -lopencv_core242.dll
    c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: cannot find -lopencv_imgproc242.dll
    c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: cannot find -lopencv_photo242.dll
    c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: cannot find -lopencv_highgui242.dll
    c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: cannot find -lopencv_core242.dll
    c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: cannot find -lopencv_imgproc242.dll
    c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: cannot find -lopencv_photo242.dll
    c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: cannot find -lopencv_highgui242.dll
    c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: cannot find -lopencv_core242.dll
    c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: cannot find -lopencv_imgproc242.dll
    c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: cannot find -lopencv_photo242.dll
    c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: cannot find -lopencv_highgui242.dll
    c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: cannot find -lopencv_core242.dll
    c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: cannot find -lopencv_imgproc242.dll
    c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: cannot find -lopencv_photo242.dll
    c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: cannot find -lopencv_highgui242.dll
    collect2.exe: error: ld returned 1 exit status
    PS C:\Repositories\Go\src\github.com\lazywei\go-opencv\samples>
    

    I am not that familiar with Windows world. I followed your Windows installation method to the latter except I pulled your fork instead of the code.google.com one. In Linux this works fine.

    opened by TMKCodes 4
  • Install won't work

    Install won't work

    I try to run steps from Install Linux & Mac OS X:

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

    And I have this error:

    go run hellocv.go
    # pkg-config --cflags  -- opencv
    Package opencv was not found in the pkg-config search path.
    Perhaps you should add the directory containing `opencv.pc'
    to the PKG_CONFIG_PATH environment variable
    No package 'opencv' found
    pkg-config: exit status 1
    
    cat /etc/os-release
    
    NAME="Ubuntu"
    VERSION="18.04.2 LTS (Bionic Beaver)"
    ID=ubuntu
    ID_LIKE=debian
    PRETTY_NAME="Ubuntu 18.04.2 LTS"
    VERSION_ID="18.04"
    HOME_URL="https://www.ubuntu.com/"
    SUPPORT_URL="https://help.ubuntu.com/"
    BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
    PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
    VERSION_CODENAME=bionic
    UBUNTU_CODENAME=bionic
    

    Moreover I've already installed all from this link:

    # [compiler]
    apt-get install build-essential
    # [required]
    apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
    # [optional]
    apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
    
    opened by cn007b 2
  • No headless option for running in backend

    No headless option for running in backend

    Since Go is often run headless there should be an option to compile go-opencv and opencv without GUI libraries. Currently one has to setup a whole desktop environment even for servers.

    opened by dkull 0
  • IMRead() with IMReadUnchanged flag ignores EXIF orientation, when it should preserve it

    IMRead() with IMReadUnchanged flag ignores EXIF orientation, when it should preserve it

    It seems from the OpenCV documentation that the default behavior should be to preserve the EXIF orientation of an image, unless the IMReadIgnoreOrientation flag is set, but this is not happening.

    When I use the following, to read a .png, the EXIF orientation is ignored:

    img := gocv.IMRead(name, gocv.IMReadUnchanged)

    But when I use IMReadColor, the orientation is preserved. This makes the .png lose it's transparency though:

    img := gocv.IMRead(name, gocv.IMReadColor)

    If EXIF information are embedded in the image file, the EXIF orientation will be taken into account and thus the image will be rotated accordingly except if the flag IMREAD_IGNORE_ORIENTATION is passed. https://docs.opencv.org/master/d4/da8/group__imgcodecs.html#ga288b8b3da0892bd651fce07b3bbd3a56

    IMREAD_IGNORE_ORIENTATION  | If set, do not rotate the image according to EXIF's orientation flag. https://docs.opencv.org/master/d4/da8/group__imgcodecs.html#ga61d9b0126a3e57d9277ac48327799c80

    opened by Alexn117 0
  • /usr/bin/ld: cannot find -lIlmImf, -llibjasper, -llibtiff, -llibjpeg

    /usr/bin/ld: cannot find -lIlmImf, -llibjasper, -llibtiff, -llibjpeg

    I installed OpenCV 2.4.x, and try run sample but it showing `ld' errors. How can fix it?

    :+1: :~/go/src/github.com/go-opencv/go-opencv/samples$ go run hellocv.go 
    # github.com/go-opencv/go-opencv/opencv
    /usr/bin/ld: cannot find -lIlmImf
    /usr/bin/ld: cannot find -llibjasper
    /usr/bin/ld: cannot find -llibtiff
    /usr/bin/ld: cannot find -llibjpeg
    /usr/bin/ld: cannot find -lextra_component-NOTFOUND
    collect2: error: ld returned 1 exit status
    
    opened by gnh1201 0
  • identifier

    identifier "_Ctype_CvRect" may conflict

    Hello, Thanks for go-opencv! When I run your hellocv.go example I got this error:

    github.com/go-opencv/go-opencv/opencv ../opencv/cvaux.go:66:21: identifier "_Ctype_CvRect" may conflict with identifiers generated by cgo

    I am runing go 1.12 Please help, Thanks

    opened by zmajew 7
Owner
go-opencv
go-opencv
使用 Golang+Chrome+OpenCV 破解腾讯滑块验证码

一、背景 滑块验证码是一项人机识别技术,操作简单,真人体验好,机器识别效果也不差,可以有效防止脚本做任务,增加机器脚本薅羊毛的难度。但其破解也相对简单,这里演示一个Demo,以了解。通过 OpenCV 匹配找出滑块位置,计算出滑动距离,然后模拟 js 鼠标事件,在 Chrome 控制台执行脚本,完成

Omigo 44 Jun 9, 2022
Cgo bindings to PulseAudio's Simple API, for easily playing or capturing raw audio.

pulse-simple Cgo bindings to PulseAudio's Simple API, for easily playing or capturing raw audio. The full Simple API is supported, including channel m

Tommy 20 Jun 17, 2022
Vulkan API bindings for Go programming language

Golang Bindings for Vulkan API Package vulkan provides Go bindings for Vulkan — a low-overhead, cross-platform 3D graphics and compute API. Updated Oc

null 631 Jun 19, 2022
Go bindings for GLFW 3

GLFW 3.3 for Go Installation GLFW C library source is included and built automatically as part of the Go package. But you need to make sure you have d

OpenGL with Golang 1.3k Jun 24, 2022
Go bindings for GLFW 3

GLFW 3.3 for Go Installation GLFW C library source is included and built automatically as part of the Go package. But you need to make sure you have d

OpenGL with Golang 1.3k Jun 22, 2022
Go bindings for OpenGL (generated via glow)

gl This repository holds Go bindings to various OpenGL versions. They are auto-generated using Glow. Features: Go functions that mirror the C specific

OpenGL with Golang 911 Jun 26, 2022
Go bindings to OpenGL Utility Library

GLU This package offers minimal bindings for GLU functions. Usage go get github.com/go-gl-legacy/glu License Copyright 2012 The go-gl Authors. All ri

go-gl legacy 21 Aug 18, 2018
Go bindings for audio capture and playback with ALSA and libasound

Go ALSA bindings These bindings allow capture and playback of audio via ALSA using the alsa-lib library. Installation go get github.com/cocoonlife/goa

null 35 Mar 21, 2022
naive go bindings to GnuPlot

go-gnuplot Simple-minded functions to work with gnuplot. go-gnuplot runs gnuplot as a subprocess and pushes commands via the STDIN of that subprocess.

Sebastien Binet 26 Nov 8, 2021
go-gtk3 - GTK3 BINDINGS FOR GO

go-gtk3 - GTK3 BINDINGS FOR GO THIS IS: Hopefully GTK3 Bindings using gobject binding for Go. Goal is to have fairly complete gtk3 widgets with pango

nori satir 57 May 25, 2021
Experimental OpenAL bindings for Go.

Experimental OpenAL bindings for Go. ==================================== Everything is evolving quickly and nothing is totally done. If you want to

Peter H. Fröhlich 29 Apr 8, 2022
Go bindings for GStreamer (retired: currently I don't use/develop this package)

Retired. I don't use/develop this package anymore. Go bindings for GStreamer at a very early stage of maturity. This package is based on GLib bindings

Michał Derkacz 164 May 31, 2022
Go bindings for libVLC and high-level media player interface

Go bindings for libVLC 2.X/3.X/4.X and high-level media player interface. The package can be useful for adding multimedia capabilities to applications

Adrian-George Bostan 306 Jun 16, 2022
Go bindings for OpenCV1.1 (Dev/Zero Dependencies).

Go语言QQ群: 102319854, 1055927514 凹语言(凹读音“Wa”)(The Wa Programming Language): https://github.com/wa-lang/wa Go bindings for OpenCV1.1 PkgDoc: http://godoc

chai2010 116 Dec 12, 2021
Go cross-platform OpenGL bindings.

gl Package gl is a Go cross-platform binding for OpenGL, with an OpenGL ES 2-like API. It supports: macOS, Linux and Windows via OpenGL 2.1 backend, i

null 157 May 14, 2022
geoserver is a Go library for manipulating a GeoServer instance via the GeoServer REST API.

Geoserver geoserver Is a Go Package For Manipulating a GeoServer Instance via the GeoServer REST API. How to install: go get -v gopkg.in/hishamkaram/g

Hisham waleed karam 74 Jun 16, 2022
Go binding to ImageMagick's MagickWand C API

Go Imagick Go Imagick is a Go bind to ImageMagick's MagickWand C API. We support two compatibility branches: master (tag v2.x.x): 6.9.1-7 <= ImageMagi

Go Graphics community 1.5k Jun 21, 2022
Go Graphics - 2D rendering in Go with a simple API.

Go Graphics gg is a library for rendering 2D graphics in pure Go. Installation go get -u github.com/fogleman/gg Alternatively, you may use gopkg.in t

Michael Fogleman 3.5k Jun 21, 2022
Canvas is a Go drawing library based on OpenGL or using software rendering that is very similar to the HTML5 canvas API

Go canvas Canvas is a pure Go library that provides drawing functionality as similar as possible to the HTML5 canvas API. It has nothing to do with HT

Thomas Friedel 426 Jun 19, 2022