Pour détecter si deux masques Python se superposent, vous pouvez utiliser la bibliothèque OpenCV, qui fournit plusieurs méthodes pour la détection de seuil et la détection d'objets dans une image.
L'idée est de prendre deux images, l'image originale et le masque, puis de les combiner à l'aide de l'opérateur AND. Si les deux masques se superposent, cela créera une zone où les pixels de l'image originale et du masque sont tous deux non nuls, créant ainsi une image masquée où les deux masques se rencontrent. Vous pouvez alors effectuer une analyse de cette image masquée pour détecter les régions de superposition.
Voici un exemple de code utilisant OpenCV pour détecter la superposition de deux masques :
```
import cv2
import numpy as np
# Charger l'image originale et le masque
img = cv2.imread('image.png')
mask = cv2.imread('mask.png', 0)
# Réaliser l'opération AND sur l'image et le masque
masked_img = cv2.bitwise_and(img, img, mask=mask)
# Rechercher les contours dans l'image masquée
contours, hierarchy = cv2.findContours(masked_img, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
# Imprimer le nombre de contours trouvés
print(len(contours))
```
Dans ce code, nous chargeons l'image et le masque avec cv2.imread(). Nous utilisons cv2.bitwise_and() pour combiner les deux images et obtenir l'image masquée, puis nous utilisons cv2.findContours() pour détecter les contours dans l'image masquée. Finalement, nous imprimons le nombre de contours trouvés, qui indique le nombre de zones de superposition de masque dans l'image.
Notez que la méthode ci-dessus supposent que les deux masques ont des valeurs binaires (0-1) : le masque doit être une image en niveaux de gris, où les pixels sont soit blancs (valeur 255) soit noirs (valeur 0).
Comment le faire dans mon programe :
#######################################################
# #
# Tir de la Bille #
# #
#######################################################
# Bibliothèque
from Variables import *
import pygame
from Variables import *
from random import randint
Bille_Test = Creer_Bille(100,100,0,0,rayon,fenetre,Couleur)
# Main
run = True # Marche du Programme
while run:
# Affichage
fenetre.blit(bg,(0,0))
for bille in Liste_Bille:
bille["Cercle_Bille"]
fenetre.blit(bille["Surface"],bille["Rectangle_Bille"])
Bille_Test["Cercle_Bille"]
fenetre.blit(Bille_Test["Surface"],Bille_Test["Rectangle_Bille"])
# POUR tout évènement
for evenement in pygame.event.get():
# SI L'évènement est de type QUIT
if evenement.type == pygame.QUIT:
run = False # Aret de la boucle
# SI L'évènement est un clic de sourie
if evenement.type == pygame.MOUSEBUTTONDOWN and evenement.button == 1:
Pos_Sourie = evenement.pos # Coordonées du clic
Vecteur = pygame.Vector2(Pos_Sourie[0]-(LARGEUR/2),Pos_Sourie[1]-(HAUTEUR-10)) # Calcul vecteur
Vecteur.normalize_ip()
# Ajout à la liste entitées
Liste_Bille.append(Creer_Bille(LARGEUR/2,HAUTEUR-10,Vecteur[0]*15,Vecteur[1]*15,rayon,fenetre,Couleur))
Balle.play() # Joue le son de tir
# MàJ Bille
# POUR toutes las billes tirées
for bille in Liste_Bille:
bille["Pos"]= bille["Pos"]+bille["Vitesse"]
bille["Rectangle_Bille"].center = bille['Pos']
# SI la bille touche le bout
if bille["Pos"][1]<bille["Rayon"]:
bille["Pos"][1]=bille["Rayon"]
bille["Vitesse"][0]=0
bille["Vitesse"][1]=0
Tuc.play()
Liste_Entitées.append(bille)
# SI la bille touche le mur gauche
if bille["Pos"][0]<bille["Rayon"]:
bille["Vitesse"][0]=-bille["Vitesse"][0]
Boing.play()
# SI la bille touche le mur droit
if bille["Pos"][0]>850-bille["Rayon"]:
bille["Vitesse"][0]=-bille["Vitesse"][0]
Boing.play()
verif = (bille["Pos"][0] - Bille_Test["Pos"][0]+10, bille["Pos"][1] - Bille_Test["Pos"][1]+10)
if bille["Masque_Bille"].overlap(Bille_Test['Masque_Bille'], verif) != None:
bille["Masque_Bille"] = bille["Vitesse"]
# Refresh
pygame.display.flip()
clock.tick(FPS)