2017-04-08 15 views
0

即时通讯使用SciPy的读取图像,并提取了RGB排列这样在Python中,如何将RGB数组转换为二进制并获得最重要的位?

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

现在我需要的img_b_blue阵列为二进制转换,并获得最显著位。

我可以使用地图转换:

img_b_blue_bin = map(bin, img_b_blue) 

但它作为格式 '0b11110001' 字符串。 Theres一种使用地图并将其转换为二进制而不使用'b'的方法?我怎么能得到最重要的一点?

+0

你是什么意思*二进制*?因为最重要的位是0或1,所以我猜想是布尔值... –

+0

整数已经存储为二进制。不需要做任何操作来将整数转换为二进制:'0b11110001'对'241'是有效的Python,并且您可以直接对整数应用按位算术。 –

回答

2

右移7位可以得到最高有效位。结果是一个整数数组。

img_b_blue_bin = img_b_blue >> 7 

或者,可能在你使用的情况下更清晰,是128高=白色的,下方=黑色比较。结果是一个布尔数组。

img_b_blue_bin = img_b_blue >= 128 

类似地,第(n + 1)个至少显著位可使用(x >> n) & 1中找到,例如2最显著位:

img_b_blue_2nd_msb = (img_b_blue >> 6) & 1 

最低显著位:

img_b_blue_lsb = img_b_blue & 1 

对于如何工作的一个整数见How am I getting a single bit from an int?

+0

干得好。我想发布'7'技巧,但你说得对'128'更清晰。 –

+0

非常感谢你,右移7位解决了问题,以获得最重要的位。怎么样才能得到其他的比特?我怎样才能得到中间和最后一位? –

+0

@GustavoNunes查看更新。 – kennytm

相关问题