All Projects → esimov → Triangle

esimov / Triangle

Licence: mit
Convert images to computer generated art using delaunay triangulation.

Programming Languages

go
31211 projects - #10 most used programming language
shell
77523 projects
Makefile
30231 projects

Projects that are alternatives of or similar to Triangle

Generative art
A collection of my generative artwork, mostly with Processing in Python mode
Stars: ✭ 1,477 (-19.64%)
Mutual labels:  generative, generative-art
Snek
See https://github.com/inconvergent/weir instead
Stars: ✭ 696 (-62.13%)
Mutual labels:  generative, generative-art
Weir
A system for making generative systems
Stars: ✭ 451 (-75.46%)
Mutual labels:  generative, generative-art
Sand Spline
generative algorithm
Stars: ✭ 261 (-85.8%)
Mutual labels:  generative, generative-art
Emosaic
Mosaic image generator written in Rust!
Stars: ✭ 84 (-95.43%)
Mutual labels:  generative-art, image-processing
Generativeart
Generative Art in Go
Stars: ✭ 313 (-82.97%)
Mutual labels:  generative, generative-art
Differential Line
a generative algorithm
Stars: ✭ 606 (-67.03%)
Mutual labels:  generative, generative-art
samila
Generative Art Generator
Stars: ✭ 750 (-59.19%)
Mutual labels:  generative-art, generative
Pixelizator
Swift/Python image pixelizer 🖼️.
Stars: ✭ 53 (-97.12%)
Mutual labels:  image-processing, pixel
Linearx Font
Procedurally generated fonts
Stars: ✭ 41 (-97.77%)
Mutual labels:  generative, generative-art
desert
A fast (?) random sampling drawing library
Stars: ✭ 61 (-96.68%)
Mutual labels:  generative-art, generative
Fracture
generative algorithm
Stars: ✭ 99 (-94.61%)
Mutual labels:  generative, generative-art
glitch-image
🖼 Generate and save unique glitchy images
Stars: ✭ 46 (-97.5%)
Mutual labels:  generative-art, generative
Pts
A library for visualization and creative-coding
Stars: ✭ 4,628 (+151.8%)
Mutual labels:  generative, generative-art
rtriangulate
A Rust implementation of the Bourke Delaunay triangulation algorithm.
Stars: ✭ 20 (-98.91%)
Mutual labels:  triangulation, delaunay
Pixelate
Simple Android library to pixelate images or certain areas of an image.
Stars: ✭ 602 (-67.25%)
Mutual labels:  image-processing, pixel
delaunay-triangulation-algorithm
Delaunay Triangulation
Stars: ✭ 25 (-98.64%)
Mutual labels:  triangulation, delaunay
ZzSprite
Pixel Art Sprite Generator
Stars: ✭ 85 (-95.38%)
Mutual labels:  generative-art, generative
Sofloo Spot
Click Randomize
Stars: ✭ 37 (-97.99%)
Mutual labels:  generative, generative-art
Genartlib
Utilities for creating generative artwork with Clojure
Stars: ✭ 91 (-95.05%)
Mutual labels:  generative, generative-art

Triangle logo

Build Status GoDoc license release homebrew

▲ Triangle is a tool for generating triangulated image using delaunay triangulation. It takes a source image and converts it to an abstract image composed of tiles of triangles.

Sample image

The process

  • First the image is blured out to smoth out the sharp pixel edges. The more blured an image is the more diffused the generated output will be.
  • Second the resulted image is converted to grayscale mode.
  • Then a sobel filter operator is applied on the grayscaled image to obtain the image edges. An optional threshold value is applied to filter out the representative pixels of the resulted image.
  • Lastly the delaunay algorithm is applied on the pixels obtained from the previous step.
blur = tri.Stackblur(img, uint32(width), uint32(height), uint32(*blurRadius))
gray = tri.Grayscale(blur)
sobel = tri.SobelFilter(gray, float64(*sobelThreshold))
points = tri.GetEdgePoints(sobel, *pointsThreshold, *maxPoints)

triangles = delaunay.Init(width, height).Insert(points).GetTriangles()

Features

  • Can process recursively whole directories and subdirectories concurrently.
  • Supports various image types.
  • There is no need to specify the file type, the CLI tool can recognize automatically the input and output file type.
  • Can accept image URL as parameter for the -in flag.
  • Possibility to save the generated image as an SVG file.
  • The generated SVG file can be accessed from the Web browser directly.
  • Clean and intuitive API. The API not only that accepts image files but can also work with image data. This means that the Draw method can be invoked even on data streams. Check this demo for reference.
  • Support for pipe names (possibility to pipe in and pipe out the source and destination image).

Head over to this subtopic to get a better understanding of the supported features.

Installation and usage

$ go get -u -f github.com/esimov/triangle/cmd/triangle
$ go install

You can also download the binary file from the releases folder.

MacOS (Brew) install

The library can be installed via Homebrew too.

$ brew install triangle

Supported commands

$ triangle --help

The following flags are supported:

Flag Default Description
in n/a Source image
out n/a Destination image
blur 4 Blur radius
pts 2500 Maximum number of points
noise 0 Noise factor
th 20 Points threshold
sobel 10 Sobel filter threshold
solid false Use solid stroke color (yes/no)
wf 0 Wireframe mode (0: without stroke, 1: with stroke, 2: stroke only)
stroke 1 Stroke width
gray false Output in grayscale mode
web false Open the SVG file in the web browser
bg ' ' Background color (specified as hex value)
c system spec. Number of files to process concurrently

Key features

Process multiple images from a directory concurrently

The CLI tool also let you process multiple images from a directory concurrently. You only need to provide the source and the destination folder by using the -in and -out flags.

$ triangle -in <input_folder> -out <output-folder>

You can provide also an image file URL for the -in flag.

$ triangle -in <image_url> -out <output-folder>

Pipe names

The CLI tool accepts also pipe names, which means you can use stdin and stdout without the need of providing a value for the -in and -out flag directly since these defaults to -. For this reason it's possible to use curl for example for downloading an image from the internet and invoke the triangulation process over it directly without the need of getting the image first and calling ▲ Triangle afterwards.

Here are some examples using pipe names:

$ curl -s <image_url> | triangle > out.jpg
$ cat input/source.jpg | triangle > out.jpg
$ triangle -in input/source.jpg > out.jpg
$ cat input/source.jpg | triangle -out out.jpg
$ triangle -out out.jpg < input/source.jpg

Background color

You can specify a background color in case of transparent background images (.png) by using the -bg flag. This flag accepts a hexadecimal string value. For example setting the flag to -bg=#ffffff00 will set the alpha channel of the resulted image transparent.

Output as image or SVG

By default the output is saved to an image file, but you can export the resulted vertices even to an SVG file. The CLI tool can recognize the output type directly from the file extension. This is a handy addition for those who wish to generate large images without guality loss.

$ triangle -in samples/input.jpg -out output.svg

Using with -web flag you can access the generated svg file directly on the web browser.

$ triangle -in samples/input.jpg -out output.svg -web=true

Supported output types

The following output file types are supported: .jpg, .jpeg, .png, .bmp, .svg.

Tweaks

Setting a lower points threshold, the resulted image will be more like a cubic painting. You can even add a noise factor, generating a more artistic, grainy image.

Here are some examples you can experiment with:

$ triangle -in samples/input.jpg -out output.png -wf=0 -pts=3500 -stroke=2 -blur=2
$ triangle -in samples/input.jpg -out output.png -wf=2 -pts=5500 -stroke=1 -blur=10

Examples

Sample_0 Sample_1 Sample_11 Sample_8

License

Copyright © 2018 Endre Simo

This project is under the MIT License. See the LICENSE file for the full license text.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].