杨振宁大学物理视频中黄色的字,c#写程序去掉

先看一下效果:(还有改进的余地)

我的方法是笨方法,也比较刻板。

1,首先想到,把屏幕打印下来。c#提供了这样一个函数:

 Bitmap bmp = new Bitmap(640, 480, PixelFormat.Format32bppArgb);

// 创建一个画布
            Graphics g = Graphics.FromImage(bmp);

Point hello = new Point(0, 300);
            g.CopyFromScreen(hello, Point.Empty, new Size(640, 480));
            // 释放画布资源
            g.Dispose();

2,上面代码什么意思呢?就是屏幕上取一幅640*480的bmp图像。

我们观察上图,黄色字方框大概在距离顶部300个像素的地方,即y=300,另外x在最左端=0.

执行代码,并显示,就是上图有半部分,要注意的是:我们这些代码在桌面运行时,不能遮挡网页(0,300)这个位置640*480的区域

3,显示640*480图像的代码为:

 timer1.Start();//显然,我们创建这个timer循环,为了实时捕捉网页视频。

显然,我们第一步得到的bmp,可以直接给picturebox。即:

 private void timer1_Tick(object sender, EventArgs e)

  {pictureBox1.Image = bmp;}//我们已经得到想要的图像

4,处理黄色字,首先黄色字外有一个覆盖带(显然是个矩形带),看上去,也应该消掉。

5,我们观察,发现在640*480这个截取的图像中,覆盖带y=205左右,x显然不是0,因为黑边很宽,大概在100左右,我们假定就是100,好这个矩形带的(top,left)有了,要消掉他,还得知道(botom,right),为了方便我们right取640.经过测试,发现bottom也是一个定值。

6,处理这个矩形框带还差一个条件,就是框内外的颜色差值。这个好办:

如上图,我们用阴影部分的灰度平均值减去框外灰度平均值,就可以得到这个颜色差。

7,矩形框带+颜色差,就消掉了矩形框带

8,想办法除却换色的字,容易,但干掉后怎么填充呢?这是个麻烦事!

我使用每一个字周边来填充,如下图:

每个字的每一笔画,如箭头开始位置,都用上下两块颜色值合并来填充。

好所有事情搞完,就是了。

rgb转黄色的色调,在35到85之间。

代码还比较麻烦,不是很满意。而且这黄色的字位置会变化,矩形框带也跟着变。

想到的另一个办法是:

megauging中形状匹配已经实现了,抄过来就好了。

即黄色的字框入roi,学习,然后实时匹配这些字,即使黄色的字位置会变化,矩形框带也跟着变也不影响!

关键是,字扣掉后填充还得下功夫!颜色差相对容易些!

突然想到形态学腐蚀

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/63561.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数字图像处理(15):图像平移

(1)图像平移的基本原理:计算每个像素点的移动向量,并将这些像素按照指定的方向和距离进行移动。 (2)平移向量包括水平和垂直分量,可以表示为(dx,dy)&#xff…

基于springboot+vue实现的剧本杀管理系统(源码+L文+ppt)4-114

摘 要 剧本杀管理系统是一个综合性平台,为剧本杀游戏爱好者、创作者及商家提供多方位服务。系统具备用户账号管理、剧本分类、预约、评价和论坛交流等核心功能。通过这个平台,用户可以便捷地浏览各类剧本信息,根据兴趣和时间安排进行预约&a…

Android开发-----Could not install Gradle distribution from- gradle

Could not install Gradle distribution from - gradle 这个通常是因为网络原因导致的,即使科学上网了,但是仍然不行。所以需要另辟蹊径。 打开gradle-wrapper.properties 原地址:distributionUrlhttps\://services.gradle.org/distributio…

FPGA工作原理、架构及底层资源

FPGA工作原理、架构及底层资源 文章目录 FPGA工作原理、架构及底层资源前言一、FPGA工作原理二、FPGA架构及底层资源 1.FPGA架构2.FPGA底层资源 2.1可编程输入/输出单元简称(IOB)2.2可配置逻辑块2.3丰富的布线资源2.4数字时钟管理模块(DCM)2.5嵌入式块 …

MATLAB中drawnow命令的作用和使用方法

MATLAB 中,drawnow 是一个非常有用的命令,它的主要功能是在图形绘制过程中强制 MATLAB 更新当前图形窗口。本文具体说明其作用和使用方法 文章目录 功能说明使用场景使用方法示例代码运行结果 总结 功能说明 更新图形: drawnow 会立即绘制所有…

HTML Input 文件上传功能全解析:从基础到优化

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

麒麟 V10 系统(arm64/aarch64)离线安装 docker 和 docker-compose

