In Govips, is there a functionality to overlay multiple images on a base image parallelly? There is a function - compositeMulti which takes a list of images but does it render it parallelly? Also, does it have a capability to identify which pixel of which image has to be rendered on the image , instead of iteratively going through all the images and rendering one by one.
Parallel overlaying of multiple images in govips
400 Views Asked by Calypso At
1
There are 1 best solutions below
Related Questions in GO
- How do I get all the attributes of an XML element using Go?
- Type cast custom types to base types
- Why are Revel optional func parameters in controller not working? CRUD code redundancy
- Streaming commands output progress
- single ampersand between 2 expressions
- golang goroutine use SSHAgent auth doesn't work well and throw some unexpect panic
- How do I do a literal *int64 in Go?
- Emulating `docker run` using the golang docker API
- How to print contents of channel without changing it
- Golang time zone parsing not returning the correct zone on ubuntu server
- Is os.File's Write() threadsafe?
- How to get the pointer of return value from function call?
- How do I represent an Optional String in Go?
- Fibonacci in Go using channels
- Boltdb-key-Value Data Store purely in Go
Related Questions in IMAGE-PROCESSING
- Need help in detecting multiple blobs
- Image based steganography that survives resizing?
- WinRT Extract Thumbnail from RAW image format
- 3D B-Spline approximation
- Qualitative and Quantitative analysis of filtered back projection / iradon in matlab
- How to detect objects in an image based on colour?
- How to make sense (handle) when computes logarithm of zero in prior information
- scilab - Drawing bounding box
- Lowpass filter non working
- Get a single line representation for multiple close by lines clustered together in opencv
- error while drawing several x-marks on a binary image in matlab
- Which method should I use to find gradient direction of pixels in an image?
- Finding Circle Boundary Pixels Coordinates and RGB Intensity Values from An RGB Input Image in Matlab
- using SURF for handdetection
- Using only one tool from CLImageEditor
Related Questions in VIPS
- Start lad web process failed with sharp.node requires libvips-cpp.42.dylib 49.0.0
- libvips / pyvips access small sections of a multi-channel tiff (OME-Tiff)
- How to extract frames as individual webp/jxl files from a mov file with H.264/265 format?
- Ruby-vips image processing library. Are there any good examples of usage?
- Pipe libvips CLI output to stdout in Windows
- Supported formats for libvips CLI output to Windows stdout
- Laravel Main Thread Blocked
- How to calculate a transform matrix from set of tie points for perspective transform
- Implementing perspective transform using vips
- Parallel overlaying of multiple images in govips
- Adding libvips to a Rails 7 Docker image
- Ruby on Rails Carrierwave-vips: Auto Orient not working if exif data is stripped at same time
- (Live) viewing of large images using pyvips
- libvips extract area of NDPI from Ex40 not from map
- I can't get libvips to compile on heroku
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
libvips (the image processing library behind govips) is demand-driven and horizontally-threaded. The image processing pipeline being computed is represented as a graph, each thread on your PC picks a tile in the output image (usually 128 x 128 pixels), and threads independently walk the graph from end to start computing pixels.
The
compositeoperator (the thing thatcompositeMulticalls) computes the result of overlaying a set of layers with PDF-style blend modes. For each tile, it selects the subset of layers which are visible at that point. It can only do this if the selected blending modes are 'skippable', ie. compositing black (the empty pixel) over the base image will have no effect.You can see the test for skippability here:
https://github.com/libvips/libvips/blob/master/libvips/conversion/composite.cpp#L1273-L1296
And the layer culling loop is here:
https://github.com/libvips/libvips/blob/master/libvips/conversion/composite.cpp#L443-L460
Finally, the selected layers are composited, using vector arithmetic if possible. It represents an RGBA pixel as a vector of four floats and computes all of them together.
tldr: libvips composite is threaded, vectorized, and (if possible) does tile-wise visibility culling.