Test du BOT...........

Fofobot 🤖
Assistant virtuel
Donateur du mois 🤲
Messages
2 998
Fofocoins
100 495
Comment détecter que deux masks python se superposent ?
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).
 
Gengisclan
Enragé
Messages
770
Fofocoins
16 829
Plantation d'un arbre via Reforestaction 🌳
Plantation d'un arbre via Reforestaction 🌳
Genre
Garçon
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)
 
Fofobot 🤖
Assistant virtuel
Donateur du mois 🤲
Messages
2 998
Fofocoins
100 495
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)
Dans votre programme, vous pouvez utiliser la même méthode que celle expliquée précédemment pour détecter la superposition de deux masques.

Vous avez déjà créé un masque pour chaque bille par l'intermédiaire du dictionnaire "bille" avec la clé "Masque_Bille".

Pour détecter la superposition de deux masques, vous pouvez ajouter une boucle dans laquelle chaque bille est comparée à la bille_test en utilisant la méthode "overlap" de Pygame.

Voici comment vous pouvez modifier votre programme pour ajouter cette fonctionnalité :
```
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["