前期准备 查看操作系统版本,跟本文标题核对一下 uname -a查看操作系统架构 uname -m下载离线包 下载 docker 离线包 地址:https://download.docker.com/linux/static/stable/ 选择系统架构对应的文件目录:aarch64,我目前使用…

HarmonyOS(64) wrapBuilder 全局@Builder使用利器

WrapBuilder 全局Builder是什么什么时候使用wrapBuilderBuilder的限制参考资料 全局Builder是什么 局部Builder的定义方法如下: //定义局部Builder Builder MyBuilderFunction() {} //使用方法 this.MyBuilderFunction()全局Builder定义语法如下: //全…

怎么获取Java高并发经验与系统设计技能?

如何获得高并发经验? 这是系统邀请我回答的一个问题,由此也引发了我的一些思考:为什么人人都想要获得高并发经验;想拥有高并发系统设计技能? 其原因LZ认为主要有以下三点: 涨薪:有高并发系统设…

Spark实训

实训目的: 介绍本实训的基本内容,描述知识目标、,以及本实训的预期效果等。 1、知识目标 (1)了解spark概念、基础知识、spark处理的全周期,了解spark技术是新时代对人才的新要求。 (2)掌握Linux、hadoop、spark、hive集群环境的搭建、HDFS分布文件系统的基础知识与应用…

笔记:在WPF中BitmapSource都有哪些派生类,他们主要功能,使用方法,使用场景

一、目的:在WPF中BitmapSource都有哪些派生类,他们主要功能,使用方法,使用场景 BitmapSource 是 WPF 中图像处理的基类,提供了许多派生类来处理不同类型的图像源。以下是一些常见的 BitmapSource 派生类、它们的主要功…

算法-字符串-43.字符串相乘

一、题目 二、思路解析 1.思路: 1.双重for循环,倒序依次相乘 2.在倒序处理进位问题 3.最后返回参数的类型是string,用StringBuilder拼接,再转换为字符串 2.常用方法: 1.equals,比较对象内容是否一致 "0".eq…

Next.js优化教程:优化元数据

更多有关Next.js教程,请查阅: 【目录】Next.js 独立开发系列教程-CSDN博客 目录 前言 1. 元数据的重要性 1.1 什么是元数据? 1.2 元数据优化的核心目标 2. Next.js 的元数据管理工具 2.1 使用 metadata 属性 2.2 动态元数据 3. 高级…

【机器学习】机器学习的基本分类-监督学习-Lasso 回归(Least Absolute Shrinkage and Selection Operator)

Lasso 回归是一种线性回归方法,通过引入 ​ 正则化(绝对值惩罚项)约束回归系数,既能解决多重共线性问题,又具有特征选择能力。 1. Lasso 回归的目标函数 Lasso 的目标是最小化以下损失函数: 其中&#xff…

CH592用PB10做GPIO输入中断问题记录

PB10和PB22正常用作烧录,但是可以正常做GPIO口使用的,同时支持输入中断。因实际layout问题最终使用PB10做GPIO输入中断功能。 主要功能:PB10检测充电芯片状态,并根据充电芯片状态切换芯片自身的工作模式,进行不同的任务…

20.LMAX-DDD的极致性能架构

学习视频来源:DDD独家秘籍视频合集 https://space.bilibili.com/24690212/channel/collectiondetail?sid1940048&ctype0 文章目录 历史起源架构目标架构要素 时序对比传统时序事件溯源时序LMAX时序 单线程非阻塞异步IO(reactor)多线程单…

图海寻径——图相关算法的奇幻探索之旅

一、图的表示 1. 邻接矩阵 (Adjacency Matrix) #include <iostream> #include <vector> #include <queue> #include <limits>using namespace std;class GraphMatrix { private:int numVertices;vector<vector<int>> adjMatrix;const st…

Docker单机网络:解锁本地开发环境的无限潜能

作者简介&#xff1a;我是团团儿&#xff0c;是一名专注于云计算领域的专业创作者&#xff0c;感谢大家的关注 座右铭&#xff1a; 云端筑梦&#xff0c;数据为翼&#xff0c;探索无限可能&#xff0c;引领云计算新纪元 个人主页&#xff1a;团儿.-CSDN博客 目录 前言&#…

【前端】深入解析 JavaScript 中的 instanceof 运算符与 number 数据类型 和 Number 对象 区别辨析

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: 前端 文章目录 &#x1f4af;前言&#x1f4af;理论基础&#xff1a;instanceof 运算符的设计初衷与核心功能基础定义与应用示例解析代码分解 &#x1f4af;typeof 与 instanceof&#xff1a;两种类型检测方法的语义与…

UI自动化测试框架:PO模式+数据驱动

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 1. PO 设计模式简介 什么是 PO 模式&#xff1f; PO&#xff08;PageObject&#xff09;设计模式将某个页面的所有元素对象定位和对元素对象的操作封装成一个 Pa…