MST MBD-SIM/M31 Labs OpenCV-Python M.
AIT KBIR
# Détection des points d’intérêt par l’opérateur de Harris
import numpy as np
import cv2 as cv
img = [Link]('../images/[Link]')
imgGray = [Link](img,cv.COLOR_BGR2GRAY)
imgFloat= np.float32(imgGray)
# Deuxième et troisième paramètre : taille du voisinage et taille de masque de Sobel
# Quatrième paramètre : paramètre libre qui apparait dans la formule prévue par Harris
dst = [Link](imgFloat,7,5,0.1)
# Choix du seuil optimal, il dépend de l'image
seuil = 0.0001*[Link]()
dim = [Link]
for i in range(dim[0]):
for j in range(dim[1]):
if dst[i,j]>seuil:
[Link](img,(j,i),3,(0,0,255),2)
[Link]('dst',img)
[Link](0)
[Link]()
#------------------------------------------------------ Ligne de partage des eaux --------------------------------------------------------
import numpy as np
from random import randrange
import cv2 as cv
# Lecture
img = [Link]('../images/[Link]')
[Link]('Originale',img)
# Seuillage
2022-2023 1
MST MBD-SIM/M31 Labs OpenCV-Python M. AIT KBIR
gray = [Link](img,cv.COLOR_BGR2GRAY)
ret, thresh = [Link](gray,100,255,cv.THRESH_BINARY)
# Erosion pour définir les marqueurs (points à 255 appartienent aux objets)
kernel = [Link]((3,3),np.uint8)
objets = [Link](thresh,kernel,iterations=12)
[Link]('Marqueurs',objets)
# dilatation : pointsà 0 appartiennet au fond
fond = [Link](thresh,kernel,iterations=12)
# Étiquettage de l'image binaire
ret, markers = [Link](objets)
markers[markers>0] += 1
# Marquer les points fonds avec l'étiquette 1
markers[fond==0] = 1
[Link]('Étiquetage',np.uint8(markers*20))
# Application de l'algorithme ( -1 : Pour les bordures )
markersw = [Link](img,markers)
# Affichage en couleur
imgr1 = [Link]([Link],np.uint8)
# Affichage des lignes de partage des eaux en blanc
imgr1[markersw == -1] = [255, 255, 255]
# Couleur aléatoire par composante (Pour ne pas colorier le fond, on commence par l’étiquette 2)
for label in range(2, [Link]()+1):
imgr1[markersw == label] = [randrange(256), randrange(256), randrange(256)]
[Link]('Segmentation',imgr1)
[Link](0)
[Link]()
- Image originale - Image des marqueurs - Image des marqueurs étiquetée - image segmentée
2022-2023 2
MST MBD-SIM/M31 Labs OpenCV-Python M. AIT KBIR
# Application de la transformation de Hough pour le calcul de la somme de la monnaie dans une image
------------------ 1er programme -----------------
# Correspondance Rayon et valeur de la monnaie (l’image [Link] contient les pièces à utiliser)
import cv2
import json
import numpy as np
def main():
img = [Link]('[Link]', 1)
gris1 = [Link](img,cv2.COLOR_BGR2GRAY)
# pré-traitement
kernel = [Link]((11,11),np.uint8)
gris2 = [Link](gris1, cv2.MORPH_OPEN, kernel)
gris2 = [Link](gris2,(11,11),5)
# Hough
circles = [Link](gris2,cv2.HOUGH_GRADIENT,1,120,
param1=120,param2=25,minRadius=50,maxRadius=100)
circles = np.uint16([Link](circles))
j=0
pieces = {0:0.05, 1:0.1, 2:0.5, 3:1, 4:2}
dic={}
for i in circles[0,:]:
print(j,':','(',i[0],i[1],')',i[2])
j=j+1
# Tracer
[Link](img,(i[0],i[1]),i[2],(0,255,0),2)
[Link](img,(i[0],i[1]),2,(0,0,255),3)
[Link]('Cercles', img)
print('0:0.05, 1:0.1, 2:0.5, 3:1, 4:2 ( Euros ) : ')
val = [Link](0)-48
dic[str(i[2])]= float(pieces[val])
# Afficher et sauvegarde
print(dic)
with open('[Link]', 'w') as fp:
[Link](dic, fp)
[Link](0)
[Link]()
if __name__ == "__main__":
main()
------------------ 2ème programme -----------------
# Calcul de la somme de monnaie (application sur une nouvelle image : [Link])
import cv2
2022-2023 3
MST MBD-SIM/M31 Labs OpenCV-Python M. AIT KBIR
import json
import numpy as np
def valeur(x,d):
kmin=1000
for k, v in [Link]():
if [Link](int(k)-x)<kmin :
kmin = [Link](int(k)-x)
vmin = v
return float(vmin);
def main():
img = [Link]('[Link]', 1)
gris1 = [Link](img,cv2.COLOR_BGR2GRAY)
# Pré-traitement
kernel = [Link]((11,11),np.uint8)
gris2 = [Link](gris1, cv2.MORPH_OPEN, kernel)
gris2 = [Link](gris2,(11,11),5)
# Hough
circles = [Link](gris2,cv2.HOUGH_GRADIENT,1,120,
param1=120,param2=25,minRadius=50,maxRadius=100)
circles = np.uint16([Link](circles))
#Lecture des paramètres
with open('[Link]', 'r') as fp:
dic = [Link](fp)
somme = 0.0;
for i in circles[0,:]:
somme = somme+valeur(i[2],dic)
[Link](img,(i[0],i[1]),i[2],(0,255,0),2)
somme = [Link](somme,2)
# Affichage
img = [Link](img, 'Somme : '+str(somme)+' Euros.', (10, 50), cv2.FONT_HERSHEY_SIMPLEX,
1, (0, 0, 255), 1, cv2.LINE_AA)
[Link]('Somme en Euros', img)
[Link](0)
[Link]()
if __name__ == "__main__":
main()
Résultat:
2022-2023 4
MST MBD-SIM/M31 Labs OpenCV-Python M. AIT KBIR
1er programme :
2ème programme :
2022-2023 5