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

day11 - 手写数字笔迹细化

手写数字笔迹细化

对于手写数字识别实验中,经常会遇到因为笔迹较粗导致误识别的情况,所以我们通常会先将笔迹进行细化,笔迹变细以后,数字的特征会更明显,后续进行识别的准确率就会更高。

例如数字7 和 1 ,因为书写习惯的不同,在识别图像如果使用原始图像,笔迹较粗,经常会识别错误,但是经过腐蚀操作,笔迹变细以后,会很容易将二者区分开。

请添加图片描述

本期我们重点学习图像的腐蚀操作,通过图像腐蚀来将手写数字的笔迹进行细化。

完成本期内容,你可以

  • 了解图像腐蚀的原理和应用

  • 掌握使用图像腐蚀进行图像处理

若要运行案例代码,你需要有:

  • 操作系统:Ubuntu 16 以上 或者 Windows10

  • 工具软件:VScode 或者其他源码编辑器

  • 硬件环境:无特殊要求

  • 核心库:python 3.6.13, opencv-contrib-python 3.4.11.39,opencv-python 3.4.2.16

点击下载源码


腐蚀

OpenCV将腐蚀封装成了cv2.erode()方法。

函数原型:dst = cv2.erode(src, kernel, anchor, iterations, borderType, borderValue)
dst为输出图像。

参数描述如下:

  • src:被处理的图像
  • kernel:腐蚀使用的核
  • anchor:可选参数,锚点的位置
  • iterations:可选参数,腐蚀操作的迭代次数,默认值为1
  • borderType:可选参数,边界样式,建议采用默认值
  • borderValue:可选参数,边界值,建议采用默认值

具体步骤

1. 创建项目结构

创建项目名为手写数字笔迹细化,项目根目录下新建code文件夹储存代码,新建dataset文件夹储存数据,项目结构如下:

手写数字笔迹细化                          # 项目名称
├── code                               # 储存代码文件
├── dataset                            # 储存数据文件

注:如项目结构已存在,无需再创建。

2. 使用腐蚀操作对数字 7 进行处理

  1. code文件夹下创建number_7.py文件;
  2. 导入所需的库,OpenCV、numpy;
  3. 读取dataset文件夹下的7.png图片,并进行展示;
  4. 创建一个13*13的都为1 的数组作为滤波核;
  5. 对图像进行腐蚀处理,并展示结果;

代码实现

# 导入OpenCV、numpy
import cv2
import numpy as np# 读取图像
img = cv2.imread("../dataset/7.png")
cv2.imshow("original",img)# 创建13*13的都为1的数组作为核
k = np.ones((13, 13), np.uint8)
# 进行腐蚀操作
dst = cv2.erode(img, k)
cv2.imshow("erode",dst)cv2.waitKey()
cv2.destroyAllWindows()

请添加图片描述

效果截图

3. 使用腐蚀操作对数字 1 进行处理

  1. code文件夹下创建number_1.py文件;
  2. 导入所需的库,OpenCV、numpy;
  3. 读取dataset文件夹下的1.png图片,并进行展示;
  4. 创建一个13*13的都为1 的数组作为滤波核;
  5. 对图像进行腐蚀处理,并展示结果;

代码实现

# 导入OpenCV、numpy
import cv2
import numpy as np# 读取图像
img = cv2.imread("../dataset/1.png")
cv2.imshow("original",img)# 创建13*13的都为1的数组作为核
k = np.ones((13, 13), np.uint8)
# 进行腐蚀操作
dst = cv2.erode(img, k)
cv2.imshow("erode",dst)cv2.waitKey()
cv2.destroyAllWindows()

请添加图片描述

效果截图

经过腐蚀操作之后,图像的笔迹明显变细,数字的结构特征也更为明显,更有助于后续的处理和识别。

点击下载源码

相关文章:

day11 - 手写数字笔迹细化

