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

如何在Python中对图像降采样并提取黑白像素值?

解决手写数字识别的图像导入与批量数据问题

一、实现8*8图像转二进制像素矩阵

用Python的Pillow库就能轻松处理图像,先安装依赖:

pip install pillow

然后完善你的pfi函数,实现图像读取、灰度转换、尺寸调整和二值化逻辑:

from PIL import Image

def pfi(image_path):
    # 打开图像并转为灰度模式(0-255灰度值)
    img = Image.open(image_path).convert('L')
    # 强制调整为8*8尺寸
    img_8x8 = img.resize((8, 8))
    # 获取所有像素值的列表
    pixel_values = list(img_8x8.getdata())
    # 二值化:以127为阈值,大于设为1,小于等于设为0,生成8*8矩阵
    binary_matrix = [[1 if pixel > 127 else 0 for pixel in pixel_values[i*8:(i+1)*8]] for i in range(8)]
    # 如果需要直接适配输入层的一维数组,替换成下面一行
    # binary_flat = [1 if pixel > 127 else 0 for pixel in pixel_values]
    return binary_matrix

调用示例:

# 获取8*8二进制像素矩阵
digit_matrix = pfi("test_digit.png")
# 转为一维数组赋值给输入节点
startnodes = [pixel for row in digit_matrix for pixel in row]

二、获取批量手写数字图像

最适配的是MNIST手写数字数据集,包含70000张标准手写数字图像,可直接缩放到8*8使用:

用sklearn快速加载预处理

先安装依赖:

pip install scikit-learn numpy

加载并处理数据:

from sklearn.datasets import fetch_openml
import numpy as np

# 加载MNIST数据集
mnist = fetch_openml('mnist_784', version=1, cache=True)
raw_images = mnist.data  # 70000条28*28的图像数据(展平为784维数组)
labels = mnist.target  # 对应数字标签0-9

# 把28*28图像缩放到8*8并二值化
def process_image(raw_img):
    # 还原为28*28的灰度图
    img = Image.fromarray(raw_img.reshape(28,28).astype(np.uint8))
    # 缩放为8*8并转灰度
    img_8x8 = img.resize((8,8)).convert('L')
    # 二值化后展平为64维数组
    return np.where(np.array(img_8x8) > 127, 1, 0).flatten()

# 批量处理所有图像
train_data = np.array([process_image(img) for img in raw_images])

这样你就得到了70000条适配输入层的二进制图像数据,直接用于神经网络训练。

本地批量读取自定义图像

如果有自己的手写数字图像文件夹,用下面的代码批量读取:

import os

def load_batch_data(folder_path):
    batch_data = []
    # 遍历文件夹下所有图像文件
    for filename in os.listdir(folder_path):
        if filename.endswith(('.png', '.jpg', '.jpeg')):
            img_path = os.path.join(folder_path, filename)
            # 调用pfi获取一维二进制数组
            binary_flat = [pixel for row in pfi(img_path) for pixel in row]
            batch_data.append(binary_flat)
    return batch_data

# 调用示例
custom_batch = load_batch_data("your_digit_images_folder")

内容的提问来源于stack exchange,提问作者Jameson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 16:25:32