当前位置: 首页 > web >正文

CASIA-HWDB的gnt转换为png图片

手写汉字数据集简介

  • HWDB(Handwritten Chinese Character Database)

    • 由中科院自动化所(CASIA)发布,包含离线手写汉字图像(如HWDB1.0-1.2),涵盖约7,000个汉字类别,每个字符由不同书写者多次书写。

  • OLHWDB(Online Handwritten Chinese Character Database)

    • 在线手写数据,记录笔尖的运动轨迹(坐标序列和笔画顺序),如OLHWDB1.0-1.2,类别与HWDB一致。

网站地址:

https://nlpr.ia.ac.cn/databases/handwriting/Download.html   

gnt转换为png图片

import os
import struct
import numpy as np
from PIL import Image
import glob
import redef sanitize_filename(filename):"""移除文件名中的非法字符"""return re.sub(r'[\\/*?:"<>|\x00]', '', filename)def gnt_to_png(input_path, output_dir):os.makedirs(output_dir, exist_ok=True)index = 0  # 文件名计数器with open(input_path, 'rb') as f:while True:try:# 读取样本大小sample_size_bytes = f.read(4)if not sample_size_bytes:break  # 文件结束sample_size = struct.unpack('<I', sample_size_bytes)[0]# 读取标签(处理空字符)tag_bytes = f.read(2)if len(tag_bytes) < 2:breaktag = tag_bytes.decode('GBK', errors='replace').replace('\x00', '')# 读取宽高width = struct.unpack('<H', f.read(2))[0]height = struct.unpack('<H', f.read(2))[0]# 读取像素数据pixel_data = f.read(width * height)if len(pixel_data) != width * height:break  # 数据不完整# 转换为图像image = np.frombuffer(pixel_data, dtype=np.uint8).reshape(height, width)img = Image.fromarray(image, mode='L')# 生成合法文件名base_name = os.path.splitext(os.path.basename(input_path))[0]safe_base = sanitize_filename(base_name)safe_tag = sanitize_filename(tag)output_path = os.path.join(output_dir, f"{safe_base}_{safe_tag}_{index}.png")# 保存文件(捕获异常)try:img.save(output_path)index += 1except OSError as e:print(f"跳过非法文件名: {output_path} (原因: {e})")except Exception as e:print(f"处理失败: {input_path} (错误: {e})")break# 批量处理目录下所有.gnt文件
input_dir = r"E:\code_python\1"
output_dir = r"E:\code_python\2"for gnt_file in glob.glob(os.path.join(input_dir, "*.gnt")):gnt_to_png(gnt_file, output_dir)

http://www.xdnf.cn/news/8361.html

相关文章:

  • R语言学习--Day07--T分布与T检验
  • word设置如“第xx页 共xx页”格式的页码
  • OPC Client第5讲(wxwidgets):初始界面的事件处理;按照配置文件初始化界面的内容
  • 【Django DRF】一篇文章总结Django DRF框架
  • 鸿蒙Ability对比Android的Fragment
  • uniapp编译小程序,不支持:class语法
  • 机器学习第二十五讲:TensorFlow → 乐高式搭建深度学习模型
  • kafka吞吐量提升总结
  • halcon 连接相机
  • 消息队列RabbitMQ与AMQP协议详解
  • oracle数据库生成awr报告,排查数据库服务器CPU100%,系统卡顿,慢sql,根据sqlid查询关键信息,如会话SID,客户端机器名
  • 从零搭建SpringBoot Web单体项目3、SpringBoot 核心组件深度解析
  • leetcode hot100:十三、解题思路大全:多维动态规划(不同路径、最小路径和、最长回文子串、 最长公共子序列、编辑距离)
  • 微信小程序用<web-view 嵌入h5网页,改了h5网页后,可能是缓存的原因,小程序上看还是原来的,怎么处理
  • 【MySQL成神之路】MySQL索引相关介绍
  • 应届本科生简历制作指南
  • MySQL数据 在 磁盘上是什么样子的
  • DiagramJS设计原理解读(二)
  • CUDA 加速的基础线性代数库cuBLAS
  • Issac Lab安装
  • SPL做量化---MFI(资金流量指标)
  • 水陆两栖车,水域救援与陆地行动的桥梁
  • 掌握正则表达式:从基础语法到工程实践
  • Redis--SpringDataRedis详解
  • KCTF-CCG CrackMe crypto 1.0
  • TDengine 高可用——三副本
  • YOLOv5:调用官方权重进行检测
  • Socket套接字概述
  • MFC 中实现动态控件启用与命令执行
  • nRF Connect SDK开发之(1)运行一个Zephyr Project例程