手写数字笔迹细化 对于手写数字识别实验中,经常会遇到因为笔迹较粗导致误识别的情况,所以我们通常会先将笔迹进行细化,笔迹变细以后,数字的特征会更明显,后续进行识别的准确率就会更高。 例如数字7 和 1 &#xff0c…...

C++ QT QDBus基操

以下是使用QDBus进行跨进程通信的具体用法&#xff1a; 1. 创建DBus服务 在服务端进程中&#xff0c;需要创建一个DBus服务&#xff0c;并注册DBus对象。示例代码如下&#xff1a; #include <QDBusConnection> #include <QDBusMessage> #include <QDBusInterf…...

STM32的SPI外设

文章目录 1. STM32 的 SPI 外设简介2. STM32 的 SPI 架构剖析2.1 通讯引脚2.2 时钟控制逻辑2.3 数据控制逻辑2.4 整体控制逻辑 3. 通讯过程4. SPI 初始化结构体详解 1. STM32 的 SPI 外设简介 STM32 的 SPI 外设可用作通讯的主机及从机&#xff0c;支持最高的 SCK 时钟频率为 …...

VMWare ESXI6.7创建虚拟机

VMware ESXi&#xff1a;专门构建的裸机 管理程序 首先开启ESXI主机 登录ESXI 打开浏览器输入物理机ip&#xff0c;输入账号密码进行登录 创建虚拟机 选择创建类型 创建RedHat7.6 选择存储类型和数据存储 仅一个存储&#xff0c;直接点下一页即可 配置虚拟机硬件和虚拟机附…...

TensorFlow 1.x学习(系列二 :4):自实现线性回归

目录 线性回归基本介绍常用的op自实现线性回归预测tensorflow 变量作用域模型的保存和加载 线性回归基本介绍 线性回归&#xff1a; w 1 ∗ x 1 w 2 ∗ x 2 w 3 ∗ x 3 . . . w n ∗ x n b i a s w_1 * x_1 w_2 * x_2 w_3 * x_3 ... w_n * x_n bias w1​∗x1​w2​∗…...

Openwrt折腾记6-网络摄像头

前言&#xff1a; 前几天买了个电视机上的摄像头&#xff0c;但是估计是电视配置或软件不好&#xff0c;视频通话太卡顿。今天把它装的极路由4的usb上了。由于当初挑的是电视免驱的&#xff0c;所以我猜想是通用的芯片。 调查驱动 LINUX uvc支持型号的列表里 http://www.ide…...

C++判断大端小端

C判断大端小端 1. 基础知识 大端小端其实表示的是数据在存储器中的存放顺序。 大端模式&#xff1a;数据的高字节存放在内存的低地址中&#xff0c;而低字节则存放在高地址中。地址由小到大增加&#xff0c;数据则从高位向低位存放&#xff0c;这种存放方式符合人类的正常思维…...

K8S RBAC之Kubeconfig设置用户权限,不同的用户访问不同的namespace

1.CA签发客户端证书 检查证书是否存在 # ll /etc/kubernetes/pki/ 总用量 48K -rw-r----- 1 kube root 2.1K 3月 2 16:44 apiserver.crt -rw------- 1 kube root 1.7K 3月 2 16:44 apiserver.key -rw-r----- 1 kube root 1.2K 3月 2 16:44 apiserver-kubelet-client.cr…...

CodeForces..学习读书吧.[简单].[条件判断].[找最小值]

题目描述&#xff1a; 题目解读&#xff1a; 给定一组数&#xff0c;分别是 “时间 内容”&#xff0c;内容分为00&#xff0c;01&#xff0c;10&#xff0c;11四种&#xff0c;求能够得到11的最小时间。 解题思路&#xff1a; 看似00&#xff0c;01&#xff0c;10&#xff0…...

灵活使用Postman环境变量和全局变量,提高接口测试效率!

目录 前言&#xff1a; 环境变量和全局变量的概念 环境变量和全局变量的使用方法 1. 定义变量 2. 使用变量 环境变量和全局变量的实例代码 变量的继承和覆盖 变量的动态设置 总结&#xff1a; 前言&#xff1a; Postman是一个流行的API开发和接口测试工具&#xff0c;…...

