• =?UTF-8?B?UmU6IE9wZW5jdiBxdWVscXXigJl1biBwb3VyIG1lIGRvbm5lciBs4oCZaW5mb

    From ptilou@21:1/5 to All on Tue Jan 31 06:40:01 2023
    Le lundi 30 janvier 2023 à 14:00:04 UTC+1, ptilou a écrit :
    Slt,

    Bonjour


    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, 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 ?

    Je piose la question le scripting dans bash, c’est pas l’equivalent du bon vieu basic de Microsoft ?


    ( 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 !)

    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


    Je ne vois pas dans ce script ou les image rentre en in, donc si quelqu’un sait , bon sinon du stack, peut etre comme mots cles est plus a proprie ?

    Pour le script avec imagemagick, y a des script pour assemblee les images d’etoiles ! Mais peut etre quelqu’un connait mieux ?



    Merci







    Ptilou

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Hugues Larrive@21:1/5 to All on Wed Feb 1 19:10:01 2023
    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)