Skip to main content

stitching

A Python package for fast and robust Image Stitching.

Based on opencv's stitching module and inspired by the stitching_detailed.py python command line tool.

inputs

result

Installation

use the docker image

or pip to install stitching from PyPI.

pip install stitching

for server (headless) environments (such as Docker, cloud environments etc.) use stitching-headless

pip install stitching-headless

Usage

Python CLI

The command line interface (cli) is available after installation

stitch -h show the help

stitch *.jpg stitches all jpg files in the current directory

stitch img_dir/IMG*.jpg stitches all files in the img_dir directory starting with "IMG" and ending with ".jpg"

stitch img1.jpg img2.jpg img3.jpg stitches the 3 explicit files of the current directory

Enable verbose mode with stitch *.jpg -v. This will create a folder where all intermediate results are stored so that you can find out where there are problems with your images, if any

Docker CLI

If you are familiar with Docker and don't feel like setting up Python and an environment, you can also use the openstitching/stitch Docker image

docker container run --rm -v /path/to/data:/data openstitching/stitch:{version} -h

You can use the Python CLI as described above (read "current directory" as "/data directory").

Python Script

You can also use the Stitcher class in your script

from stitching import Stitcher
stitcher = Stitcher()

Specify your custom settings as

stitcher = Stitcher(detector="sift", confidence_threshold=0.2)

or

settings = {"detector": "sift", "confidence_threshold": 0.2}
stitcher = Stitcher(**settings)

Create a Panorama from your Images:

  • from a list of filenames
panorama = stitcher.stitch(["img1.jpg", "img2.jpg", "img3.jpg"])
  • from a single item list with a wildcard
panorama = stitcher.stitch(["img?.jpg"])
  • from a list of already loaded images
panorama = stitcher.stitch([cv.imread("img1.jpg"), cv.imread("img2.jpg")])

The equivalent of the --affine cli parameter within the script is

from stitching import AffineStitcher
stitcher = AffineStitcher()
panorama = stitcher.stitch(...)

The equivalent of the -v/--verbose cli parameter within the script is

panorama = stitcher.stitch_verbose(...)

Questions

For questions please use our discussions. Please do not use our issue section for questions.

Contribute

Read through how to contribute for information on topics like finding and fixing bugs and improving / maintaining this package.

Tutorial

This package provides utility functions to deeply analyse what's happening behind the stitching. A tutorial was created as Jupyter Notebook and has a rendered preview.

You can e.g. visualize the RANSAC matches between the images or the seam lines where the images are blended:

matches1 matches2 seams1 seams2

Literature

This package was developed and used for our paper Automatic stitching of fragmented construction plans of hydraulic structures

License

Apache License 2.0

Metadata

Release files for stitching-headless 0.7.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for stitching-headless 0.7.0
File Size Uploaded
stitching_headless-0.7.0.tar.gz 30.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for stitching-headless 0.7.0
File Interpreter ABI Platform
stitching_headless-0.7.0-py3-none-any.whl Python 3 none any Details

Total release size: 61.3 kB

Release files / stitching_headless-0.7.0.tar.gz

Download URL stitching_headless-0.7.0.tar.gz
Size 30.8 kB
Tags Source
SHA-256 checksum
How to use checksums
37a77c6ebd20b36b0bcbb68c57c0a3e086dba6837127d7242dfad0acc267c9f8
BLAKE2b-256 checksum
How to use checksums
3fd69ad55affc5e85c2f2ea23f3823c3752a8dc8d940a46eaffb7c33051a6c90
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 5, 2026.

Transparency log

Release files / stitching_headless-0.7.0-py3-none-any.whl

Download URL stitching_headless-0.7.0-py3-none-any.whl
Size 30.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
3590ab6eaa6fad1630de47ba5c32be632a9ededb9d3270930d2ba37bf4457af2
BLAKE2b-256 checksum
How to use checksums
a88f0f55f8b6bbe31d763fd56d28aed3e958364af8cbda5e608a9f9e9992f210
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 5, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.7.0 This release

2 release files

0.6.2

2 release files

0.6.1

2 release files

0.5.4

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page