Python

Résolu/Fermé
Soma1316 Messages postés 17 Date d'inscription vendredi 3 mars 2023 Statut Membre Dernière intervention 25 mai 2023 - 3 mai 2023 à 15:31
Soma1316 Messages postés 17 Date d'inscription vendredi 3 mars 2023 Statut Membre Dernière intervention 25 mai 2023 - 3 mai 2023 à 23:34

Bonjour,

Comment résoudre cette probleme svp


 

img= cv2.imread ( ' C : \ image.png ' ) 
b , g , r = cv2.split ( immg )
pixx=np.array ( mmg ) 
 B_m =pixx [ : , : , 0 ] 
G_m =pixx [ : , : , 1 ]
 R_m = pixx [ : , : , 2 ] 
# Mélanger les trois matrices

def permutation( pix ) : 

pixel=[ str ( p ) for p in pix ]

np.random.shuffle ( pixel )

return''.join ( pixel )
 #convertir chaque matrice pixel en une chaine de caractéres 
 R_str = R_m.tobytes ( )
 G_str = G_m.tobytes ( )

 B_str =B_m.tobytes ( ) 
# Appeler la fonction permutation avec les chaines de caractéres
 r_per=permutation ( R_str )

g_per= permutation ( G_str )

b_per =permutation ( B_str )

# Convertir les chaines de caractéres en matrices pixel  

R_m = np.frombuffer ( r_per.encode ( ) , dtype =np . uint8 ) .reshape ( R_m.shape ) 
 G_m = np.frombuffer ( g_per.encode ( ) , dtype = np . uint8 ) .reshape ( G_m.shape ) 
B_m =np.frombuffer ( b_per.encode ( ) , dtype = np . uint8 ) .reshape ( B_m. shape ) 

Erreur:
 Traceback ( most recent call last ) : 
File " c : \ Users \ ACER \ code \ Crypt Img.py " , line 165 , in < module > 
R_m = np.frombuffer ( r_per.encode ( ) , dtype = np . uint8 ) .reshape ( R_m.shape ) 
ValueError : cannot reshape array of size 119576 into shape ( 251,201 )

1 réponse

ozone_ Messages postés 1518 Date d'inscription lundi 13 juillet 2009 Statut Membre Dernière intervention 2 juin 2023 478
3 mai 2023 à 21:06

Bonjour,

L'erreur est due au fait que la taille de la chaîne de caractères générée par la fonction `permutation` n'est pas la même que la taille de la matrice `R_m`. Plus précisément, la chaîne de caractères est de taille 119576, tandis que la matrice `R_m` est de taille (251, 201).

La fonction `permutation` utilise la méthode `tobytes()` pour convertir la matrice de pixels en une chaîne de caractères. Cette méthode retourne une chaîne d'octets représentant les éléments de la matrice, et la taille de la chaîne dépend de la taille de la matrice. 

Cependant, la fonction `permutation` convertit la chaîne d'octets en une chaîne de caractères à l'aide de la méthode `join()`. Cette méthode utilise un séparateur (ici, une chaîne vide) pour concaténer les éléments de la liste de caractères. La taille de la chaîne de caractères résultante dépend donc du nombre d'éléments dans la liste de caractères.

Il semble que la fonction `permutation` ne soit pas adaptée à la taille des matrices de pixels utilisées dans votre programme. Vous pouvez essayer d'adapter la fonction en modifiant la façon dont la chaîne de caractères est construite, par exemple en utilisant la méthode `flatten()` pour transformer la matrice en un tableau à une dimension avant de la convertir en chaîne de caractères. 

Voici un exemple de modification possible de la fonction `permutation` :

def permutation(pix):
    pixel = np.ndarray.flatten(pix)
    np.random.shuffle(pixel)
    return pixel.tobytes().decode()

Cette nouvelle version de la fonction utilise `flatten()` pour transformer la matrice `pix` en un tableau à une dimension. Elle mélange ensuite les éléments du tableau à l'aide de `shuffle()`, puis convertit le tableau en chaîne de caractères à l'aide des méthodes `tobytes()` et `decode()`.

Source: ChatGPT


-1
Soma1316 Messages postés 17 Date d'inscription vendredi 3 mars 2023 Statut Membre Dernière intervention 25 mai 2023 1
3 mai 2023 à 23:34

Merci.

0