This is an OpenPGP/MIME signed message (RFC 4880 and 3156) -----------------------47dd6ca97370c321ca3ab281fb4077b5 Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;charset=utf-8
------- Original Message -------
Le mardi 31 janvier 2023 à 06:26, ptilou <
[email protected]> a écrit :
Le lundi 30 janvier 2023 à 14:00:04 UTC+1, ptilou a écrit :
Slt,
Bonjour
Salut les ptilous !
https://www.dropbox.com/scl/fo/peusccr349foy6qqgvxvq/h?dl=0&rlkey=neeo1v54e420pkkyvuhc3jcpy
Est ce que quelqu’un peut me dire ce que donne ca (sur les fichier dans la dropbox ? :
from skimage.metrics import structural_similarity
import cv2
import numpy as np
first = cv2.imread('clownfish_1.jpeg')
second = cv2.imread('clownfish_2.jpeg')
# Convert images to grayscale
first_gray = cv2.cvtColor(first, cv2.COLOR_BGR2GRAY)
second_gray = cv2.cvtColor(second, cv2.COLOR_BGR2GRAY)
# Compute SSIM between two images
score, diff = structural_similarity(first_gray, second_gray, full=True) print("Similarity Score: {:.3f}%".format(score * 100))
# The diff image contains the actual image differences between the two images
# and is represented as a floating point data type so we must convert the array
# to 8-bit unsigned integers in the range [0,255] before we can use it with OpenCV
diff = (diff * 255).astype("uint8")
# Threshold the difference image, followed by finding contours to
# obtain the regions that differ between the two images
thresh = cv2.threshold(diff, 0, 255, cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)[1]
contours = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
contours = contours[0] if len(contours) == 2 else contours[1]
# Highlight differences
mask = np.zeros(first.shape, dtype='uint8')
filled = second.copy()
for c in contours:
area = cv2.contourArea(c)
if area > 100:
x,y,w,h = cv2.boundingRect(c)
cv2.rectangle(first, (x, y), (x + w, y + h), (36,255,12), 2) cv2.rectangle(second, (x, y), (x + w, y + h), (36,255,12), 2) cv2.drawContours(mask, [c], 0, (0,255,0), -1)
cv2.drawContours(filled, [c], 0, (0,255,0), -1)
cv2.imshow('first', first)
cv2.imshow('second', second)
cv2.imshow('diff', diff)
cv2.imshow('mask', mask)
cv2.imshow('filled', filled)
cv2.waitKey()
Je vois que je ne suis pas le seul,
Tu te réponds à toi-même... tu es plusieurs dans ta tête ?
comme opencv a ete ecrit en #C par intel, je me dis quels interets de passer par python, pourquoi ne pas appeler directement la librairie en bash, un script ?
Pas en C# mais en C++...
On ne peut pas "appeler" directement une librairie en bash, pour scripter en bash il faut un utilitaire en ligne de commande, comme imagemagick pour libmagick par exemple.
Je piose la question le scripting dans bash, c’est pas l’equivalent du bon vieu basic de Microsoft ?
Non, c'est plutôt l'équivalent des fichiers de commande batch, en mieux.
( je veux faire un script pour me gerer du hdr dans une data base, mais je cherche comment detecter les images similaire, j’ai lance un fil sur gid hup mais je dois pas etre claire il propose une cles de hash par fichier !)
Effectivement ce n'est pas très claire, normalement on a pas besoin de détecter les images similaires pour faire du hdr, on part d'une rafale d'images avec des expositions différentes. Souvent il y a un léger décalage et/ou une rotation entre les
images qu'il faut corriger. C'est là qu'un script comme celui que tu donnes (qui calcule un score de similitude entre 2 images) peut être utile (uniquement le début) : tu prends une portion au centre des images et tu calcule un score de base, puis tu
décale un peu ce cadre dans toutes les directions en recalculant le score à chaque fois pour voir si un décalage améliore le score de manière à déterminer le vecteur de mouvement entre deux images.
Si tu cherches un moyen d'automatiser l'alignement des images d'une rafale pour produire une image hdr, tu peux regarder du coté de la stabilisation vidéo parce que ça revient au même.
Ou peut-être que tu veux juste détecter des séquences de bracketing parmi les fichiers d'un appareil photo pour enregistrer qu'il s'agit de la même photo avec différentes valeurs d'exposition dans une base de données. Dans ce cas il suffit d'
utiliser les métadonnées exif :
for img in `ls *.JPG`; do if [ "`exif -mt 0xa402 $img | grep Bracketing`" ]; then echo $img; fi ; done
Cette commande liste les fichiers dont le mode d'exposition (0xa402) est "Bracketing automatique", ça dépend un peu de l'appareil photo, pour le déterminer j'ai utilisé la commande exif sans argument sur une photo, puis avec l'argument -i pour avoir
l'index numérique correspondant au tag "Mode d'exposition" qui m'intéressait...`man exif` pour les
détails.
D’apres MikeRobinson :
convert -append `counter=0; for x in in-*; do if [[ $(($counter % 2)) == 0 ]]; then echo $x; fi; counter=$((counter + 1)); done` out.jpg
`convert -append` concatène des images verticalement.
`counter=0; for x in in-*; do if [[ $(($counter % 2)) == 0 ]]; then echo $x; fi; counter=$((counter + 1)); done` liste un fichier sur deux dans le répertoire courant.
Je ne vois pas dans ce script ou les image rentre en in, donc si quelqu’un sait ,
in-* est développé par bash en une liste de tous les fichiers du répertoire courant commençant par 'in-' mais peut-être que tu parles du script python ? Dans ce cas ce sont ces 2 lignes :
first = cv2.imread('clownfish_1.jpeg')
second = cv2.imread('clownfish_2.jpeg')
où les noms de fichiers sont inscrits "en dur".
Si tu veux les passer en argument tu peux utiliser le module sys :
import sys
...
first = cv2.imread(sys.argv[1])
second = cv2.imread(sys.argv[2])
bon sinon du stack, peut etre comme mots cles est plus a proprie ?
Là je ne comprends rien, désolé.
Pour le script avec imagemagick, y a des script pour assemblee les images d’etoiles ! Mais peut etre quelqu’un connait mieux ?
Il y a hdrmerge qui fait probablement ce que tu veux (y compris la détection des "bracket sets"), mais il ne travail qu'a partir de format RAW, donc si tu n'as que les jpeg partagés sur dropbox c'est mort. Il y a un paquet dans debian stable et une
explication détaillée de son fonctionnement sur leur site.
Sinon il y :
- le plugin Gimp (gimp est scriptable) Exposure Blend qui fait parti du paquet gimp-plugin-registry mais limité à 3 images et ne gère pas l'alignement ;
- enfuse - outil de fusion d'expositions d'image (ne gère pas l'alignement) ; - luminance-hdr - interface utilisateur graphique fournissant un workflow d’imagerie HDR (fournit également luminance-hdr-cli).
@+
Hugues
Merci
—
—
Ptilou
-----------------------47dd6ca97370c321ca3ab281fb4077b5
Content-Type: application/pgp-keys; filename="publickey -
[email protected] - 0xE9429B87.asc"; name="publickey -
[email protected] - 0xE9429B87.asc"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="publickey -
[email protected] - 0xE9429B87.asc"; name="publickey -
[email protected] - 0xE9429B87.asc"
LS0tLS1CRUdJTiBQR1AgUFVCTElDIEtFWSBCTE9DSy0tLS0tCgp4ak1FWUZFMWNSWUpLd1lCQkFI YVJ3OEJBUWRBWlB0M2dhekNrdHVzaXFla2gzcnNsM0FLV0lUaUR1VGEKWk9tZEhCWjBtb3pOSDJo c1lYSnlhWFpsUUhCdExtMWxJRHhvYkdGeWNtbDJaVUJ3YlM1dFpUN0Nqd1FRCkZnb0FJQVVDWUZF MzRRWUxDUWNJQXdJRUZRZ0tBZ1FXQWdFQUFoa0JBaHNEQWg0QkFDRUpFRnZWSk5jdgo0dmswRmlF RTZVS2JoNHIyQ0RlSDZZRkJXOVVrMXkvaStUUWpDQUQvYTNwQ0hBSStsT2o1NHVOVVNTU0MKTDE4 NjFQYjI4YWs2K2JvRnN6bnVHc0FCQVBVczh3QnJLQXZxZ0RWYXFZdVd6d1BjTXNnZWJ3U0huOER3 Cmp1SDV6VmdPempnRVlGRTFjUklLS3dZQkJBR1hWUUVGQVFFSFFPbDZ3OXNiR1lmZHZOeVVPb3pj cExiZgp0aW56SWMraDVicS9rMU91TXdVRkF3RUlCOEo0QkJnV0NBQUpCUUpnVVRmaEFoc01BQ0VK RUZ2VkpOY3YKNHZrMEZpRUU2VUtiaDRyMkNEZUg2WUZCVzlVazF5L2krVFRoUEFEOUZTNFlrcFR0 RXJWNDFPRTBBaTNYClIxNlcrT3REa1p3bTZRVTY0VnUzSmJvQkFMMURMQngxRExLRE5kclZhTUZ1 NGp4MXBZV0JqTEpVZ0xLegpzbDMzakRNTQo9NXVpVgotLS0tLUVORCBQR1AgUFVCTElDIEtFWSBC TE9DSy0tLS0tCg==
-----------------------47dd6ca97370c321ca3ab281fb4077b5--
-----BEGIN PGP SIGNATURE-----
Version: ProtonMail
wnUEARYKACcFAmPaqXIJEFvVJNcv4vk0FiEE6UKbh4r2CDeH6YFBW9Uk1y/i +TQAAHM3AQDRkg/XZVmPYFyJUJCkyaqJG/mMky5blsqr3ObvgOHMRQEAmaoz hAYSe9cezr1ikv2UcD8jpCZUOp3Rz4XReZIlUQk=
=qCCt
-----END PGP SIGNATURE-----
--- SoupGate-Win32 v1.05
* Origin: fsxNet Usenet Gateway (21:1/5)