Springboot+Vue3 整合海康获取视频流并展示

目录 1.后端 1.1 导入依赖 1.2 代码实战 2.前端 2.1 首先安装海康的web插件&#xff0c;前端vue3代码如下&#xff1a; 1.后端 1.1 导入依赖 <dependency><groupId>com.hikvision.ga</groupId><artifactId>artemis-http-client</artifactId&g…...

Linux——进程退出

目录 一.进程退出时有三种选择&#xff1a; 1.1 echo $?命令&#xff1a; 功能&#xff1a; 打印距离现在最近一次执行某进程的退出码 例2代码&#xff1a; 例3&#xff1a; 例4代码&#xff1a; 1.3 进程运行过程中可能会出现的错误种类&#xff1a; 二.总结&#xff…...

组长给组员派活,把组长自己的需求和要改的bug派给组员,合理吗?

组长把自己的工作派给手下&#xff0c;合理吗&#xff1f; 一位程序员问&#xff1a; 组长给他派活&#xff0c;把组长自己的需求或者要改的bug派给他。组长分派完需求之后&#xff0c;他一个人干两个项目&#xff0c;组长却无所事事&#xff0c;这样合理吗&#xff1f; 有人说…...

Spring注解开发——bean的作用范围与生命周期管理

文章目录 1.bean管理1.1 bean作用范围Scope注解 1.2 bean生命周期PostConstructPreDestroy 2.小结 1.bean管理 1.1 bean作用范围 Scope注解 不写或者添加Scope(“singleton”)表示的是单例 如何配置多例&#xff1f; 在Scope(“prototype”)表示的是多例 1.2 bean生命周…...

C++ > Cmake

目录 编译器 多文件编译与链接 Makefile构建系统 编译器 厂商 C C GNU gcc g main.cpp #include <cstdio>int main() {printf("Hello, world!\n");return 0; }编译器, 是一个根据源代码生成机器码的程序 g main.cpp -o a.out调用编译器程序g, 读…...

Spring的Bean的生命周期

Spring的Bean的生命周期 Spring的Bean的生命周期 Spring的Bean的生命周期 Spring的Bean的生命周期包括以下阶段&#xff1a; &#xff08;1&#xff09;实例化Instantiation&#xff08;2&#xff09;填充属性Populate properties&#xff08;3&#xff09;处理Aware接口的回调…...

在树莓派上搭建WordPress博客网站,并内网穿透发布到公网

✨个人主页&#xff1a;bit me&#x1f447; 目 录 &#x1f43e;概述&#x1f490;安装 PHP&#x1f338;安装MySQL数据库&#x1f337;安装 Wordpress&#x1f340;设置您的 WordPress 数据库&#x1f339;设置 MySQL/MariaDB&#x1f33b;创建 WordPress 数据库 &#x1f33…...

跨平台C++ Qt数据库管理系统设计与实战:从理论到实践的全面解析

跨平台C Qt数据库管理系统设计与实战&#xff1a;从理论到实践的全面解析 一、引言&#xff08;Introduction&#xff09;1.1 数据库管理系统的重要性&#xff08;Importance of Database Management Systems&#xff09;1.2 C和Qt在数据库管理系统中的应用&#xff08;Applica…...

Ubuntu crontab定时任务

1. crontab 相关的命令&#xff1a; 安装&#xff1a;apt-get install cron 启动&#xff1a;service cron start 重启&#xff1a;service cron restart 停止&#xff1a;service cron stop 检查状态&#xff1a;service cron status 查询cron可用的命令&#xff1a;service …...

ChatGPT Prompt Engineering for Developers 大语言模型引导词指导手册

以下内容均整理来自deeplearning.ai的同名课程 Location 课程访问地址 https://learn.deeplearning.ai/chatgpt-prompt-eng 一、Guidelines for Prompting 引导语的编写原则 Prompting Principles 引导语编写原则 Principle 1: Write clear and specific instructions编写清晰…...

