杨振宁大学物理视频中黄色的字,c#写程序去掉(原版改进,三)

news2024/12/16 18:38:08

上一节,我们分清了主次矛盾,并搞定了主要矛盾(去掉黄色的字),这一节解决次要矛盾(矩形色带)。

我们的想法如图:

1,我们找到稳定黄色的最左边,最右边两点,画两条竖线,竖线高度10,根据这两条竖线,分别向外拉伸10条横线。代码如下:

for (int i = 240; i <480; i++)
                        {
                            byte fugair = 0; byte fugaig = 0; byte fugaib = 0;
                            byte fugai = 0;
                      
                            for (int j = 0; j < 640; j++)
                            {
                                int n = i * ww + j;
                                float hue = 0;
                 RGB2HSLTest(rgbValues[4 * n + 2], rgbValues[4 * n + 1], rgbValues[4 * n], ref hue);

                          if (hue > 35 && hue < 85 )//,黄色范围给的比较宽泛                       
                    {//黄色
                      
                        //新增,寻找黄色字50-63外接矩形202412130850
                        if (hue > 50 && hue < 63)//黄色收窄
                        {
                            if (j  < 找最小) { 找最小 = j ; 存黄色始末[0].X=找最小 ;存黄色始末[0].Y=i ;}
                            if (j > 找最大) { 找最大 = j ; 存黄色始末[1].X = 找最大; 存黄色始末[1].Y = i ; }
                        }

   rgbValues[4 * n + 2] = (byte)(rgbValues[4 * n + 2 - 4 * ww] / 2 + fugair / 2);
                                    rgbValues[4 * n + 1] = (byte)(rgbValues[4 * n + 1 - 4 * ww] / 2 + fugaig / 2);
                                    rgbValues[4 * n] = (byte)(rgbValues[4 * n - 4 * ww] / 2 + fugaib / 2);

}else{......}

2,存黄色始末[0]就是黄色最左点,存黄色始末[1]就是黄色最右点。

根据这两点,向外各画出十条直横线线,找到穿越点,我们目的是找到边界,即线A和B。如图:

代码如下:

   Point[] 左侧穿越点 = new Point[10]; int b= 0;
   
    for (int xy = 存黄色始末[0].Y - 5; xy < 存黄色始末[0].Y + 5; xy++)
    {
        for (int j = 存黄色始末[0].X; j >0; j--)//
        {
            int n = xy * 640 + j;
            if (Math.Abs(glob_buffer8[n] - glob_buffer8[n - 1]) > 10)
            {
                左侧穿越点[b].X = j;
                左侧穿越点[b].Y = xy;
                break;
            }
        }
        b++;
    }
    Point[] 右侧穿越点 = new Point[10]; int a = 0;
            for (int xy = 存黄色始末[1].Y - 5; xy < 存黄色始末[1].Y + 5; xy++)
            {
                for (int j = 存黄色始末[1].X; j < 640; j++)//
                {
                    int n = xy * 640+ j;
                    //找灰度化大于10的点
                    if (Math.Abs(glob_buffer8[n] - glob_buffer8[n - 1]) > 10)
                    {
                        右侧穿越点[a].X = j;
                        右侧穿越点[a].Y = xy;
                        break;
                    }

                }
                a++;
            }

3,利用a竖线和b竖线的起点,各往后退3个像素,往上做垂线,找到色带水平线cd,会找到c.y和d.y值,如果相差小于2个像素,我们就认为色带水平线确认了。如图:

代码如下:

   Point[] 向上穿越点 = new Point[2];
            向上穿越点[0].X = 左侧穿越点[0].X+3; 向上穿越点[0].Y = 左侧穿越点[0].Y;
            向上穿越点[1].X= 右侧穿越点[0].X-3; 向上穿越点[1].Y= 右侧穿越点[0].Y;
            int y上界 = 0;
            int y上界1 = 0;
            for (int xy = 向上穿越点[0].Y; xy >0; xy--)
            {

                int n = xy * 640 + 向上穿越点[0].X;
                if (Math.Abs(glob_buffer8[n] - glob_buffer8[n - 640]) > 10)
                {
              
                    y上界 = xy;
                    break;
                }
                
            }
            for (int xy = 向上穿越点[1].Y; xy > 0; xy--)
            {

                int n = xy * 640 + 向上穿越点[1].X;
                if (Math.Abs(glob_buffer8[n] - glob_buffer8[n - 640]) > 10)
                {
                  
                    y上界1 = xy;
                    break;
                }

            }

  if (Math.Abs(y上界1 - y上界) <= 2)
            {
                //ok,找到矩形色带上界
            }
            else
            {
                return; 
            }

4,色带矩形的高有一个经验值118.所以这个色带矩形在视频中有变化,我们有了自动化应对的方法。我们前面也说过了,色带矩形比其他灰度相比,少了50,现在色带矩形中所有像素全部加上50,就ok了。

看到我们上面红色return了没有,如果矩形估计失败(背景出现一堆学生),色带矩形还会在,但黄色还是稳定处理过了。

 // (  消除色带矩形 )            

  for (int i =左侧穿越点[0].X; i < 右侧穿越点[0].X; i++)
      
                for (int j = y上界 ; j < y上界 +118; j++)
             
                {
                    int temp = j * 640 + i;//原方法
                    rgbValues[temp * 4] = (byte)(rgbValues[temp * 4] + 50 > 255 ? 255 : rgbValues[temp * 4] + 50);
                    rgbValues[temp * 4 + 1] = (byte)(rgbValues[temp * 4 + 1] + 50 > 255 ? 255 : rgbValues[temp * 4 + 1] + 50);
                    rgbValues[temp * 4 + 2] = (byte)(rgbValues[temp * 4 + 2] + 50 > 255 ? 255 : rgbValues[temp * 4 + 2] + 50);
                                                        
                }

这个改进型原版,肯定比原版自适应性好很多!

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

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

相关文章

第24周:文献阅读

目录 摘要 Abstract 一、现有问题 二、提出方法 三、创新点 模型结构创新 强化学习与GAN结合 属性特征与通顺性优化 四、方法论 生成对抗网络&#xff08;GAN&#xff09; 强化学习&#xff08;RL&#xff09; 模型组件 五、实验研究 数据集 数据预处理 评价指…

SQL server学习05-查询数据表中的数据(上)

目录 一&#xff0c;基本格式 1&#xff0c;简单的SQL查询语句 2&#xff0c;关键字TOP 3&#xff0c;关键字DISTINCT 二&#xff0c;模糊查询 1&#xff0c;通配符 三&#xff0c;对结果集排序 1&#xff0c;不含关键字DISTINCT 2&#xff0c;含关键字DISTINCT 3&…

【Azure 架构师学习笔记】- Azure Function (1) --环境搭建和背景介绍

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Function 】系列。 前言 随着无服务计算的兴起和大数据环境中的数据集成需求&#xff0c; 需要使用某些轻量级的服务&#xff0c;来实现一些简单操作。因此Azure Function就成了微软云上的一个必不可少的组成部分。 …

KeepAlive与RouterView缓存

参考 vue动态组件&#xff1c;Component&#xff1e;与&#xff1c;KeepAlive&#xff1e; KeepAlive官网介绍 缓存之keep-alive的理解和应用 Vue3Vite KeepAlive页面缓存问题 vue多级菜单(路由)导致缓存(keep-alive)失效 vue3 router-view keeperalive对于同一路径但路径…

Linux:进程(环境变量、程序地址空间)

目录 冯诺依曼体系结构 操作系统 设计操作系统的目的 操作系统的管理 进程 PCB fork 进程状态 进程状态查看 僵尸进程 孤儿进程 进程优先级 查看、修改进程优先级命令 竞争、独立、并行、并发 进程切换 活动队列和运行队列 活动队列 过期队列 active指针…

希迪智驾持续亏损8.2亿:毛利率下滑,冲刺“自动驾驶矿卡第一股”

《港湾商业观察》黄懿 近日&#xff0c;希迪智驾&#xff08;湖南&#xff09;股份有限公司&#xff08;下称“希迪智驾”&#xff09;向港交所主板递交上市申请&#xff0c;联席保荐人为中金公司、中信建投国际、中国平安资本&#xff08;香港&#xff09;。 资料显示&#…

Rust之抽空学习系列(三)—— 编程通用概念(中)

Rust之抽空学习系列&#xff08;三&#xff09;—— 编程通用概念&#xff08;中&#xff09; 1、变量&可变性 在Rust中&#xff0c;变量默认是不可变的 fn main() {let x 5;println!("x is {}", x); }使用let来声明一个变量&#xff0c;此时变量默认是不可变…

OpenCV中的识别图片颜色并绘制轮廓

一、实验原理 使用OpenCV库在图像中识别和绘制特定颜色&#xff08;黄色&#xff09;的轮廓 二、实验代码 import cv2 import numpy as np# 读取图片并调整大小 img cv2.imread(./color_1.png) img cv2.resize(img,(600,600))# 将图片从BGR颜色空间转换到HSV颜色空间 img_h…

【Qt】qt基础

目录 一、使用Qt Creator创建qt项目 二、项目文件解析 三、Qt中创建图形化界面的程序的两种方法 四、对象树 五、Qt中处理打印乱码问题的利器&#xff1a;qDebug() 一、使用Qt Creator创建qt项目 1.选择项目模板 选中第一类模板Application(Qt应用程序&#xff0c;包含普…

Transformer入门(6)Transformer编码器的前馈网络、加法和归一化模块

文章目录 7.前馈网络8.加法和归一化组件9.组合所有编码器组件构成完整编码器 7.前馈网络 编码器块中的前馈网络子层如下图所示&#xff1a; 图1.32 – 编码器块 前馈网络由两个带有ReLU激活函数的全连接层组成。全连接层&#xff08;Fully Connected Layer&#xff09;有时也…

AI智算-k8s部署大语言模型管理工具Ollama

文章目录 简介k8s部署OllamaOpen WebUI访问Open-WebUI 简介 Github&#xff1a;https://github.com/ollama/ollama 官网&#xff1a;https://ollama.com/ API&#xff1a;https://github.com/ollama/ollama/blob/main/docs/api.md Ollama 是一个基于 Go 语言开发的可以本地运…

HTML/CSS总结

HTML 1.1 标题标签h 为了使网页更具有语义化&#xff0c;我们经常会在页面中用到标题标签&#xff0c;HTML提供了6个等级的标题&#xff0c;即 标题标签语义&#xff1a; 作为标题使用&#xff0c;并且依据重要性递减 其基本语法格式如下&#xff1a; <h1> 标题文本…

信号处理:概念、技术、领域

目录 基本概念 主要技术 应用领域 信号处理是一个涉及分析、修改和再生信号的多学科领域。信号可以是各种形式的&#xff0c;例如声音、图像、视频或其他类型的监测数据。信号处理的主要目标是提取有用的信息并增强信号的质量。以下是信号处理的一些基本概念和应用&#xff…

黑盒白盒测试

任务1 黑盒测试之等价类划分法 【任务需求】 【问题】例&#xff1a;某报表处理系统要求用户输入处理报表的日期&#xff0c;日期限制在2003年1月至2008年12月&#xff0c;即系统只能对该段期间内的报表进行处理&#xff0c;如日期不在此范围内&#xff0c;则显示输入错误信息…

深度学习物体检测之YOLOV5源码解读

V5比前面版本偏工程化,项目化,更贴合实战 一.V5版本项目配置 (1)整体项目概述 首先github直接查找yolov5&#xff0c;下载下来即可。在训练时&#xff0c;数据是怎么处理的&#xff1f;网络模型架构是怎么设计的(如各层的设计)&#xff1f;yolov5要求是大于python3.8与大于等…

Go 怎么做性能优化芝麻开门篇

一、性能优化的流程 我们在对某个功能&#xff08;或单个接口&#xff09;做性能优化的时候。一般是该功能&#xff08;或接口&#xff09;性能无法满足我们的业务要求&#xff0c;所以被迫优化。在开始优化之前&#xff0c;我们需要明白一些理论知识。 1、常见的性能优化指标…

【Elasticsearch入门到落地】4、Elasticsearch的安装

接上篇《3、es与mysql的概念对比》 上一篇我们学习了Elasticsearch与Mysql的概念与区别。本篇我们来进行Elasticsearch的环境准备及软件安装。 一、环境准备 如果我们没有自己的Linux服务器&#xff0c;且现在正在使用的是Windows操作系统的电脑&#xff0c;那么首先我们需要安…

CRYPTO密码学

加解密算法/编码 哈希算法SM3SHA-3base家族GBGB18030GB2312GBKutf家族恺撒二进制分区法unicodeASCIIDSADSSCRC32校验对称非对称gbk编码h264SEA初探smc动态代码保护四方密码曼彻斯特编码剖析基本概念什么是编码?什么是加密与解密寻找银弹-有没有无法破解的密码通过Java代码入门…

我们来学mysql -- 探讨win安装方式(安装篇)

题记 书接上回&#xff0c;在我们来学mysql – 闲聊(安装篇)中&#xff0c;拿到安装包&#xff0c;当宝贝一样揣在怀里 然而&#xff0c;还没捂热乎&#xff0c;得粉丝秘报&#xff0c;U哥&#xff0c;上篇文章用了滞后的官方文档&#xff0c;哈哈哈…内心的小倔强&#xff0c…

pip 如何快速安装包

一、问题描述 当使用Python通过pip安装一些包时&#xff0c;pip默认是访问的国外的源&#xff0c;但在国内访问又是异常的慢&#xff0c;而且还经常因为网络问题导致安装失败&#xff0c;比如下面通过pip install jupyter来安装jupyter Notebook&#xff0c;这网速真的超级慢&…