Ajouter un logo en bas (nadir) des photos à 360°

Bonjour.

J’ai beaucoup de déformation du logo sur la photo en sortie :

J’utilise un logo carré et votre syntaxe convert … J’ai beau triturer les paramètres , je n’arrive pas à avoir quelque chose de plus propre.

Logo initial :

Comment puis-je améliorer Le résultat ?

Merci par avance.

JP

Je viens de faire un test et je vois la même déformation. Par contre sur les photos de la QooCam 3 Ultra aucun problème. Bizarre.

Je pense que la déformation vient du fait que vous n’avez pas adapté la conversion du logo à la largeur en pixels du panoramique de votre caméra, qui est variable d’une caméra à l’autre.
La GoPro me produit des images de 5760x2880, tandis que mon drone produit des images de 14400x7200.

Du coup, voici mes commandes (sous Windows) pour générer les logos à incruster (d’une hauteur fixe de 600px, et de largeur du panoramique) :

magick convert logo.jpg -rotate 180 -distort DePolar 0 -flip -flop -geometry 5760x600! -sampling-factor 2x1 logo-nadir-5760.jpg

magick convert logo.jpg -rotate 180 -distort DePolar 0 -flip -flop -geometry 14400x600! -sampling-factor 2x1 logo-nadir-14400.jpg

Et ensuite, pour créer l’image composite avec Panoramique + Logo (ici pour la GoPro) :

magick composite logo-nadir-5760.jpg photo.jpg -geometry +0+2280 photologo.jpg

2880px (hauteur image GoPro) - 600px (hauteur logo) = 2280 px (position y du bord supérieur du logo)

Je lance l’ajout des logos sur toutes les images d’un dossier via ce script Python :


import subprocess
from pathlib import Path

#--- PARAMÈTRES ---

dossier_entree = Path(r"D:CHEMIN\PHOTOS")  # Dossier contenant les images JPG
logo_path = Path(r"D:\CHEMIN\logo-nadir-5760.jpg")                                           # Chemin du logo
dossier_sortie = Path(r"D:\CHEMIN\PHOTOSLOGOS")   # Dossier de sortie
position_y = 2280 # position Y du logo
perso = "_avecLogo"  # Personnalisation ajoutée au nom des images avec Logo

# Créer le dossier de sortie s'il n'existe pas

dossier_sortie.mkdir(exist_ok=True)

# Récupérer la liste des fichiers JPG à traiter

fichiers_jpg = list(dossier_entree.glob("*.jpg"))
nombre_total = len(fichiers_jpg)

# Traiter chaque fichier JPG du dossier d'entrée
for index, fichier in enumerate(fichiers_jpg, start=1):
    fichier_sortie = dossier_sortie / f"{fichier.stem}{perso}{fichier.suffix}"
    commande = [
        "magick",
        "composite",
        str(logo_path),
        str(fichier),
        "-geometry", f"+0+{position_y}",
        str(fichier_sortie)
    ]
    subprocess.run(
        commande,
        creationflags=subprocess.CREATE_NO_WINDOW,
        stdout=subprocess.DEVNULL,
        stderr=subprocess.DEVNULL
    )
    print(f"Traité : {fichier.name} -> {fichier_sortie.name} ({index} sur {nombre_total})")


print("Terminé.")

Bonjour.

Merci beaucoup, je ne suis pas sûr de comprendre les nuances par rapport aux commandes que je passais, mais ça marche beaucoup mieux. C’est nickel !

Bonne semaine.

JP

1 Like

Je viens de poster un script qui pourrait simplifier l’application d’un nadir :

wget -Ovilleneuvois.png https://forum.geocommuns.fr/uploads/default/original/2X/8/87a5730d4d9132b3f664758553636795a192c73d.png
wget -Osource.jpg https://panoramax.openstreetmap.fr/images/a1/3a/08/ea/bcc6-45c4-a702-d9571b27c40d.jpg
wget -Ojpegmask https://gitlab.com/fgouget/panotools/-/raw/main/jpegmask

python3 jpegmask --mask nadir:180:villeneuvois.png@x2280 source.jpg nadired.jpg

Explication de la commande :

  • nadir: Préparer le logo villeneuvois.png pour qu’il ait une tête correcte une fois appliqué au nadir de l’image 360 (ici une GoPro Max).
  • 180: Il faut tourner le logo de 180 degrés. À ajuster selon l’orientation de la photo par rapport au sens de déplacement.
  • @x2200: Où placer le logo. Ici, de la ligne 2280 jusqu’en bas de l’image

L’application du nadir se fait sans recompression de l’image d’origine et ne me semble pas avoir de problème de déformation.

1 Like

Pour simplement ajouter un logo au nadir, les deux lignes de commande que j’avais indiqué dans le premier post sont quand même assez simples… la première à n’utiliser qu’une fois pour générer le logo, la seconde à appliquer à chaque photo (et aussi sans recompression).

J’ai complété avec l’explication sur les valeurs en pixels en fonction des dimensions de la photo en pixels.

1 Like

Ma contribution avec un script shell pour Linux :

1ère étape : Générer le nadir (j’ai fait le choix d’un nadir un peu plus petit)

