You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将灰度图的十进制Numpy数组转二进制后拆分为8个Numpy数组

高效实现灰度图二进制位拆分方案

你的思路完全没问题,但手动循环处理二进制转换效率偏低,尤其是面对大尺寸图像时。这里给你推荐用Numpy原生位运算的优化方案,代码更简洁、运行速度也快得多:

核心思路

利用Numpy的**右移运算(>>)和按位与运算(&)**直接提取每一位:

  • 对像素值右移k位,能把第k位移到最低位
  • 再和1做按位与,就能保留该位的0/1值,直接得到对应位的数组

完整代码示例

import numpy as np

# 模拟你的灰度图数组(shape为(H,W),取值0-255)
img = np.array([[42,0,52,234],[232,123,2,243],[24,231,245,21],[21,213,241,233]])

# 生成8个二进制位数组:bits[0]对应第0位(最低位),bits[7]对应第7位(最高位)
bit_arrays = []
for bit_position in range(8):
    # 提取当前位的0/1数组
    current_bit = (img >> bit_position) & 1
    bit_arrays.append(current_bit)

# 可选:如果需要每个像素的8位二进制数组(shape为(H,W,8),最高位在前)
bin_img = np.stack([(img >> k) & 1 for k in reversed(range(8))], axis=-1)

验证示例

以第一个像素42为例,它的二进制是00101010:

  • bit_arrays[0][0][0] → 第0位:0
  • bit_arrays[1][0][0] → 第1位:1
  • bit_arrays[2][0][0] → 第2位:0
  • ...以此类推,和手动计算完全一致

对比你的现有代码

你的代码逻辑是对的,但存在两个小问题:

  1. 变量名错误:colsA = imgB.shape[0]里的imgB未定义,应该改为imgA
  2. 手动循环效率低:Python循环处理像素远不如Numpy向量运算高效,大图像下差距会非常明显

内容的提问来源于stack exchange,提问作者Juan De Dios Miranda Franco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:46:18