2017-04-08 2 views
0

Im en utilisant scipy pour lire une image et extraire le tableau RVB comme celui-ciEn Python, comment convertir un tableau RVB en binaire et obtenir le bit le plus significatif?

img_b = misc.imread('google.png') 
img_b_blue = img_b[:, :, 0] 
img_b_blue = img_b_blue.ravel() 

Maintenant, je dois convertir le tableau img_b_blue en binaire et obtenir le bit le plus significatif.

Je peux convertir en utilisant la carte:

img_b_blue_bin = map(bin, img_b_blue) 

Mais il est sous forme de chaîne dans le format '0b11110001'. Theres un moyen d'utiliser la carte et convertir en binaire sans le «b»? Et comment puis-je obtenir le bit le plus significatif?

+0

Que voulez-vous dire par * binaire *? Booléens Je suppose que le bit le plus significatif est 0 ou 1 ... –

+0

Les entiers sont déjà stockés en tant que binaires. Il n'y a pas besoin de faire quoi que ce soit pour convertir un entier en binaire: '0b11110001' est un Python valide pour' 241', et vous pouvez appliquer l'arithmétique bit à bit directement à l'entier. –

Répondre

2

Vous pouvez obtenir le bit le plus significatif en décalant à droite 7 bits. Le résultat est un tableau d'entiers. Alternativement, probablement plus clair dans votre cas d'utilisation, est comparable à 128. Plus haut = blanc, plus bas = noir. Le résultat est un tableau booléen.

img_b_blue_bin = img_b_blue >= 128 

De même, le (n + 1) -ième bit le moins significatif peut être trouvé en utilisant (x >> n) & 1, par exemple, 2ème bit le plus significatif:

img_b_blue_2nd_msb = (img_b_blue >> 6) & 1 

bit le moins significatif:

img_b_blue_lsb = img_b_blue & 1 

Voir How am I getting a single bit from an int? pour savoir comment cela fonctionne pour un seul entiers.

+0

Bien joué. Je voulais poster le tour '>> 7', mais vous avez raison de dire que' 128' est beaucoup plus clair. –

+0

merci beaucoup, le décalage à droite 7 bits résolu le problème pour obtenir le bit le plus significatif. Que diriez-vous d'obtenir les autres bits? Comment puis-je obtenir le milieu et le dernier bit? –

+0

@GustavoNunes Voir mise à jour. – kennytm