[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re : Re: Opencv quelqu’un pour me donner l’info ?



------- Original Message -------
Le mardi 31 janvier 2023 à 06:26, ptilou <ptilou@gmail.com> 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

Attachment: publickey - hlarrive@pm.me - 0xE9429B87.asc
Description: application/pgp-keys

Attachment: signature.asc
Description: OpenPGP digital signature


Reply to: