基于Python的二值图像4×4分块及像素计数处理需求
解决二值图像4×4块奇偶统计并保存结果的问题
我看了你的代码,确实存在几个关键问题导致达不到预期效果,咱们一步步来修正:
先说说你的代码里的核心问题
- 循环遍历方式错了:你现在是逐个像素遍历,这会导致同一个4×4块被重复处理N次,完全不符合“按块划分”的需求——应该以4为步长,每次跳一个块的位置
- 判断逻辑不符合需求:你用
sum>4或sum<4来赋值,但需求是统计黑色像素数的奇偶性,和数值大小无关 - 修改原图像会污染数据:你在循环里直接修改
image数组,后面的块计算会用到已经被修改后的像素值,结果肯定不对 - 二值化处理缺失:
plt.imread读取的图像可能是0-1的浮点数或者RGB转单通道后的非严格二值,需要先转成明确的0(黑)、1(白)数组
修正后的完整代码
import numpy as np from PIL import Image # 1. 读取并预处理二值图像 # 用PIL读取更稳定,先转灰度再转严格二值 image = Image.open('myplot1.png').convert('L') image_np = np.array(image) # 阈值化:灰度值<128的是黑色(标记为0),否则是白色(标记为1) # 如果你原图像的黑色是1、白色是0,就把条件改成>128 binary_image = np.where(image_np < 128, 0, 1) # 2. 定义块大小,计算可划分的完整块数量 block_size = 4 height, width = binary_image.shape num_blocks_h = height // block_size # 垂直方向的块数 num_blocks_w = width // block_size # 水平方向的块数 # 3. 创建结果数组,存储每个块的0/1赋值 block_result = np.zeros((num_blocks_h, num_blocks_w), dtype=np.int32) # 4. 逐个处理每个4×4块 for i in range(num_blocks_h): for j in range(num_blocks_w): # 提取当前块的区域 current_block = binary_image[i*block_size : (i+1)*block_size, j*block_size : (j+1)*block_size] # 统计黑色像素数量(这里黑色是0,所以统计等于0的像素数) black_count = np.sum(current_block == 0) # 奇偶判断:奇数赋值1,偶数赋值0 block_result[i, j] = 1 if black_count % 2 != 0 else 0 # 5. 把结果保存到TXT文件 # fmt='%d'表示保存为整数,delimiter=' '用空格分隔 np.savetxt('block_parity_result.txt', block_result, fmt='%d', delimiter=' ') # 可选:如果需要把每个块替换后的完整图像保存 output_image = np.zeros_like(binary_image) for i in range(num_blocks_h): for j in range(num_blocks_w): output_image[i*block_size:(i+1)*block_size, j*block_size:(j+1)*block_size] = block_result[i,j] # 转成uint8格式保存为图片 Image.fromarray((output_image * 255).astype(np.uint8)).save('processed_image.png')
关键细节说明
- 图像二值化:这里假设你的原图中黑色是较暗的像素,所以用128作为阈值分割。如果你的二值图本身就是0(黑)和255(白)的格式,可以直接改成
binary_image = (image_np == 0).astype(np.int32) - 边界处理:代码里只处理了尺寸是4的倍数的区域,如果你的图像宽高不是4的倍数,边缘剩余的像素可以选择丢弃,或者补0凑成4×4块(比如用
np.pad给图像补边) - 结果保存:
np.savetxt会把二维数组按行写入TXT,每行的数字用空格分隔,方便后续读取 - 避免原数据污染:我们单独创建了
block_result数组存储结果,完全不修改原图像,确保每个块的计算都是基于原始像素值
内容的提问来源于stack exchange,提问作者Dian Arief R
相关产品推荐
相关产品推荐