convert panoramax-logo.png -rotate 180 -distort DePolar 0 -flip -flop -geometry 5760x450! -sampling-factor 2x1 nadir-5760.jpg

2nde étape : Traiter un répertoire entier (dans l’exemple, le script et le nadir précédemment généré sont dans le même dossier)

dossier=/home/albert/Images/gopro/Caen/Photosdujour 
# À Modifier avec votre dossier
mkdir ${dossier}_nadir/

shopt -s globstar;
fichiers=(${dossier}/*.JPG)

k=0
n=${#fichiers[@]}
a=$(date +%s%3N)

for f in "${fichiers[@]}";
do
	jpegtran -copy all -optimize -progressive -trim -drop +0+2430 nadir-5760.jpg ${f} > ${dossier}_nadir/nadir-${k}.jpg

	k=$((k+1))
	b=$(date +%s%3N)
	t=$(((b-a)/k*n/1000))
	t0=$(((b-a)/1000))
	
	ts=$((t%60))
	tmin=$((t/60))
	
	t0s=$((t0%60))
	t0min=$((t0/60)) 
	
	echo -ne "[INFO] Processing image: ${k} / ${n} . ${t0min} min ${t0s} s écoulées sur ${tmin} min ${ts} s estimées \033[0K\r"
done;

Précisions pour les non spécialistes des commandes et scripts :

La première commande s’utilise dans un terminal Linux. Le répertoire courant doit être celui contenant le fichier panoramax-logo.png. Le fichier créé sera encore dans ce dossier.

Le second script doit être enregistré dans un fichier finissant par .sh (grâce à gedit ou autre éditeur de code/texte). Il doit ensuite être rendu exécutable (par un clic droit → propriétés → Permissions → Autoriser le fichier comme exécutable). Puis enfin, vous pouvez l’exécuter dans un terminal à l’aide de la commande ./nom_du_fichier.sh . Avant de l’exécuter, veillez à avoir modifié la variable dossier (dossier=l'emplacement absolu du dossier à traiter)

Bonjour

je me suis dit que j’allais enfin tester ça sérieusement pour pouvoir faire une doc pour les gens comme moi pour qui ce n’est pas simple (et qui généralement n’osent pas dire sur le forum qu’ils n’ont rien compris)

  • est-ce que c’est une procédure qui marche pour Windows ou juste pour Linux ?
  • il faut installer des trucs ? Pour ma part, j’ai déjà ImageMagick, mais pas jpegtran et je ne sais pas quelle source utiliser pour l’installer (j’ai trouvé un exe mais qui ne fait rien quand je le lance… est-ce normal, aucune idée)
  • d’une manière générale, où écrire ces lignes de code ?
  • j’ai créé un .bat avec la 1ère ligne de code dans le même dossier que mon logo carré (et remplacé panoramax-logo.png par mon logo, mais quand je l’exécute ça ne créé pas de nouveau fichier…

J’en suis là…
merci pour votre aide

Salut,

J’ai mis à jour mon post précédent pour ajouter des informations pour les personnes qui n’ont pas l’habitude d’utiliser les commandes et les scripts shell. Malheureusement, c’est uniquement pour Linux (et peut-être Mac OS).

Je ne suis pas assez connaisseur de Windows mais je n’ai pas l’impression que les commandes de @cquest fonctionnent sous Windows (ce sont des programmes linux et la commande convert fait des choses très différentes sous Windows). En général, ces lignes de code doivent être écrites dans l’invite de commande de Windows/Linux/Mac OS.

1 Like

Sous Windows une solution… WSL qui permet de se retrouver dans un quasi linux.

bonjour

si je comprends bien les réponses, le code proposé dans ce sujet est donc valable effectivement uniquement sur Linux ? Ça vaudrait le coup de le préciser (en général).

Pour ma part, c’est déjà assez compliqué sans avoir à rajouter encore un autre outil. Et les personnes dont je parle dans mon post, sont des agents de collectivités qui sont majoritairement sous Windows (qu’on soit ou non d’accord avec ce choix).

Je vais donc rester sur mon process qui fonctionne avec Nadir-Patcher (et continuer de conseiller cet outil) en attendant le développement de l’option permettant de le faire directement dans Panoramax :purple_heart:

2 Likes

Pour ajouter un nadir, j’utilise la solution avec ImageMagick et le logiciel de retouche photo GIMP, en suivant les instructions (en anglais) du wiki d’OpenStreetMap : Images for Panoramax/Covering the nadir area in 360° images — OpenStreetMap Wiki et Images for Panoramax/Covering the nadir area in 360° images/Cover with soft edges and logo

Non, la plupart des commandes marchent sous Windows.
Quant au script, oui c’est du Linux, mais comme dit par @cquest avec WSL ça marche très bien. Certes une installation de plus.

Je suis aussi sur Windows, et comme précisé, ces commandes fonctionnent bien sous cet OS :

Après, pour l’exécution sur un dossier entier, j’ai choisi Python pour automatiser le traitement, mais ça peut certainement se faire en Batch aussi.

Sylvain (qui n’a pas encore fait la bascule > Linux, mais qui la fera dans les mois à venir, c’est prévu ! enfin, à titre perso, car pro, ça va être très compliqué !)

1 Like