百度网盘Mac版终极加速教程:三步告别限速,免费享受SVIP极速下载

百度网盘Mac版终极加速教程&#xff1a;三步告别限速&#xff0c;免费享受SVIP极速下载 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 你是否曾经面对…...

FactoryBluePrints项目深度解析:戴森球计划终极工厂蓝图优化指南

FactoryBluePrints项目深度解析&#xff1a;戴森球计划终极工厂蓝图优化指南 【免费下载链接】FactoryBluePrints 游戏戴森球计划的**工厂**蓝图仓库 项目地址: https://gitcode.com/GitHub_Trending/fa/FactoryBluePrints FactoryBluePrints项目是戴森球计划游戏中最为…...

【2026年世界模型最全综述】:从开山之作到Sora与Genie 3

论文信息 标题&#xff1a;Understanding World or Predicting Future? A Comprehensive Surveyof World Models会议&#xff1a;ACM Computing Surveys 2026&#xff08;计算机领域顶级综述期刊&#xff09;单位&#xff1a;清华大学FIB-Lab代码&#xff1a;https://github.c…...

实测:把Ubuntu 22.04装进移动固态硬盘,读写速度到底怎么样?附性能优化技巧

移动固态硬盘上的Ubuntu 22.04性能实测与深度调优指南 当我们将完整的Ubuntu系统装进移动固态硬盘时&#xff0c;最令人忐忑的莫过于性能表现——这个装在口袋里的系统能否像内置硬盘一样流畅&#xff1f;本文将通过一系列严谨测试&#xff0c;揭示移动固态硬盘运行Ubuntu的真…...

HS2-HF_Patch终极指南:如何快速获得完整汉化与去码体验

HS2-HF_Patch终极指南&#xff1a;如何快速获得完整汉化与去码体验 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch HS2-HF_Patch是《Honey Select 2》游戏的全功…...

NotebookLM实验结果可信吗?(P值阈值设定与多重检验校正全拆解)

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;NotebookLM实验结果可信吗&#xff1f;&#xff08;P值阈值设定与多重检验校正全拆解&#xff09; NotebookLM 作为基于文档的AI实验助手&#xff0c;其内置的“实验模式”常用于自动比对不同提示策略或模型配…...

以校园网讲解我们是怎么连上互联网的

校园网深度科普&#xff1a;从连接到通信的核心问题全解析 在校园里&#xff0c;我们每天用电脑、手机连校园网刷课、传文件、访问互联网&#xff0c;但你是否好奇&#xff1a;连网时数据要经过哪些设备&#xff1f;两台设备不用互联网能不能互通&#xff1f;家用路由器在校园…...

解析IFC:BIM领域的“通用语言”,好而不完美的开放标准

在建筑信息模型&#xff08;BIM&#xff09;的数字化协同体系中&#xff0c;IFC&#xff08;Industry Foundation Classes&#xff0c;工业基础类&#xff09;无疑是最具影响力的开放文件格式。它就像建筑行业的“通用语言”&#xff0c;打破了不同BIM软件之间的壁垒&#xff0…...

瑞萨MCU集成AI加速器:嵌入式开发者的边缘智能实战指南

1. 项目概述&#xff1a;当传统MCU巨头按下AI加速键最近在半导体圈里&#xff0c;一个消息引发了不小的讨论&#xff1a;瑞萨电子&#xff0c;这家在微控制器领域常年稳坐头把交椅的巨头&#xff0c;宣布要全面拥抱人工智能。你可能对这个名字有点陌生&#xff0c;但你的车里、…...

构建全志Tina Linux Docker编译镜像:从环境配置到CI/CD实践

1. 项目概述&#xff1a;为什么我们需要一个专属的Docker编译镜像&#xff1f;如果你和我一样&#xff0c;长期在嵌入式Linux开发领域摸爬滚打&#xff0c;那么“环境搭建”这四个字&#xff0c;大概率是你开发周期里最耗时、也最令人头疼的环节之一。尤其是当我们面对像全志Ti…...