go-images
scikit-image-style image processing in pure Go. No OpenCV, no libvips.
go-images brings the scikit-image vocabulary to Go — blur, edges, morphology, geometry and colour transforms over an RGBA raster — in pure Go, with cgo disabled. Load and save PNG/JPEG, or decode/encode in memory, then run gaussian_blur, sobel, canny, erode/dilate, resize, otsu and more.
Image processing in most languages means binding OpenCV or libvips (both C). go-images is a single portable module that cross-compiles to a static binary, accelerated by go-asmgen SIMD. It beats scikit-image on the separable hot operations (box blur, Sobel). 100% test coverage is the bar, validated against scikit-image.
Why go-images
Image processing in most languages means binding a C library — OpenCV, libvips,
ImageMagick. go-images brings the scikit-image vocabulary — filters,
edge detectors, morphology, geometry and colour transforms — to Go with
no cgo, cross-compiling to a static binary everywhere. The separable
hot operations are go-asmgen SIMD-accelerated, so it beats scikit-image
on box blur and Sobel. It is the cgo-free image processor the Go and Ruby ecosystems lacked.
Repositories
images
The library. Filters (GaussianBlur/BoxBlur/Median/Sharpen), edges (Sobel/Prewitt/Scharr/Laplacian/Canny), morphology (Erode/Dilate), geometry (Resize/Rotate/Crop/Flip), colour (Grayscale/RGBToHSV/Otsu), and PNG/JPEG load/save + in-memory decode/encode. SIMD kernels on amd64 (SSE2), arm64 (NEON) and s390x (vector).
depth
One picture in, two eyes out. Depth guessed from cues in the picture itself (Cues), softened (Soften), and both eyes synthesised (Views) — for a headset or a 3D display. It takes any depth map, so a real network can be substituted; it is the whole answer where none is available, including in a browser. One pass over the source columns per row, no global sort: 6.3 ms for a 4K frame on sixteen cores, 46.9 ms on a telephone. Checked against a GPU implementation of the same rule, byte for byte.
docs
Versioned documentation site (MkDocs Material): API reference, the roadmap, and honest benchmark pages versus scikit-image. Source →
brand
Logos and icons for the organization, in SVG / PNG / JPG / ICO / ICNS across colour, white and black variants.
Quality bar
- Pure Go.
CGO_ENABLED=0across the org. No OpenCV, no libvips, no native shims. - 100% test coverage. Gated in CI, validated against
scikit-image. - Faster than scikit-image on the separable hot operations (box blur, Sobel) via go-asmgen SIMD; honest where it is not.
- Multi-arch. Portable scalar core on all six 64-bit targets; SIMD kernels on amd64 / arm64 / s390x.
- BSD-3-Clause on every source file.