beilage zu: checkins
wie ich’s gemacht habe:
alle bilder in einen ordner sichern (1.jpg, 2.jpg, etc).
brew install ffmpeg
python3 -m venv baumenv
source baumenv/bin/activate
install opencv-python numpy
chmod +x align_tree.py
python3 align_tree.py
ffmpeg -framerate 3 -i aligned/frame_%04d.jpg -vf "crop=1300:1300:250:50" -c:v libx264 -pix_fmt yuv420p baum_square1.mp4
align_tree.py
import cv2
import numpy as np
from pathlib import Path
input_dir = Path(".")
output_dir = Path("aligned")
output_dir.mkdir(exist_ok=True)
# JPGs numerisch sortieren: 1.jpg, 5.jpg, 10.jpg, ...
files = sorted(
input_dir.glob("*.jpg"),
key=lambda p: int(p.stem)
)
if not files:
raise RuntimeError("Keine JPG-Dateien gefunden.")
# Erstes Bild als Referenz
ref = cv2.imread(str(files[0]))
if ref is None:
raise RuntimeError(f"Konnte Referenzbild nicht laden: {files[0]}")
h, w = ref.shape[:2]
ref_gray = cv2.cvtColor(ref, cv2.COLOR_BGR2GRAY)
ref_gray = cv2.GaussianBlur(ref_gray, (5, 5), 0)
cv2.imwrite(str(output_dir / "frame_0001.jpg"), ref)
for i, path in enumerate(files[1:], start=2):
img = cv2.imread(str(path))
if img is None:
print(f"Überspringe {path.name}: konnte nicht geladen werden")
continue
img = cv2.resize(img, (w, h))
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
gray = cv2.GaussianBlur(gray, (5, 5), 0)
# MOTION_EUCLIDEAN = nur Rotation + Verschiebung, keine Verzerrung
warp = np.eye(2, 3, dtype=np.float32)
try:
cc, warp = cv2.findTransformECC(
ref_gray,
gray,
warp,
cv2.MOTION_EUCLIDEAN,
(
cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_COUNT,
3000,
1e-6
)
)
aligned = cv2.warpAffine(
img,
warp,
(w, h),
flags=cv2.INTER_LINEAR + cv2.WARP_INVERSE_MAP,
borderMode=cv2.BORDER_CONSTANT,
borderValue=(0, 0, 0)
)
print(f"{path.name} -> frame_{i:04d}.jpg cc={cc:.4f}")
except cv2.error as e:
print(f"Ausrichtung fehlgeschlagen bei {path.name}; verwende Original.")
aligned = img
out = output_dir / f"frame_{i:04d}.jpg"
cv2.imwrite(str(out), aligned, [cv2.IMWRITE_JPEG_QUALITY, 95])
print("Fertig.")
statistisches
dieser artikel wurde vor 3 wochen und 13 stunden veröffentlicht und zuletzt vor 3 wochen und 7 stunden geändert. er hat 8 reaktionen gesammelt und es wurden bis jetzt 580 aufrufe erfasst.
8 reaktionen
1 erwähnung
webmention senden
webmention an diesen artikel (checkins) senden.
ähnliche beiträge
- 22.02.2026: dust bunny
- 19.10.2016: suicide squad
- 05.06.2016: was du dir aber auch anguckst …
- 04.12.2015: Ugh Foursquare API is down for me! Guess next on my list is building #indieweb checkins finally.
- 21.11.2015: This GIF illustrates why your phone camera takes weird photos of spinning propellers. …
7 likes
4 2 1