手写数字识别数据集生成异常,如何修正代码实现目标格式?
修正手写数字识别数据集生成代码:仅保留有像素的位置
由于你未提供原始生成代码,以下基于常见的手写数字图像(如MNIST类单通道灰度图)处理场景,给出修正思路和示例代码,实现仅在有像素(灰度值非0)的位置记录数据到dataset.csv。
- 核心逻辑:遍历图像每个像素,仅当像素值(灰度值)大于0时,记录该像素的行坐标、列坐标、像素值,跳过值为0的像素。
- 示例代码:
import csv import cv2 import os # 假设你的手写数字图像存储在这个目录下 image_dir = "handwritten_digits" output_csv = "dataset.csv" # 初始化CSV写入器 with open(output_csv, mode='w', newline='') as file: writer = csv.writer(file) # 写入表头:数字标签、行坐标、列坐标、像素值 writer.writerow(["digit_label", "row", "col", "pixel_value"]) # 遍历目录下的所有图像文件 for filename in os.listdir(image_dir): if filename.endswith((".png", ".jpg", ".jpeg")): # 提取文件名中的数字标签(假设文件名格式如"digit_5_img1.png") digit_label = filename.split("_")[1] # 读取图像为灰度图 img = cv2.imread(os.path.join(image_dir, filename), cv2.IMREAD_GRAYSCALE) # 获取图像尺寸 height, width = img.shape # 遍历每个像素 for row in range(height): for col in range(width): pixel_val = img[row, col] # 仅写入非0的像素值 if pixel_val != 0: writer.writerow([digit_label, row, col, pixel_val])
- 代码说明:
- 使用
cv2读取灰度图像,确保获取每个像素的灰度值。 - 外层遍历图像文件,提取数字标签(需根据你的实际文件名格式调整标签提取逻辑)。
- 内层遍历像素时,通过
if pixel_val != 0过滤掉无像素的区域,只保留有效数据写入CSV。 - CSV表头包含数字标签、像素的行列坐标和对应值,方便后续模型训练时解析。
- 使用
如果你的原始代码有特定的图像读取方式或数据结构,可替换对应部分的逻辑,核心是过滤掉值为0的像素,仅保留非零像素的相关信息。
内容的提问来源于stack exchange,提问作者S.G.Lee
相关产品推荐
相关产品推荐

