粉丝49获赞54

关于解决 how can the license 问题,很多同学反馈找不到 license 是放在哪里?以 how can 二十三点零五版本为例,一、点击 settings 二、点击 installations。 三、点击第一个文件夹,然后打开文件夹,找到 license 文件夹,放入这两个通用的 license 即可学习试用。注意,如需商用,请在官网购买正版后商用。

今天介绍一个新功能,我们把奥卡里面的那个用匹配,用 dxf 文件,就是 cad 里面的一种格式来做匹配的那个功能做出来的, 我们取个名字叫 cad matching, 打开搭载 dxf 文件,这是它的轮廓线, 然后 skill 比例搜寻默认是一到五,因为你的在 cd 里面画出来之后,然后和你相机拍出来的实际图,他会有一定的比例差异,所以你在做之前要先找到这个比例 关系,那默认是一到五的范围,他找到之后他会去替换这个默认的比例值啊。三点四, 然后匹配到一个 sy, 其他的设定和形状匹配差不多数量更多数量得分金字塔等级,呃,角度范围 啊,急性这些和匹配的生病一样。红茶 我们是来夹在第二个打开 哦,我知道是三点四的话,我可以直接输入看一下这个边, 当你调整这个三点四三点几的比例的时候,我们其实讲叫一个 xld 的一个轮廓线,他的轮廓线会跟着一起去做一个比例的缩放,放大或者缩小, 那还款自动搜的话是三点四作为最合适,那看到他的得分是一个零点九七, 妈妈看一下最后一个,第三个, 第三个他有一个遮挡,那在这种条件下,我们在搜寻比喻的时候,三点四我们会把得分得分放到 暂时放到零点七,然后去搜寻比例,我们找到一个合适的比例以后,我们可能会出现这种。呃,没有匹配到的情况,那我们调低一下我的得分, 那如果你当所有的轮廓是一个百分之百,那我调集得分可以拿到一个好的轮廓, 我请是这样子,请把指甲。

现在我有一个需求是要求提防数据库中带有文件地址的 ip, 然后变更成另外一个 ip, 也就是说我们的文件服务器可能 有牵引,然后需要更换我们的地址。但是说有些小伙伴可能就会有疑问,为什么我们的地址存的不是后面的 uri 地址?把前面这节放到我们的加号配置项目里面去进行动态的配置。这个问题问的好, 但是现在的问题就是说我们数据库中存了一个完整的链接地址,要求我们去替换 ip 或者域名,这个时候我们应该怎么搞呢? 如果要解决这个问题,我们就应该清楚哪些库里面的哪些表以及哪些字段需要我们进行相关的一个替换。比如说现在在我这张测试表里面的字段叫 url, 这个字段是带含文件地址的,需要我们进行替换,但是有可能其他的表里面叫尹曼吉或者其他的名字,这时候我们如果说去一个一个去查找表 你的这段经纪录,然后再一个一个去替换就很麻烦。第二个我们要知道替换语法是什么样的,比如说我整理的 update 的更新语句,我们更新这张表里面的 url 地址,然后我们可以通过这个 replace 替换这个 url 字段中包含幺二七的这个内容, 将它替换成我们这个三 w 这个地址。我们先来看下效果,先执行一下,执行完之后你会发现这里有三条的一个变更语句,也就是我们这张测试表,我们刷新下可以发现就成功替换了,这是我们的一个替换效果。 然后回到第一个问题,如果说我要替换到本次业务相关的所有库下面的所有表,再有这个内容的相关制段信息,那么这时候我们就需要知道数据库里面有这么一个 information schem, 在这个表里面有这么一个制段表,这个制段表里面 记录了我们数据库中的一个数据库名以及相关的表以及这段信息。知道这里面记录了表这段信息之后,我们就可以通过去手动的去拼接出我们要更新的一个语法, 比如说我们可以先去查询到这张表里面的一个质量信息,说这里的是 demo 数据库,然后我可以去动态的去拼接我这里的一个更新语句,比如说这里更新的是这张表里面的一个表明,以及我们设计一个值,然后设置更新我们的一个质段名,然后等于我们的替换语句, 然后就是我们最后加了一个未了条件,通过这个函数我们就可以判断到这个字段里面是否带有这个关键内容,如果说有的话我们就进行提款,没有的话我们就不处理。当然我们也可以使用耐克模糊查询去判断有没有包含这个内容。 然后我们可以来执行下这个 c 口,在下面我们就可以拿到相关的所有的一个表字段的一个替换语句,我们将这个表字段的替换语句全部 ctrl c, 然后到这个粘贴板里面来 ctrl v 一下,这里就给出了所有的一个表字段的一个更新操作语句,然后我们统一的去执行一下, 然后就可以得到我们最终的一个处理结果,我这里是将这个库下面的所有字来进行的替换,实际的时候我们可能只需要替换掉我们的一个挖叉类型, 也就是说这不算类型,像其他的硬头类型我们就根本不需要替换。所以说我们可以通过这个 detap 去判断一下,去过滤一下我们的需要替换的一个数据再走。如果说我们的表数据呢?已经上千万级了,这样直接去替换肯定会出现新的问题的。 所以说在业务前期我们就应该只存下 ui 地址,涉及到前面的域名,我们就应该做成一个配置选项,这样可以防止我们服务器域名变更的时候可以快速替换。

how can 联合 c 编程零基础到实战教程耗时九十分钟,想零基础入门的小白不能错过,教程有点长,建议马柱慢慢学习,看完这个教程你会了解, 一、环境安装加 help 基础二、 hyperreader type 类型加 c 中调用三、常用算子加 r o y 绘制加窗口控件四、相机项目 ui 脚本函数内存管理。本教程提供对应源码素材,有问题可以在评论区互动,可见源码素材都打包好了。六六六六抱走 好呃,大家好,我是瑞祥老师啊,欢迎来到我们朝夕机器视觉课堂,新的一年啊,这里呢,祝大家新年快乐啊,那么这一期的视频呢,瑞祥老师准备给大家带来的是 关于 hulk 联合 c l 编程的基础内容的课程体系。呃,在这啊,在这一个课程体系里面的话呢,我们还是以通过视频录播的方式呢,给咱们兄弟们去提供啊, 呃,其中呢这组啊这一个系列的内容呢啊,当然啊,第一个就是我们涉及到给给提供大家的有视频的回放,包括了有项目的笔记,源码以及知识点的笔记,包括了还有我们啊当前这里给他整理的这个详细的文档, 整套内容呢,就是由右边这位瑞夏老师来给咱们兄弟去负责录制啊,去那个 产出我们这一块的教程,那么在这一块教程中呢,我们主要含盖的啊,呃,内容体系呢,其实有下面这一些内容啊,首先就是关于 hulk 联合 c l 编程的那个环境的构建啊,呃,其实这一块内容话呢,在前面也给咱们兄弟们去做了一些的这个讲解, 那么这里面每一个体系里面的话,咱们这个环境的构建啊,这是必不可少的。然后呢,就是关于 hack 提供 api 的 结构啊,比如说像啊, h object 啊,像 h 的 top layer, 它的一个基础用法啊,包括了它的一些派生类啊,各自有什么特点啊,它是代表着什么? 那么这些的话呢,会在我们视频中给咱们兄弟做一个详细的解读,此外的话,还有 hack 中常见的算子在私下中调用啊,呃,其实呢,在前面啊,我们做的 这个 blog 分 析啊,其实就是啊呃,是调动了他的其中的各种算子啊,那么此外的话呢,还有就是 hulk 在 c f 中对象中的一些内存管理 是吧?那么这个的话呢,其实啊呃,相当说是这个其实是涉及到如果说对 hulk 已经有一些啊基本的认识之后啊,然后呢,我们去聊一聊啊,更深入的那个 c f 对 象的一些内存管理 啊,紧接往后,后面这里呢,咱们是 hoken 提供啊, c 下五控件啊,这里面涉及的控件有 h window control 和 h smart window control 这两种控件的这个用法,以及它们之间的一些区别。在这一系列视频中呢,我们后面会选择几个小视频呢,给咱们兄弟们去详细的去介绍我们这块内容,好吧啊,这是我们前沿给咱们兄弟们去做了一个安排啊。 好呃,大家好,我是瑞特老师,那么从这个视频呢,我们来给大家介绍一下关于呢,呃, hulk 联合 c l 编程呢,涉及到一些环境的准备啊。呃,那么在这个里面,其实我们需要准备了两块的这个相关内容啊 啊,这会内容中的话呢,首先第一个其实就是我们这个关于 hokken 软件的一个安装,这个安装的话呢,呃,其实我之前呢给大家去录制过关于这个安装的相关的视频,在哪呢?在这个链接里面,所以说在这里的话,我就准备把这个里面内容呢就直接呃 可以呢让大家可以直接自行去下载啊,去按照着这个对应的视频呢去进行安装。今天的话呢在这啊我没有准备继续给咱们兄弟们去演示如何去呢,再把它给安装一遍啊,因为我本地其实呢已经去安装好了啊,咱们兄弟们可以看到的就是呢 我们桌面上呢这里呢其实有一个啊这个软件儿啊,这就是什么?这就是啊我们安装好的这个 hokken 的 一个集成开发环境,那么我们基于它的话,其实我们可以做呢,呃, hokken 支持这个所有功能其实都可以去进行呢这个完成, 这是我们所说的啊关于这个 hokken 安装。其次呢这里 hokken 安装的时候呢,大家其实还需要注意一个东西啊,就是在安装成功以后,其实呢我们是需要去呢给这个 hokken 去进行配置它的 授权文件啊,其实也就是 license 啊,因为本身这个 hokken 软件其实它的正版的软件是一个授权的啊,它是需要进行的这个购买版权的这样一个软件啊, 而且这个价格呢比较贵。而我们这里呢给大家提供这块安装的话,呃,可以给咱们啊兄弟们提供他的安装包,包括他的一个呃,安装之后呢就授权的 nice 的 文件啊,这个其实都是可以的,在我们这一个视频里面都可以去获取到的 哇,所以这会的话呢,大家就严格的按照我们下面这个教程里面去进行了一个安装完成,这是来啊,我们所说的关于 hok 的 安装 好,那么除了这个以外的话,还有一个就是关于的 c 下 c 下铺开发环境的一个安装,当然我这里开发的全部都是属于集成开发环境啊。 呃,同样的啊,在我们这里去安装的话呢,其实我们需要安装一个开发工具,叫什么叫微雪 studio 啊,这个的话呢,也会有相关的这个专业的教程会教给你们,当然这个视频的时候也是我来给咱们兄弟去录制的啊,大家可以直接去下载,然后呢对照着这个, 嗯,在我们这个安装的步骤啊,然后呢逐个去进行安装,只不过啊大家需要注意一下啊,在这里安装的时候呢,其实尽量不要去让他和其他别的软件呢,嗯,这个进行了一波冲突,好吧,避免的话呢,就是在安装失败情况下呢,就会比较麻烦啊啊, 这是关于我们环境的安装的啊,我们给咱们兄弟们提供的有相关的一个完整的教程啊啊,这个视频我们也就说到这 好,呃,大家好,我是肖老师啊,那么这个视频呢,我们来继续来给大家讲解关于 hocken 联合 cfo 编程的基础, 这个视频重点说说关于 hocken 的 这个 cfo 编程这一块儿呢,它的简介啊。呃,什么是 hocken 的 这个 cfo 多类编程呢?呃,其实呢,它是指我们 hocken 的 一个多类编程的一个语言接口啊, 例如 c 下五或者 vb 多链啊,它就是为我们提供了一组的那个啊 c 下五的内或者多链内的一个啊内啊和相关的控制啊。 那么它有什么特点呢?首先啊,就是平台的一个独立性啊,呃,就是我们不仅可以在啊呃所有的平台上使用它,它还可以呢,它也可以运行在其中一个 a p i 上创建应用程序。 在其他的 api 上创建了应用程序啊,也而无需呢重新去编辑它。这其实是呢,我们在使用这个 hunklenode 的 时候是完全可能实现的。 然后呢,这个 hunklenode 呢,它是高度独立于平台,它是用 c 下五来编辑的啊,呃,但可以啊,可用于任何 dunklenode 的 语言啊,它与一般的 dunklenode 呢一样啊,它可以在 windows 和 linux 上,包括呢在三十二位和六十四位的系统上。 此外的话呢,呃成功对 han 多纳腾和多纳库尔实现了进行的实验啊,基于在这个二木的平台上啊。此外的话呢,我们还可以在这些平呃还呃不仅可以在所有的这些平台上面使用它还可以运行啊,那么在其中一个 api 上创建应用程序呢?在其他的 api 上创建应用程序啊, 呃都不需要去重新编印它啊。嗯,好,这是呢它的一个平台和多纳 far 默克啊, 呃,这里的话呢,基本上多内应用程序呢,其实多为一个或者多个呢实现开发的这个多内的这个类型啊,这里面其实无非就是多内块和呃多内 fiona 啊,这里也就是咱们所说的叫多内框架,目前基本上都是进入多内块时代啊, 支持上面列出的所有的多的实现啊,所有的实现接口的其实都是相同的啊,以及他们进入的这个行为对于我们用户来说的话呢,呃,他们在工具和平台支持方面的话呢,呃,其实大多的会有所不同啊,那么这些的话呢,大家就其实做一个了解啊,然后的话呢,就是关于呢这个叫 啊 h develop 编辑多列特啊,这是通过了 hdevelop 点多列特语言进行绑定,我们可以执行到这个 hdevelop 的 程序和这个相关的过程啊,这其实也就是我们可以通过它来去执行这个 h 的 程序,也就是我们所说的呃,这个 h 程序, 那么然后呢还有 h 啊 develop 编辑点多列特,这里面设置了 h 多列特 x l 和这个呃 h d v n 点多来特 x 二啊,他为豪肯和豪肯 x 二呢提供了封装组合相关的组建啊,这个其实呢,呃,暂时呢我们可以不用关注这个啊,但这概念呢,咱们给咱们兄弟们首先呢去啊做一个基本的了解好吧。 啊,这是呢我们所说的关于豪肯多来特一个简介 好,呃,大家好,我是瑞夏老师,那么接下来呢,我们给大家来一个关于 hokken dollar 一个编程案例啊, 在这个案例中呢,我们的任务是读取图像并计算的这个图像中连接区域的相关的数量啊,这个大概的牛尺呢,咱们可以看,我这里呢 给他截的有这样一张图啊,左边这是一个咱们这样的图啊,这是然后呢这里面咱们去把它做二的画,然后这时呢咱们去做区域款,那以后呢可以得到的这个不同区域的这个,呃数量啊, 那么这个步骤里面其实我给他记了详细的笔记啊,这可以说非常详细,我们第一步需要干什么啊?这里面就是咱们需要准备 hock 的 那个,呃,依赖环境嘛,当然这个我们肯定已经安装好了啊,然后呢还有去安装的,嗯,这个多纳块儿的需要的 s d k 以及呢它的, 嗯,其实有哆来块 s d k 啊,我们没有 vs 啊,就是不使用它的这个开发工具, vs 的 话我们也可以去呢呃进行开发。这个,呃哆来块的啊, 然后呢我们呃在这里话就是没有提到 vs 的 话,就是我们相当说通过命令来直接进行的那个创建项目啊,这是呢我们在执行的时候它可以给我们创建了这样对应的一个项目出来 啊,然后呢引入需要的这个程序级,我们目前是二四点零五的这个版本,然后的话呢在这里咱们去创业出这个项目以后呢,那么他会有一个呢这个,嗯, pro 改 m 点 cs 的 这样一个内文件,我们在这个内文件里面咱们可以把那个文件内容呢改成这个样子啊,然后呢我们这会就可以 do 呢, do 内存软啊,这会呢就可以运行,那么运行的结果的话呢,其实呢,呃,其实它执行的就是核心代码,就是就在这里啊,就在这里, 这里呢大概来给咱们兄弟们去啊,说一下是什么意思啊?这里其实就是呢,哎,我们去啊得到了一个图像啊,然后呢通过这个图像呢进行一个二值化的处理, 二值化处理以后呢,其实就把这个图像呢分成了不同的区了啊,那么原原本一个彩图或者说一个呢灰度图的话,他里面这个区呢就只有一个,然后二值化的话呢,这会一处理的话呢,其实就会形成呢多个区域啊, 多的话这会咱们再把这个 p 呢进行一个什么进行一个区域砍断,再把它划分成更多的区域啊,最后呢这里面咱们可以得出一个区的结果啊,然后我这里对其做个输出,然后这个输出结果了,其实啊,我这里其实是有的啊, 它输出一个结果的为四十三,那么这个过程其实就是什么?就是我们在啊这个 howok 多了特啊,就是直接在多了里面,或者在 c 下面,咱们去呃处理我们图像的大概的这样一个过程。 我这里的话呢,其实写的有详细案例啊,大家在看到我们这个视频,或者说,呃,拿到我们这个 我这个文档以后啊,大家务必要去实操一下啊,这会的话呢,我没有给他现场去实操啊,因为这个其实我自己都非常清楚了,好吧, 这个的话内容其实比较简单,大家一定要去进行一个实操啊,实操之后的话呢,在这里其实大家会发现呢,这里会涉及到什么 h image 啊啊,包括呢还有什么 h object 等这些,那这个的话呢,我们在下个视频就开始给大家解读这块内容。好吧, 大家好,我是肖老师啊,那么这个视频呢,我们来给大家介绍一下关于呢啊 h object 类型和这两个 h tapper 类型啊,那么在这里的话呢,这两个类型其实是我们在 hokken 联合 c f 进行编程的时候呢,非常重要的两个类型啊,哎,我们来先来基本理解一下啊,在 hokken 联合 c f 编程中呢,就是我们需要把二者各自支持的类型是要进行匹配的, 因为啊,我们这个 hokken 中啊,我们所写的这个代码的话,这里其实它要调用各种算子啊,这个其实又叫 h d 编程,那么也就我这边写出的代码,其实它不是相同的代码, 那么咱们要把这边所写的这个代码呢,要和我们 c 样那么进行匹配啊,二者要能够联合起来的话呢,那么我们两种编程语言他其实会有 各自不同的那个数据类型,那么在这里以后呢,那么二者既然要联合的话,那么二者必须要去的匹配一些类型,不说把类型完全去统一的话,至少呢他每一种类型之间的话,哎,就是两种类型之间他有对应的关系,他能够进行匹配, 那么在 hook 中的话,分为图像的属性类型和控制属性类型,图像属性类型呢,包含了有什么 image 啊, 呃,像 region 啊,还有 x, l, d 啊,是吧,等等这些类型,那么在 hook 中的控中控制属性类型有什么啊? int 件其实有 int 类型,还有什么,呃,这个 rear 啊, screen 类型啊, topier 啊, hander 是 吧, 等等啊,这什么叫控制数据类型,那么这些数据类型的话呢,哎,其实这是在 hook 里面的内存,那么在 c f 的 话,其实呢,呃,它也有需要有匹配的内存来为之呢,哎,与这些内存呢进行匹配, 所以我们在通过 hunk 导出了 c f 程序以后呢,需要 c f 能够支持内存来匹配 hunk 这个内存,那么 hunk 联合 c l 编程这个程序集中呢,其实就已经支持了,叫什么 h object 和这个 h top 啊,就这个啊, 那么这两个,呃,叫 top 啊,这两个内存的话呢,嗯,其实就是我们在进行呃, c 下铺和 hulk 之间啊,这个数据类型进行匹配的一个纽带,好吧。啊,然后呢,咱们这里呢,咱们先看一下这个 hulk 啊,这个啊,先看下这个 object 啊,类似它是把图像的属性上分为成一个类的一种形式啊,包含了有什么 h 的 develop 下的这个像啊,这个 image 啊,还有什么 image 啊,还有个 s d, 嗯, x l d 啊,哦,还有这个 h develop 下所有的这个控制数据啊, 我们这里呢,有这样一个图啊,比如我们图形数据,这里有 image resume x, a, r d 的 啊,然后呢,这里面它是 导出之后呢,在 c 项目里面,其实它会有一个公共的,什么叫 h object 啊,有这些数据类型,其实在 c 项目里面,咱们统一都可以叫 h object, 统一来对其进行一个匹配啊,是没问题的啊,它把图像数据呢, 呃,这个蜂窝成一个类的一种形式啊,不是包含了在下面,这有 h t, y f, 下面是 emg 啊, root 二的,嗯,这个 x l d 的 啊, 那么也就是说这里面啊,在 hokken 中啊,它们这个三种数抽象数类型,其实在 sum 中其实都可以去呢通过 h object 来进行表示,那么这个 h object 下面,下面有什么 emg 以内和 x, l、 d 的? 其实这里面在 h, e, m, h 啊, h 语音还有 h, x, r, d 啊,那么对于这三个这是什么?这是我们左边,这也是 h d 面的,这是什么?在 sum 里面的,它们有一个关联关系。 此外除了这个图像图形类型以外,还有叫控制数据啊,这有 intager, real stream, top 这个 top hander 等等这些,那么对这些以外呢,咱们还有什么?这个 匹配于 capp 里面,咱们有什么像 htop 的 啊,这个内好不好?那么这个其实包含了这个 h 啊,顶端下的所有的这个控制数据啊,就在咱们这,好吧,这就是来啊,对于我们这个 h object, htop 的, 它们二者的,在我们这个 capp hulk 年后 c l 编程中的它的一个呢,呃,对应的这个关系好不好?具体这里面他们我们怎么去?呃使用它啊,那么在后面视频呢,我们会持续给大家讲到, 好,呃,大家好,我是瑞祥老师,那这个视频呢,我们就来给大家详细的去解读一下 h object 类型啊。 呃, h object 呢,它是一个表示图标对象的一个类啊,这个其实特指的是在 c 下五中呢,这个 h object 啊,那么在 hokken 中,它这个图标对象的对应层次的结构建模的话呢,大概是这样的一个建模形式啊,你看这里面呢,它会就是这个 object 下面会 对应的关系呢在,嗯,在这个是在 hokken 里面对应关系呢,在 c 下五里面其实对应的叫就是这个 h object, 那么在 hook 中的话呢,这个 emoji 啊,呃,它是等于什么?等于我们这个像素加上这个定义域啊?包括还有这个图像主要的这个部分其实就是通道啊,例如像我们单通道的灰度值图像,包括了三通道的这个彩色值图像,指就是我们这个 emoji 啊, 然后呢这个 uh resin 啊,这个什么它是定义为叫一组像素啊,或者说叫区的像素,这里其实一般是不需要连接的。这个指定这个像素啊,这意味着,其实呢,呃,这意味着啊,即便任何的像素级呢,也可以作为单个的区域来进行处理。 好吧?比如说来我们去给咱们兄弟们去来个例子啊,来我这里以后呢,来咱们直接去给咱们兄弟们去打开一个呢,呃,我这里给他准备的有这个案例,好吧?啊,应该就是这个啊, 这咱们去把它打开,打开以后呢,在这啊,比如说你看这是我们在前面一组视频里面的话,其实我曾经给咱们兄弟们去呃,讲过这一块的这个 实战的啊,那比如说这里面咱们是读取一个图像,然后这是二者经什么?来,我们先从这里开始吧,先读取了这是一个彩色值的图像,然后这个彩色值图像的话呢,它可以对其进行一个,是吧?进行一个灰度化处理嘛,然后紧接着往后这会咱们再对其做一个什么二值化的处理。 好,那么兄弟们啊,那么此时此刻这会的话来我们做了二值化的处理之后啊,呃,其实呢,我们这里所说的啊,呃,这会二值化处理以后呢,这会咱们 嗯指定啊,再往后这里还有区域砍断啊,那么这个区相当于什么意思?就比如说啊,他把当成里面这个,呃,挡风玻璃的这一块,他把当成一个区啊,这叫独立一块区。 然后呢这里还有什么车牌号的这个是一个区啊,这里面这个孔洞这边这个又把它当成个区的,哎,下面这个呢又把它当成个区域,你看光包括呢中间这里有一个角落的这一块,他要把它当成一个独立区域, 这就指的什么?这其实也是一部分的这个像素啊,这个其实也是一部分的像素,然后区域和区域之间呢相互是独立的关系,这是我们去做了这个区域砍断以后啊,然后呢我们可以去呢了解了,就是这就是我们什么叫区域啊啊?然后呢还有一个叫 x、 l、 d 啊啊?这个叫 extended 啊, nine discovery, 它是一连串的坐标的串列, 相邻的两个点之间呢,可以以直接连线啊,就是可以以呢直线连接啊,包括所有基于轮廓和多边形的这个数据啊,图像均用的像素点保存的这个像素点啊,呃,图像均以像素点进行保存,那么像素点呢?是不连啊?是整形不连续的。 那么大概的这个过程的话呢,就这里啊,它需要去呢读取个图像,然后呢后面呢?这时来下面呢?这时可以获取了什么?这时可以获取到它的这个呃坐标,呃,这可以获取到它的这个 x l、 d 啊, 他这个的话我这里也给咱们兄弟们去准备的,有相关的这样一个案例啊,在这啊这个啊,这不是这个解法啊,我看这个的话是不是这个是好,这里呢?那咱们去重新去打开一个话,这是咱们重新去创建一个啊,来新建一个程序。 呃,那这个程序的话,这会呢我们直接把这个代码呢去给咱们兄弟们去呢。呃,放过去啊,放咱们这啊,放咱们这来啊,然后呢这会呢咱们去把它保存一下吧,嗯,也保存到我们这里吧,这里面咱们保存一个呢这个 x and d, 好 吧,就直接保存这样啊啊,然后这会咱们先保存一下,然后这会咱们再执行。我之所以保存是因为我这里要提取这个图像的时候,我必须要把它把指定到和那个图像相同文件夹,它才读得到。这是二,那个,呃,灰化处理,然后二等化处理, 紧接着往后后面这也其实就是获取到它的这个 x and d 啊,这指的主要是什么呢?主要是指的是啊,呃,相当来说是我们这个轮廓线, 他说基于呢,呃,直线连接的啊,包含我们所有的那个轮廓的一个多边形的一个数据啊,其实指的就是什么?就是轮廓线,你看在这个里面我们执行出来结果的话呢?在这里他执行出来这个结果是不是个轮廓线的 啊?哎,不是这个啊,应该是在跟这个是吧?这是不是轮廓线?这其实呢我们可以看到啊,这其实描述是不是还是一个呢?这个汽车 是吧?只不过这里呢他体现出来这其实是主要是一个轮廓方向的啊,主要是个轮廓,好吧,这个轮廓呢特指的是什么?特指的是区域的轮廓啊。其实来我们可以看这个图啊,我们去前后比较啊,比如说来我们这里截个图放这啊,然后的话呢,咱们放到这来的话,你会发现啊,你看这里的话呢,这块 挡风玻璃的这个位置啊,这个其实是一个蓝色的,这个他是只体现出来轮廓线,然后呢还有就是这边你看大灯的右边大灯这个位置, 这里和上面这里是不是连在一起的,这是不是轮廓线?然后呢右边这里话这是什么?这是我这个这个颜色,这个这是不是也是轮廓线的?包括这里面还有很多非常小的区域,他是不是都把轮廓给我画出来了? 这就是呢,我们所说的叫的 x, l, d 啊,这就是 x, l, d, 好 吧,那么在 h object 里面它将是包含这三种类型的啊,那么在 c 项目里面的话呢, h object 里面其实呢它是包含了有 h e, m, h e, r, e n 和 h 的 x l, d 啊 啊,这个的话后面会给咱们兄弟们在代码中呢给大家去进行演示啊啊,这个视频呢,我们就先说到这 好,呃,大家好,我是瑞强老师啊,那么这个视频呢,我们来开始给大家讲一讲这个 htop 原组类型啊,呃,涉及到它呢,在 htop 中的一个占据的一个这个地位啊, 首先来理解一下啊,这个 htop 呢,它这个原组呢,其实怎么去理解呢?呃,它类似于一个数组,但是又不同于数组啊, 呃,怎么说呢?呃,其实我们使用这个东西的话呢,相当于说把多种税类型呢,像 float 啊, double 啊, int 啊,那个,呃布尔啊, spring 啊等等啊,这类型呢,相当于做了个打包,然后呢统一呢进行一个使用啊, 那么在我们呃呃这里呢,它有一个非常呃重要的特点,这个大家需要记住啊,就是长度可变,数据类型可变啊,像我们啊在如果说啊做 c x 五编程啊,或者说 java 编程,其实我们给 给定某一个变量,指定一个什么属性,它是不是都是要确定你这个是是吧?你是 excel 类型,你就是表示呢只能表示是吧?整数数字的啊, 你是啊那个 flow 类型,哎,你可以表示呢那个数字是吧?那么这个其实表示我明确了你是什么类型以后呢,它就是不变的。而这个啊,这个 top 这个圆组啊,它的特点就是呢长度可变,数据类型可变,也就是它既可以用来存储呢, 那什么数字的啊,也可以用来存储的那个字串的啊,其实都可以啊,都可以好不好?那么这里的话呢,给咱们兄弟们去来了这样一个案例啊,我们直接通过这个案例呢,给咱们兄弟们去 来看一看啊,他的一个效果啊,好。现在的话呢,这会呢我们直接去把这个代码呢直接放过来啊,然后呢放在我们这里呢,咱们去运行走你这,咱们去把它给它 放过来,然后呢这会呢我们去直接去运行一下啊,直执行这个代码啊,左边这个图像呢,咱们不要啊,首先这会的话啊,这会咱们需要去把那个变量窗口给打开啊,变量窗口在这,好吧,这是我们这个变量窗口啊,然后呢我们去把它放到左边啊,放在咱们这 好, ok, 然后呢这会儿呢我们开始去执行啊,当我去店按 f 六的时候它第一个执行,这会儿的话,其实呢我这里其实在指定这个变量的时候,我是不是可以给它来这样一串数字的?你看一二三四五七八九十,其实就是我这个 top 一 嘛,就是这个,是吧? 然后呢,这会其实我除了通过这种啊冒号等于负二的方式呢,给他赋值以外了,我还可以呢去通过这种缩影的方式去修改他的值,比如说我去的指定缩影为一的缩影为一呢,他的缩影下标是从零开始,那么缩影为一的其实是这个二啊,他这会把这二变成零了,这会的话你会发现我这个二这里是不是变成零了? 之前这里咱们在初使画的时候,其实呢他这里是吧?这里是二啊,这是二啊。那当我们执行这个时候,这会这个二是不是变成这里面第二个下标为一的,这个值是不是变成零呢? 然后的话呢,在这里面我们还可以去批量去改原啊,那个原组元素,这个值就是我把一三五的值改成 xd, 一三五啊,比如这里下标为一的啊,这不是里面零啊,然后为三的啊,这里就是这个是为三的啊,五的,是吗?哎,就这个为六的,这个他下标为五啊, 哎,也就是这里零四六会改成什么? xd 啊?我们这执行完毕后,你看这里呢,这个这个是不改了,这个是不改了,这个是不改了。全部改成什么?哎,这块其实它是一个字母串类型, 这就是我们刚刚给咱们兄弟们介绍的,呃,这个 top 的 话,其实,呃他可以去支持所有 machine, 我 们去啊,呃,一开始你看我们写的这是数字,这会你看我改着改着,我把这里面只改成字母块了,他仍然没有任何问题。 好,然后呢?这会你看,我再把二四六啊,二啊,零一二,然后呢?呃,三四,然后六,我把改成什么?改成这个小数啊,这会你又发现了, a 也可以,你看这是,呃,下标为几啊?下标为二的啊,这是下标为四的,这是下标为六的啊,全部改成什么?改成这个, 嗯,享受啊,然后这会咱们又去呢,哎,咱们还可以这样啊,我们再去把这个值来改成什么?比如这种咱们指定 top 二的话呢,呃,咱们可以等于什么呢?就是这里啊,批量把批量给 top 的 那个数值的去进行赋值啊,其值呢?为零到一百的连续值。 你看这里,其实我们这个操作的话,像是说是我们在一开始声明这个 top 的 变量的时候呢,这会就直接给他来个数字,这个数字其实是零到一百的啊,但是这个其实太长了,我们这会的话呢,看的话看不了那么多啊,在这啊,就在这里面这个值啊,这是零到一百的这个值。 然后的话,这咱们也可以去怎么做?批量给 top 数组的去赋值,然后呢其值为零到一百,然后不长值为二啊,指定就什么意思啊?我零到一百之间的话,他连续这个值之间是二的啊,他从零开始,第二个就是什么零二四六八十啊,这样每次加二的这种方式, 然后还有对两个数组进行这个合并操作啊,比如我把这个 top 一 和 top 二进行合并, 后面就得到这个 top 四啊,那么 top 一 top 二这两个合并的话呢?来 top 一 是哪一个?是这个啊? top 二是这个是吧?那咱们这两个进行一个合并以后呢,你会发现在这里其实呢,你看这个一,其实呃,我这里有个一,我 top 二是不是也有个一呢?但这里合并以后呢,它这个只只保留一个啊,就是求并集嘛, 然后呢对数字元素的进行替换,这其实也可以啊,我们指定 top 五,然后呢我们去直接把那个呃七八啊,这是对数字元素进行替换啊,我们可以呢去调用这个函数,然后我使用 top 五呢,把这里面的啊这个值呢,可以把那个替换掉啊,这样替换的话,咱们是把前面这里的这部分咱们给它替换掉了, 把这里指定的啊,这个 top 尾的这这里面这个指定的这个下边尾尾一的这个啊,是不是可以把切换掉了,然后紧接着往后呢,这里面向数字中插入值,这会咱们也可以啊,然后这个咱们可以 insert 啊去插入啊,这也是没有任何问题。好吧, 那么也就说啊,这个其实这个哎 top 的 这个呃类型的话呢,其实它相当于说在我们 hok 中啊,一种应用类型的一个呢,这个通用类啊,当然这些的话呢,其实我们要结合着 capp 来共同给咱们兄弟们讲解的啊啊,这个视频呢,我们先给咱们兄弟们说到这啊, 好呃,大家好,我是瑞夏老师,那么在前面呢给大家讲了关于 h object 类型的一个解读啊,比如说它呢,主要包含的有 imagine 类型啊, reason 还有 x l d 啊, 那么这些的话,其实在呃呃我们啊 hokken 中啊,我们给咱们孙正义去写的有这个案例啊, 那么这些呢类型那么匹配于 c 项目中,那么它又是去什么样类型呢?这里呢,其实我们可以呢把这些案例啊给大家,咱们去探讨一下啊,我们来把这个代码呢,咱们去附着我们这来啊,然后呢我们直接可以导出成我们相关的那个。 嗯,这个 c 项目代码啊,咱们这里做个导出,导出好了以后呢,那么这会呢,我们可以呢去把它打开啊,在这儿呢,在这里的话,这里咱们通过 vs 去把它打开啊, 嗯,在这里话,然后呢在这会的话呢,我也去给咱们兄弟们去打开一个呢,我这里提前准备好的有这样的一个。嗯,解决方案啊,在这里啊,就这个话, 这是跑克宁和赛尔编程的一个基础资料库啊,那么这会的话来我们来给咱们兄弟们去看一下啊,那么对于呢,呃,这会我们重点去探讨的是它的一些数据的类型。呃,现在的话呢,我这会打开了这个代码的话呢,其实你会发现啊, 呃,它的核心代码,其实这呢就是在这里的这一部分啊,我们可以把这个代码的话直接去把它放这呢,呃,比如说我这里其实写的有这样的一个啊,这是啊,这是当前这样的一个。好了,这里面咱们重新创建一个项目啊,咱们来一个控制台应用程序吧,好吧啊,新建一个控制台应用程序, 控制台应用啊,然后在这啊,然后呢咱们这里呢? hock 呢? app select, 然后呢这个 program 啊放这啊,然后呢咱们去来 放这啊,然后呢把这个 demo 呢直接去复制到我们这来话,但是这会复制过来它要能够支持的话,当然我们还是需要去干什么事呢?呃,这个咱们其实是需要去引入一下这个程序集的啊,其实也就是我们这个程序集啊,我们可以直接去把这个程序集呢去把它复制那呢复制到咱们这来啊, 啊,这样的话他才能够识别我们的代码,然后这会我们把那个啊当前这个解决方呢,咱们直接去给他翻译一下啊,此时此刻啊,这会咱们去翻译完成以后呢,嗯,他说我当前这里并不具备这个,这时是需要引入一下这个命名空间啊。 啊?我看一下我这个程序集啊,这个程序集其实并没有去成功的引入过来,看到没有?在这里啊,这种情况的话我们需要等着,你看这里它其实有个警告,看到这里其实有个警告啊,就这句话咱们需要去呢重新去生成一下啊, 就这个程序集引入的不兑换,那么它肯定是识别不了的啊,这里面其实上面这个程序集这个是可以的啊,那咱们这样吧,咱们去把它给先移除,然后呢咱们直接去 look 它安装好吧, 但是咱们这进行 logo 的 程序包呢,咱们去进行一个安装啊,这安装的话咱们把这个 名字呢去把它给复制过来啊,然后呢从这里去做一个搜索,就这个啊搜索出来,那咱们这里选择的版本呢?是什么版本呢?这个版本呢是二十四点零五的这个版本啊,目前呢这里其实我们已经是 浏览一下管理 logo 的 程序包,好,这儿咱们先去把它卸载掉,卸载掉以后,这会儿呢,咱们再重新地去安装二十四点零五的啊,先把它做个卸载, 卸载之后呢,它说不存在这个包啊,然后呢这会儿我们需要重新去对其安装,或者说我们直接去于呢这个解决方案啊,去把它做一个安装管理 logo 的 程序包, 我们要支持这个 hokken 的 那个程序包,然后呢我们才能够去呢,呃,进行使用啊,二十四点零五啊,就在咱们这里啊, 好,现在的话呢,这里是二十四点零五的,就是我们当前这个啊。啊,这个其实已经安装了是吧?啊?已安装以后呢,这会儿话来我来看一下啊,咱们重新打开我们这个截图端 放咱们下面这啊,嗯,那我下面这里控制台的话呢,并没有安装啊,它这也是基于 windows 的。 嗯, 好,那么这会的话呢,可能这个程序其实并不适用于我们这个控制台应用程序啊,那么咱们去怎么玩呢?咱们去把它 form 一 里面放,这的话,就这会的话,咱们直接去把它放到这个空间里面去啊,那也说这会的话呢,我们直接去把这个代码呢直接复制到我们这个 呃函数里面来,好吧,放在咱们这啊,把我们导出的这个代码呢,咱们直接复制到咱们这去,好吧,因为这个它是依赖于呢这个 windows 的 啊,嗯,它是依赖于呢这个呃 windows 的 那个这个窗体程序的啊, 好,现在好了,这会呢我们直接去把它给运行起来啊,走你啊,我们来看一下啊,或者说来在这里的话,我们也大概可以给咱们兄弟去表示一下啊, 比如说啊,你看在这里的话呢,我们指定的,呃,这是读取一个图像,读取图像的,这里面咱们其实呢,这其实只能读取,这其实它是读取是个什么类型?它其实是应该是一个的那个 h image 类型, 它这里其实呢有这里啊 read image, 这里其实它需要去接收的,其实尽管这里面所有接收都是需要一个的那个呃 h object 的 啊,但是实际上这里的话呢,其实它指定是个图像啊, 包括了还有后面那点,它有灰度图的,这些其实全部是不是都是给我们呃通过这个 h object 来进行声明的?还有这里咱们去作为砍断区域的,其实我们都是使用 object 来进行声明, 而这里面咱们这个啊 h o 杠 m h 这个表示其实就是图像,这个指定是我们那个灰度图,这个是我们指定的区域啊,这个是指定的是我们砍断区域嘛。 那么也说在这里面的话呢,其实在 c 下头对应的那个,其实它都可以使用 h opt 接口来进行一个来声明,只不过在这里声明的时候,其实呢我们可以去嗯调整啊,就这里面,比如说呢,我们这里来一个还有叫 h image 啊, 这个其实呢我们也可以去呢直接声明这样一个 image 啊,这个 image 其实它和 h opt 之间的关系的话是什么关系呢?我们可以 f 十二啊,点过去看, 你看它是继承者,是继承者 h o p g 的 啊,那么也就是说我们这里使用 h o p g 的 声明的话呢,其实我们对于图像啊,包括这里面二等化处理的,还有我们那个区域的啊,这其实都可以使用 h o p g 来进行声明,所以呢还有像 h 的 这个 region 啊,就这个啊,啊,比如这里面咱们其实它也是什么,它也是继承自我们这个 h o p g 的 啊, h o 这个呢,其实他是,呃,继承,他是我们这些类的,这个是吧,统一的都是一个复联啊,所以我们使用复联来进行声明的话,这是没有任何问题的,好吧,这可以啊,此外的话,还有呢,像后面这还有对于什么呢?呃,像我们要处理的那个 啊, connect 啊,这里其实呢我们有什么叫 h x l d, 好 吧,这个是不是也是可以的 x l g, 然后呢咱们去溜一个这样的啊?这个是也是 ok, 没问题的,这指的是我们轮廓图,轮廓图,其实这个很显然我们去在 h o p g 里面,它是不是也是继承它的? 就是反正咱们这里所有这三个类型的话都是继承它啊,这其实就是我们相当说前面这里的话呢,我们所说的这个 h o p 下面这都是什么?里面就是零 x x l d 的, 这个其实在私项目里面的话,其实它是一种这样的继承的关系,好吧,它是这样的继承的关系啊,好,这个视频呢,我们给咱们兄弟们就说到这 好,呃,大家好,我是小老师,那么这个视频呢,我们再来给大家去介绍一下关于呢 top 这个 top 啊,它在 嗯 hulk 中啊,呈现出来这个效果,那么在对应的私项目里面它又是呢?呃,如何去进行呢?这个使用的啊,然后这个咱们还是相同玩法,我们直接去把这一个代码呢,去把它给复制到我们现有的这个 hulk 的 这个软件里面来啊,然后这个运行的话,这是没有任何问题的。 然后呢,我们这会就去进行导出呗,我们把它导出成我们对应的那个 c 下面程序啊,直接放这放到咱们这啊,之前导出过啊,他提示我是不是切换,那咱们就切换啊。好,这会咱们就 把导出的这个文件呢给咱们兄弟们去打开啊,其实就是我这个文件啊,我这会儿还是使用 vs 二零二呢,咱们去把它打开,打开的话,这其实就是咱们啊兄弟们可以看到的它的核心代码。其实这儿呢在这个 x 里面嘛,啊,现在的话呢,那么这个代码的话,我们直接去把它给呢复制一下啊,或者呢放到咱们这个, 呃,来,这里有一个绝版啊,然后这是矢图,然后绝版啊,把它给打开 啊,应该在这边啊,这是解法。然后呢咱们放到这个 form 里面的,这里有一个 top 那 些的一个解读啊,放这儿话啊,这会儿的话,咱们直接去把它给它,嗯,扶着过来放咱们这里啊, 啊,这会分数过来以后了,来,兄弟们你们可以看一下啊。呃,我们现在的话呢,嗯,这里来啊,我们这里是不是全部都是使用 h object 来进行声明的,我们可以直接去溜这样一个对象啊,然后呢也可以直接去通过逗号的方式通过它声明,然后是溜这个对象的,基本上这些咱们都是溜出来这个对象啊, 当然其实这个对象的操作的话呢,不仅限于此,我可以给,比如这里面咱们给出这里有啊 h 啊,这个 top 六的,是吧?好了,这边咱们来一个 h v 的 top 七,好吧?比如这个 h v 的 这个 top 七啊, h 有 top 七,然后的话呢,这里面咱们来一个 h 呢 t u p l e 放这啊,然后的话呢,这会呢咱们去啊,可以去来,我在六的时候,其实我们可以直接去给他呢来个值啊,我来个一二三四,行不行?没问题吧?然后呢我这里去啊,来一个啊,我直接去让他等于这个一二三四,这样行不行? 或这里面咱们等于这个这个来个等于八号啊,这边咱们直接搞这样做串,这样是不是也可以的?哎,比如说你看我来一个呢这个 return 的 啊,这样也可以。 然后呢,比如说你看在我们这里去写的时候,我们还可以怎么呢?比如这个咱们叫九啊,这也咱们给出的这一个九啊,我们可以呢给一个数字,这个其实也没问题, 甚至说你看我给一个呢,一二三点四四,这个也没问题,就我给数字给字母圈啊,包括六对象地址都可以。同样的,那么这个咱们六出来以后呢,我们可以通过了这个数组的下标的方式啊,通过这个所有的方式进行访问,修改它的值,没有任何问题。 然后的话呢,这里面咱们也可以去呢,呃,通过的指定的这个啊修,批量修改我们原始的中值,哎,这不也是 ok, 没问题的。然后呢,我们批量给这个 top 数值的赋值啊,去值呢?为零到一百的连续值,这是不也没问题的? 这里面咱们直接去调用这个函数啊,这里它有对应的这个函数 top 呢,这有一个 top 的 这个根 skin 的 这个函数。 然后呢往后呢,这里面还有啊,去指定它的布长值为二的啊,这是免费的。之前这里布长值为一啊,其实这样的函数是同一个, 然后呢咱们两个数字进行合并也没有任何问题。这里面其实我们调用了一个 h d 的 这个,呃,调了这个通过这个 h d 啊,是不是来进行处理呢?我要先创建一个,然后呢咱们指定它呢?呃,这是咱们直接合并,是吧?其实我这个 h d d h 了,这好像并没有去起到什么效,并没有什么作用啊, 然后呢后面的咱们可以去呢指定这是不是缩影去设置值,然后呢这里面咱们去进行的这个值的替换啊,没有问题啊,然后呢这里面咱们指定的话呢,向这里面指定去添加值,这是都没问题的。 好,那么在这里的话,其实啊,呃,我们最重要啊,这里面还有一点,就是我们对于我们创建出来这个靠谱类型的这个变量啊,我们依次往上找 啊,你会发现啊,它是不是继承自一个叫啊,实现自一个 i dispose abber 这样一个接口的? 好,然后除了这个以外啊,我们其实还要去来检查一下啊,在前面我们刚才讲的 h object 啊,我们看这个 image, 它是不是实现自 h object 的 这个接口的, 然后,呃,实现那个继承子 i 扩展的这个内啊,然后再继续往上啊,它找到这里有一个 i 扩展 base 啊,在这儿,然后这里它是不是也是来那个 i disable 地实现那个接口了?好,那么兄弟们啊,在我们啊这个使用的内里面,它只要实现那个 i disable 地这个接口的,那么但务必要记住啊, 要么说我们在使用这个变量的时候呢,我们去通过这个 using 方式啊,通过这个 using 方式咱们把它包裹起来,就是把这个东西呢,我们可以直接去把它放到我们这里面去,它保证只在这个作用域里面有效 这种方式,那么还有一种方式就是什么在我们用完了这个东西以后呢,我们一定要记得最后这里面他一定要对起做个回收啊, daisypos 需要把那个做个回收,因为这种其实表示他是属于资源化的,如果我不去回收的话,他就会一直占据了这个内存空间,这个是对我们这个程序来说是一种他会形成性能的影响。 好吧,这是来啊,我们在前面给咱们兄弟弄了的啊,那么这会儿的话呢,我们提到这个 top 以后呢,其实这个 top 也是同样的啊,它也是实现子了一个接口叫 i dispos 这个接口的啊,所以说我们这个 top, 我 们这个内存啊定义的变量我们全部用完以后呢,我们后面也是需要去给它进行这样一个回收的, 好吧,好,这是来我们所说到的这个 h top 啊,在 cm 里面它的一个呈现 好,呃,大家好,我是瑞祥老师啊,我们这个视频继续来给大家讲解关于的这个 hokken 啊算子在 c r 五中的这个应用啊, 首先呢我们啊要说的常用的算子呢这个应用啊,我们,呃其实呢在前面已经给咱们兄弟们介绍了有关算子以及呢呃算子去, 嗯,处理图像啊等等这些过程。那么今天呢,这里面咱们还是把我们呃之前其实讲过的这个关于的算子在处理图像的这个 blog 的 这个分析流程啊,我们给咱们兄弟俩再来去过一遍啊, 我这里呢其实写好了有相关的各种我们常用的算子啊,这个的话来我们直接去呢把那给扶着过来。然后呢我们去单步执行啊,通过单步执行的方式呢,让咱们兄弟们可以去呢,呃,看到他的这个效果,好吧。呃,这里面咱们看一下啊,这是 tens, 这儿咱们把它给打开一下啊,好,这儿咱们打开以后呢,嗯,那咱们不是这个啊,这会儿的话呢,我们去重新写一个吧,放在咱们这儿 啊,这些的话呢,我前面打开这些的我们都不要了啊,这都搜删掉。然后呢我们重新去打开一个 hack 的 这个软件,然后呢把我们所需要的这个代码呢去给它复制过来啊,放呢放在咱们这儿。 好,然后呢咱们这会儿去把它给扶着过来啊,放咱们这里啊,然后呢这会儿我们也可以去直接保存一下,我们保存哪呢?保存到这个 imagine block 直接放到咱们这里是吧?啊,这会儿的话呢,这个去重新打开啊,在这里啊, 好。然后的话呢在这里其实呢我们是处理一个汽车图像的啊内容啊,首先呢这会咱们直接从这里开始,首先我们就加载了这样一个图像啊,这个算子调呢,是啊,我们读取一个图像的算子啊,这是来我们指定的,这是输入参数,这是我们指定的, 呃,和我当前这个文件所在同一个文件夹里面,咱们加的是这个汽车啊,是这个话。哎,那么这里的话,陈老师呢,如果说我想加载这个粒子七可不可以?当然也可以啊,没问题啊,放咱们这里啊,然后这会的话呢,咱们去执行这个粒子七是不是也可以去加载出来的啊?在这里是不是? 好,那这会的话来我们还是加载这个汽车啊,然后呢咱们去 f 六啊,咱们去加载这个汽车,然后紧接着往后呢,这会咱们第二个,这叫什么?这是我们图像处理中的话,一个非常常见的 一个算子,叫二值化的处理啊,这其实是为了去减少啊,图像中处理的这个对战机造成这个压力啊。那么对于灰度化处理呢,其实他是像把那个三通道图像变成什么,变成了这个单通道的这个图像, 这会就只有黑白灰啊这样的这个颜色的图像。然后紧接着往后呢,这是二指画,二指画呢,其实相当这个图像中的话,他可以去体现出这个图像的这个大概的一个形状,但是这里面他会分为两块区域啊, 然后呢他进一步的去做这个砍断啊,区域的砍断,这会咱们会画成呢,每一个每一块的小块啊,这是来指定区域砍断啊, 紧接着往后,这会咱们就根据区的特征来做区的提取,比如这个其实是我们提取的是什么?这个我们提取的其实是这个车牌的位置啊,这是根据它的面积 area 来进行提取的, 然后紧接着往后呢这个图像,这里其实还有很多的毛刺啊啊,这个不平整,包括还有孔洞啊这些呢,我们可以对起来做一个啊填充啊,把这边那个孔洞去个填充,然后紧接着往后呢后面这个其实去毛刺的啊,这会去了以后呢这里,其实这里啊这个其实去的不是特别的 完整啊,这咱们搞个四环啊,是不是搞个五吧,搞个八啊,这会这个去毛刺才能把它去干净,好吧,然后呢紧接着往后这会呢咱们就可以根据它呢去做那个 啊深沉这个旋转矩形啊,去进行呢,就是根据我们现有的这个 目标图像,然后呢生成我们的矩形,然后呢把这块内容呢咱们可以把它给抠出来,然后紧接着往后呢这款咱们可以去获取他的中心坐标啊,包括呢这里面咱们去呃做这个矩形,做这个放射的变换矩阵, 然后呢根据变换矩阵呢去获取到我们这个图像做旋转啊,然后呢旋转之后呢咱们再去分配这里面数据呢,把这个结果呢是不是这个图像是不可以抠出来的, 那么这些其实用到的啊,这个算子的话呢,其实相对来说都是比较常用的这个相关的算子啊, 那么至于这个算子,其实在前面我们给咱们兄弟们去介绍过啊,专门讲算子这一块,基本上这些算子的都给咱们兄弟们去详细的有专单独介绍,那么这个其实是综合起来的一个应用啊。 好,那么这个的话呢,我们关于这一块呢,我们给大家去来这个案例的去演示一下啊,那么咱们需要关注就是这些算子,我们如何去把它能够呢?写在 ccm 的 蛋白里面,那么在 ccm 的 蛋白里面它又是怎么去呢?呃,这个调用这个算子啊,它具体有哪些渠道啊?那这个我们后面再说 好。呃,大家好,我是肖老师啊,那么在上个视频呢,我们给大家去介绍了关于呢, 呃,这个 hock 的 算子啊,呃,他的一个常用算子的一些介绍啊,我们这里是通过一个案例的方式啊,呃,通过算子去做了一个 blog 分 析,然后呢对于这个图像呢,写了这样的一波的这个处理的这个过程啊, 那么这个其实呢,当前我们这边实现的功能呢?呃,在前面。呃呃,我录制的其实有一个完整的项目中呢,是其实就是把这里面这整个的 block 分 析的那个项目呢,这个 hulk 的 算子执行所做的各种操作呢,匹配 excel 代码呢,其实是这样的一个 桌面程序啊,这个桌面程序呢,我们这里就直接提供给提供给咱们兄弟们啊,这会的话呢,我去把它运行起来,比如说在 hokken 算子中啊,其实我们在前面所说的这个常用算子这个案例啊,我们呈现在 c 项目里面的话呢,我们是通过的这个 桌面程序呢,可以给咱们兄弟把功能给它实现啊,当然这里面的核心代码的实现,其实呢它还是要基于呢我们这个算子来进行转换的啊,待会给他说到这个转换过程啊, 首先来演示一下啊。呃,在好这里面咱们这样啊,我们先去把这个算子来去演示,然后咱们再演示这个啊,前后咱们做一个对比,然后呢去看看这个效果哈。 啊,这里咱们去把我当前这个对的这个算子去把它给打开啊,在这里啊萝卜分析的算子在这呢,就是 啊,就这个哈,就当前这个算子啊,呃,当前这个啊, hokken 的, 呃里面对于一个图像处理的这个全过程啊。 啊?这会咱们去执行啊,这是从我们加载一个彩图,再到这个呃灰度处处理,然后再到二质化处理啊,再做区域的砍断,然后呢做中间这个区域的一个呢?呃处理,然后呢咱们再去做形态学的这个处理啊,做那个去毛刺,去孔洞啊。 呃,然后呢咱们再去呢,呃得到创建这个旋转矩形,然后呢去进行了这个呃中心坐标的一个位置确定,然后呢咱们去求这个角度啊,创建了我们这个放射变换矩阵,然后呢去创建了我们放射变换的一个锁定图像啊,这会的话呢咱们可以把这个图像呢是不是可以获取到的?可以获得这个车牌,是吧? 啊?那么这时呢我们可以的去处理这个全过程啊,呃,这是我们通过这里面常用算子去对一个图像中的这个内容的一个提取啊, 那么这会的话呢对应这一块他在 c 下中呈现的话呢,来我们这里呈现出来效果呢,是目前这个效果,我是通过各个按钮的绑定的去实现单独的这里面每个功能啊。首先我们去加载一个图像 啊,这个图像的话呢,咱们还是去使用 d 盘里面的这一个图像在这里啊,嗯,在这,然后呢这个图像的话就是这个图像啊,就这个咱们直接加载这个汽车,好吧?首先采集图像的话,请着往后咱们去灰度化处理, 这是灰化处理啊,然后呢咱们再去二值化处理啊,二值化处理这里面咱们给个二值化呢,这个咱们要看他给出的值啊,二值化处理的时候,这个咱们其实在处理的时候这里面有零到八十,是吧?好了,咱们这里也给个零到八十啊,最小值是零啊,最大值的其实为八十啊,为八十,好吧?放这啊 啊,然后这会的话这是二十号处理呢啊,然后今天往后呢,这会咱们再对去做一个区域的砍断啊,区域砍断以后,这会咱们再做特征筛选,那么这个特征筛选的时候,这里面咱们筛选给出的值多少?这是根据区域的三十五万到三十六万嘛?啊?那这会咱们也是通过它来进行一个筛选啊,最小值呢是三十五万, 然后这是最小值,最小值这里面咱们是三十五万 啊,然后呢这会的话呢,这会咱们是不是可以把这个内容可以把它抠出来,然后这会的话呢,这是我们进行的什么进行的那个 特征的筛选,然后形态学处理啊,咱们是把处理成去毛刺、填孔洞,然后放射变换,这会咱们可以把这个图像中这个内容呢,是不是可以给它定位出来,然后接着往后咱们这会其实最后呢咱们可以继续目标啊,这目标是不是当前我们这个这个车牌号我们是提取出来的。 好,那么你说现在啊,我们给咱们兄弟们秀的这一个在 ccm 中啊,这个点是 ccm 文档中呈现的这个效果,其实跟我们在 呃这个 hokken 里面啊,我们执行这段 hokken 的 算子去执行的这个动作的,是不是功能是完全一模一样的 啊?这里其实呢,嗯,我们在 ccm 中实现的这一波功能的话呢,其实它就是来源于啊这里面所使用的一些的。 呃,相关的一些调用一些处理的话,其实就是来源于我们这个 hulk 啊,这一堆处理过程呢,呃,然后把划分成每一步啊,然后呢把它给导出成我们对应的那个 c 项目代码,然后放在这里咱们就进行执行的哇, 好了,现在的话呢,咱们就去给咱们兄弟们去导出一下啊,这会呢咱们导出一个工程啊,这里的话我们选择了这里面是 c e n c 加 v b 啊,还有什么啊? c 下铺的啊,当然我们这是匹配 c 下铺的,然后呢我们去做一个导出,导出之后的话呢,这里咱们再放在导出哪呢?导出在我们桌面上啊,这个桌面上已经存在,它会做一个切换 啊,桌面上存在以后呢,这会的话呢,咱们去放手放在咱们这啊,然后呢咱们这会去把它给呢 啊,放在咱们这里啊,放在咱们这啊,然后呢这就是它的中间的这个核心代码的部分啊, action 这里就是它核心代码部分,这其实呢从这里加载一个图像开始啊,这是加载一个汽车图像,然后呢这是二指法处理,然后呢做区域的砍断。 好在这堆图像里面,其实呢我们在处理的过程中话,其实我们可以去把它给它,把这个, 嗯,这样啊,把这这里呢咱们再给它加一个呢,这样啊,咱们在当前这里面咱们再去给它加一个空间吧。 啊,这里面咱们这里再给它加个空间啊,就这个空间的话咱们叫什么?这叫全过程哈,这里面咱们是算子啊,算子这个啊,这是算子导出的这个处理全过程 啊,然后的话呢,这里咱们指定了一个 b t n 啊, b t n o 啊,然后的话这会呢咱们去双击一下啊,呃,当然这个的话呢,其实不应该是这个啊, 啊,这句话呢,咱们去去掉不要。好,然后呢咱们从这个后面咱们再去双击一下啊。好,现在的话这会咱们直接去把这个代码呢给他扶着过来啊,放咱们这,好吧, 好,那么这个过程其实就是呢,我们刚刚啊这里面这个代码,这是我们刚刚通过了。呃, hokken 里面咱们这一堆的算子处理这个图像的所有代码呢,咱们导出 excel 代码。这这啊,咱们这会去呢把断点打起来,然后呢我们去运行一下啊,来,走,你运起来, 然后点击这个算子导出啊,在这里话这是定定了这样一堆变量,然后呢是吧?听着,咱们按 f 十啊,从这开始,是吧?然后在这里的话,你看啊,他这里去做了这堆处理以后呢,从这里这是加载了一个图像吗? 啊?这个图像不论是,你看这,其实这就是我们加的这块这个图像,是因为这个图像他找不到啊,这个其实这里报错了,是因为这个图像他找不到啊,这个其实不怪他啊,因为这个指定这个路径呢,他确实没有这个图像, 那么也就是说在这个里面,其实我们除了加载图像后面那还有什么二质化处理啊,什么这个灰度处理啊,还有像这里通过特征提取 这些,其实你会发现啊,它这里是不是都是直接去调用了来自于 h object 啊?来来自于 h operator 啊,这个 set 的 这个这个类的,而且这里面调的是不是都是它全部的静态函数? 这是不是全部调了它计算函数的这些都是来自哪来自我们这个啊? h operator set 的 这个类的,这个反变异嘛,都在咱们这里是不是, 那么这些的话呢?其实啊,呃,是我们在 c 下铺联合 hulk 进行编程的时候呢,呃,我们匹配的这其实是一种方式,这种方式大家可以理解成这种叫什么叫面向过程式编程,也就是说啊,它这也是直接调用类中的这个函数,然后呢直接去实现就行了, 其实后面的话还会有面向对象的方式啊。呃,除了面向对象的方式,咱们还有一种方式啊,当然我们这里呢会把面向对象的方式也会给咱们兄弟去覆盖到, 那么总之呢,这里面啊,我们想给咱们兄弟们去呃,传啊,这个说到的一个就是呢,我们其实前后啊,就是我们 hock 里面代码和我们 c f 代码这里是有关联的, 只不过我们经常用的啊,呃,咱们是吧最常用的搞法呢,就是直接去把它导出成我们那个 c f 大 码,而这种导出的方式,这种其实是基于什么?这其实是基于呢面向过程的方式呢,去实现了我们这个功能, 好吧,那么在 hock 里面这各种算子其实导出来以后呢,在这里其实对应的其实就是匹配了各种呢这个静态函数,好吧,那么也就是之前这里是调用算子,然后现在的话呢,在 c m 里面才变成了调用函数了,其实就是,这就是什么?这就是呢我们在 c m 中对于我们前面这一个案例的 啊,这个相关功能的一些呢这个实现。好吧,好,这个视频呢,我们就说到这, 好,呃,大家好,我是肖老师,那么咱们这个视频呢,就来给大家去说一说关于呢 hock 联合 seven 编程的其实多种方式啊,在前面呢,我们其实都是基于呢这个呃 h operator set 来进行实现的,这种形式呢,大家可以理解成它是一种呢这个面向过程式编程啊,大家可以理解成呢这是一种呢 啊,这种啊,其实它是一种的这个,呃 pop 啊, pop 啊,要面向过程式过程式的这一个编程,是吧?其实也就是啊,呃,它内部实现的其实都是去调用的,呃,都是去调这个静态函数来进行实现,是吧? 比如说我们前面呢,这里面给咱们兄弟们去演示的啊,这些功能里面的话呢,这些是不是都是全部是基于的这个,呃,调用这个静态函数来进行实现的啊?基本基本上都是啊,都是这里面咱们都是调用的这个静态函数,是吧?都是基于呢,这里面你看 h operator set 来进行实现,是吧?都是基于它来进行实现的,是吧? 好,那么除了这种方式以外的话呢,其实还有一种方式,就是基于什么 o p 面向对象的方式呢来进行实现的是吧?好,那么除了这种方式就是基于什么 o p 面向对象的方式呢来进行实现, 那么这二者的区别的话呢?其实啊就是,呃,一个是调用进来函数,一个是进行对象来进行调用的内对象的这个实例函数,那么在这里话来我们可以直接去打开啊,我们,嗯这个 hok 的 软件,然后呢我们可以查看一下它的帮助文档,这个的话呢,其实,呃,在这里啊,也给咱们兄弟们说一下,其实这里面是很多文档的话,我们都可以从这边去查找一下啊,比如说来我们在经常会用到的一个叫灰度化处理啊,叫 rgb 一,然后呢 two three 啊,我们搜索一下啊啊,比如说这个其实它是一个算子啊,对应的在我们啊给出的那个私下部编程里面的话呢,那么这个其实调用的话,它这里提供的是不是有一个, 是不是有这样一个静态函数的 state 啊?这个 h operator set 的 这个 r g b e two three 啊,这个函数是吧?啊,这个函数这其实是一个静态函数嘛,它这里其实是可以输啊,指定了我们这个输出参数和这个输入参数,然后呢去进行了灰度化的处理, 那么除了这种签名,除了这种方式呢,咱们下面这种就是什么?你看这是指定呢,它是由谁呢?由,哎,我们这个 h e m g 哎,又说具体的这个 e m g 对 象来进行打点进行调用啊,而不是直接去呢,哎,通过我这种就不是静态函数啊,而是我们先创建 h e m g 它的实力,然后呢再去调用它这个绘图画处理啊,然后呢再去实现它的绘图画,好吧? 啊,那么关,这里面是给咱们兄弟举的这个例子啊,当然除了这个呃对应的这个二灰化处理外,还有什么二质化的那些其实他都有这个区分啊。好,那么接下来这会的话呢,咱们就来给咱们说一说啊,关于呢面向过程式编程他的一些实现啊,我们直接给咱们兄弟去上一个案例吧,好不好? 这儿咱们直接去给咱们兄弟们上个案例啊。呃,那这会儿的话来,我们去在我们这个项目里面的话呢,创建一个全新的项目出来,好吧?呃,这个项目的话,来咱们去添加一下。呃,这里还是来一个 windows 窗体啊,然后呢这里面咱们搞一个 how can x, 然后 o o p 啊,放这儿话,然后呢我们这就基于多纳八的啊,当前这一个环境,好吧,好,翻过来以后呢,这会儿的话,来啊,兄弟们,我们再来给呃 设计器发生错误了,下面就这个啊 啊,这样的话,咱们给出的这是 form 一 啊,在这儿话啊,这可能它加载问题啊。首先来我们给这个桌面的话,咱们去给它呢来一个设置一个标题啊,比如这是基于呢,什么基于呢?这个,嗯,拎 a 格兰 hock 联合啊, hock 联合 c 下铺编程,然后呢这是 o p 面向对象啊,或者咱们叫以面向 对象的这个方式来进行实现啊,放到咱们这儿啊,好,然后的话呢,那么对于呢,呃在这个里面来啊,我们首先我们这里面其实实现的话,咱们还是通过一个实战方式来给咱们兄弟群落地啊。 首先呢我们这里需要使用到这个 hokken 的 这个显示,我们这个空间啊,那使用这个空间的话,其实我们是需要给当前这个项目呢,去,咱们可以把它设为启动项,然后呢把这个项目前面我们这几个项目呢,其实引入有这个程序级啊,我们需要把这个程序级呢把它给引入过来啊,放到咱们这是吧?啊?放到咱们这里啊, 好,然后呢这里啊是否空对象?这个咱们直接来一个 dissn 一 本儿话,哎,这里咱们可以把它调整一下啊,好,然后的话呢,这会儿呢我们再来去打开我们这个放密啊,这会儿的话呢,我们就可以去使用它这里面这个工具箱里面这个空间, 这空间的话呢,其实呢,呃,对于前面这两个空间啊, h smart window control 和 h window control 啊,这两个我们都可以用啊,下面这个是用于 wpf 的。 呃,那么在这个里面的话,来,我们直接去给咱们兄弟用一个上面这个话,因为在前面啊,我们基本上主要用的就是下面这个 h window control 啊,那这会的话呢,咱们换一个话,我把这个, 呃空间的话,咱们去换一个啊,我们搞一个新的空间,搞这个话把那个放到这啊,啊,把那个放到咱们这里啊, 好,然后的话呢,那么这会呢,对于我们右边这里的这一部分,咱们去来一个的 group box 啊,这 group box 呢?或者这个咱们 group box 咱们要不要其实无所谓啊,这个咱们不要管,然后这会的话呢,咱们去给他呢,呃,来一波儿的这个 啊,来玩一个处理话,然后呢这里面咱们这个名字的话呢,其实我们最好把它处理一下吧,叫闷,然后呢 phone 啊,也叫闷 phone 啊,就这样话,这名字咱们改的话其实没有任何问题啊,首先这里面咱们去给他来一个 button 公共空间啊,来个 bug 的 话,这个 bug 的 话这边咱们直接去。呃,来个 bug, 然后呢这会咱们去复制几个吧,来四个,好吧。啊?首先这个 bug 的 话,咱们给他来设置一个呢,嗯,这是来我们去加载头像,好吧? 啊?那这是呢,我们去加载我们这个图像的啊,加载图像的话,这边咱们给它取个名字啊,这叫 b t l o e d, 然后编辑啊,然后呢第二个按钮的话呢叫灰度化处理 啊,第二个这个灰度化处理的话呢,这个咱们去先去给它设置一下它的标题, 这是呢叫灰度化,灰度化处理啊,在这儿画,然后这灰度处理呢,这里面咱们给出的这个内幕的话呢,是 买一个 b t n 啊。第三个这里是什么?这里是绘制 r y 啊,这是绘制 r y。 咱们去往后面这吧, 要绘制 r o i。 然后呢这个名字的话咱们来一个 b t n d r r o i。 放咱们这里,然后后面这里咱们来一个,呃,这是咱们去锁定 r o i 图像区域吧, 锁定 r o i 啊,这个图像的区域啊,放咱们这儿啊,好,然后呢咱们这会儿的话给它也来一个,这里也是这个名字吧, 这名字的话咱们叫 b t n 呢锁定区啊,就这个吧。 b t n 啊,咱们这样这边加个 g 啊,写成这样。 呃,那么这会呢来对于左边这个空键的话,我们也去给它设这个名字啊,这里面咱们就 h w m c 啊,写成这样啊,好,现在好呢,咱们这会去对加载图像的哎, 咱们先去给它保存一下啊,关闭所有文档,然后重新打开啊, 编一下, 他说我必须要去起用, 可以生成截屏,然后呢他说我这里呢找不到这个函数啊,这函数是因为我刚刚我们的操作手势有问题啊啊,这会咱们再次去编辑 啊,这儿编辑好呢,咱们这会再次的去把它给打开啊,就是我们这个 inform 就 在这啊啊,这会的话呢,首先我们去加载图像双击一下啊,在这啊啊,这是来我们去加载图像 啊,就咱这里了啊,如果要加载图像的话,这个其实呢对于我们前面来说的话,咱们如果要加载图像的话,咱们是怎么做? 是不是还是去调用的这个 h operator set, 然后呢点一个啊,比如我要去加载一个图像的话呢啊,它应该是读取某一个现有的图像,是吧?这个其实对应的函数的话呢,我们在前面我们是也可以找得到的 啊,在这个里面咱们其实是不是可以找到了?在这啊不是这个啊,这个是下面这个是吧?就是这里面啊,这是我们采集图像,那咱们这个处理的话,咱们这个是不是可以通过?呃哦,这里这个处理,这里我还是浏览一个页面,是吧? 这也是浏览页面啊,其实我们除了这样以外的话呢,还可以去导出一个啊,导出啊, 那么这里的话,其实啊这是啊这这其实是把调用规范处理啊。好了,这里其实跟我们前面是一样的啊,那咱们这个的话其实可以直接去引用一下话,这个咱们可以去引用一下啊,首先这是我们加载图像的啊,这个咱们直接去把它复制过来放在咱们这啊,这个咱们就省事了啊。 然后紧接着往后呢,这会呢咱们在下面这个 o p 的 这里这个位置的话呢,咱们去加载图像这儿咱们换过来,首先呢来一个 d o o 格, 但是这个的话咱们是需要去把它给定义到前面这个变量的啊,就是这句话,哎,就是就是它啊,就是这个啊,然后呢这里还有一个 hwmc 啊,这个是指定的我们这个控件嘛 啊?这个其实就是指定的我们这个控件啊。啊?这是什么意思?这就是来我们指定一个对话框,然后呢我去打开对话框,选择某一个图像,然后呢把它图像展示到我们这个空间里面去,是吧?好,现在的话呢这会呢我们直接把它设为启动项,然后呢我们就直接运行起来,我们试一下啊, 尝试一下啊,首先我这会加载图像,它会弹出这样一个框,然后呢我们去选择一下,呃,比如说呢我们选择地盘下面这里的机器视,呃,视觉 啊,这个图库啊,测试图像话啊,我选择一个离子漆,是吧?啊?在这个里面的话呢,其实你们发现的话呢,这个他是不是可以去?我们是不是可以这样进行拖动的?这里之所以能够拖动啊,是因为我们在使用呢这一个图像的时候呢 啊,这里面啊咱们在使用呢,我们当前的这里的这个图像的时候,其实我们给他设置了一个什么,这叫自动的实现等米效果吗? 是吧?啊?自动去实现那个等比效果啊,那你说这样的话呢,其实在我们这个图形里面的话呢,我们加载图像的时候呢,是吧?你这个图像大小其实他会自动的可以进行这样一个等比,是吧?他不会说只占一边啊,或者这边咱们来一个比较小的这个图像 这块其实你看两边这个宽度其实是没有那么宽的,但是他也可以把全屏粘这里啊,这这里就会空白一部分是不是? 好,那么在这个里面这其实是前面加载图像,这个跟我们前面是差不多的啊,这里面的话呢,你看我那加载图像的时候,这里其实呢我是通过什么通过呢?这里只是把这个图像呢交给我这个控件去展示是不是?这个其实呢没有什么特别的啊,这个没什么特别的啊, 好,那么在这里的话呢,这是如果说啊,我们去使用呢,就是,呃,在这里呢我们去使用呢前面我们用过的这一个控件 啊,我们这里呢去使用呢,如果说我们用的当前这里这个空间啊,这空间是我们这里勾选的这个 h smart 这个空间,那么这样的话其实它是没问题的啊。好,如果说那么这一这里面呢是让咱们把那空间给它换一下呢 啊,如果说这会来兄弟们啊,我们再去把这个空间呢,我来换一下啊,换成什么呢?我去换成呢,呃,这里呢有一个 h window ctrl 啊,这个话我把这个空间呢,咱们还换这个空间啊 啊,这会儿的话,因为我讲到这了以后,我们这里直接把它给呢,也给兄弟们,咱们去演示一下啊。好,这个空间的话,咱们去来个什么呢?比如这个啊,其实我们也给它取一个叫 h w m c 管,咱们也写这样啊,然后这会儿我们直接运行,现在把空间给替换掉了啊 啊,当我们这会儿在运行时候,你看我这会儿在加载图像时,你看这会儿,其实,呃,这会儿我在加载图像的时候,这个它怎么也能够自动识别啊?我们使用了这个空间,目前这里的这个空间的话,其实是哪个空间? 这里这个空间的话它的类型是 h window ctrl 啊,应该是这个啊啊,这会儿我们去把编辑一下吧,整个清理一下,截屏 下面这个项目已除掉啊,暂时不要啊,这个咱们暂时用不上, 然后呢咱们去把这个项目呢去重新编一下。 好,那么也是此时此刻呢,这会我们换了这个控件以后,其实这个函数它是不存在的啊,好,这里给咱们兄弟们来区分一下,其实我就想告诉咱们兄弟这个事, 就是对于呢我们这个显示的空间来说的话呢,我们如果说使用前面这个 h smart 文档 ctrl 的 话,其实它可以我们提供的有一个函数啊,叫什么呢?叫这个空间的函数叫 set to fair image part 啊,这个函数,这个函数它可以让我们这个空间放到这以后呢,我这个随着我可以让这个图像进行了自动的等比缩放, 如果说你这个图像太宽了,那么这里的上下会空白出来,它要把整个图像给我们呈现出来, 而我们此时此刻如果说呢是让咱们去使用呢这个空间啊,下面这个 h 往那 ctrl 这个空间的话,那这里就对不起啊,它其实就不具备这个不具备这个函数的功能。所以说此时此刻呢,兄弟们,我们再次运行的时候啊,你们会发现一件事, 你看啊,我们这会在加载图像的时候呢,我可能加载这个图片,这个图片的话,你看这里其实它没有等比缩放,它只是把我图片中的一部分给我们加载出来,是吧?比如说这里咱们加载这个苹果 啊,这呢咱们再加载这个,这个这个当前这个图片这里其实他并没有等于说他没有去把这个图片进行缩放,因为这个图片太大了,可能这个区域呢他根本展示不了, 所以说面对这种情况的话呢,我们其实是需要怎么去处理一下呢?那咱们怎么处理一下呢?这里呢?来我们给咱们兄弟们去来一个呢, 呃,来一个啊,这个图像处理的一个函数封装。好吧,既然讲到这啊,这会的话,我就来给咱们兄弟们去来一个这里啊,就是来我们去来个注示啊,这是咱们基于呢,呃,基于什么呢?继续当前这一个空间, 这个也就说我们在这个空间里面 h 温度 h 温度 ctrl 啊,基于呢这个 h 温度 ctrl 啊这个空间。呃,然后呢,这个无法 啊,自动拉伸图像啊,自动拉伸的这个展示图像的问题啊,啊,由此呢我们做的这个啊,咱们去封装的这个拉伸图像的函数啊,封装拉伸我们图像的这个 函数,好吧,好了,这会的话这个函数里面咱们去怎么做呢?咱们直接去写一个 private 啊, void 啊, 然后这也咱们第一 mag 啊, mag, 哇,在这儿啊,然后这里面咱们来一个 h mag, 这里面 i m a g e, 然后呢 h window, h window 放这儿话,然后呢咱们这会去回车一下放到咱们这儿来 啊,对于这个函数而言的话呢,这其实呢,我们这里需要有两个参数啊,第一个的指令呢,来我们这里把注视了给咱们兄弟们去描述一下啊,第一个这个其实指的是什么啊?这是用做什么?来这里啊?用做了我们图像的这个,呃,拉伸平铺的方式啊,拉伸平铺的处理 啊,那么第一个函数其实就是我们要处理的这个图像对象, 好,那么第二个参数这个是什么?这是来我们要去呢,呃,要展示的这个控件对象,其实也就是来我们这里指定这个控件是哪?控件其实就是我们这里刚刚给咱们兄弟们去使用的这里这一款 h window ctrl 这个控件就是它。 好完了以后呢,那么这会呢,我们先去呢,呃,进来之后呢,这会咱们要判断一下啊,如果说呢,你这个,呃,这个其实我们一般把它指定为 mag 啊,如果说这个,呃, 如果说我们前面这个展示图像的这个这个对象啊,它它如果为空,如果它等于等于呢?空啊,判断我这个图像是否为空啊?如果我这里为空呢?这个咱们怎么做呢? message box 点呢?秀 啊,来一个啊,比如这里面咱们搞一个未加载图像啊,所以呢咱们无法显示,好吧?呃,然后呢,咱们就直接去 return 啊,这个 return 回去的话 啊,因为我们这里其实是对什么?是对于我们他在让他把这个图像展示到我们空间去了以后呢,然后我们把这个图像呢做等比缩放的这个处理,所以我们首先要保证这个图像的话,他这个空间里面他展示有这个图像,我才去做等比缩放啊,否则的话我是不做的,好吧,这是来我们第一步啊,去处理一下, 好,然后的话呢,紧接往后这会的话呢,咱们就去来获取我们啊,这个,呃传入图像的一个分辨率,好吧? 啊?这一步的话咱们可以获取呢我们传入图像的这个分辨率啊。啊,这里面咱们去可以怎么做呢?啊?这里面咱们去 h image 点一个呢, 那么当然这个获取分数线的话呢,其实我们有多种方式来获取啊,比如说来,我们用我们比较之前一直给咱们兄弟介绍的,咱们这里可以来一个获取我这个图像的一个大小吗?在这里是吧? 然后呢我这里可以去把那个 h o e m g 的 传进去,然后这里它可以有两个呢,呃,参数是吧?啊?就是这里咱们指定的它的宽度啊,以及它的这个高度啊, h e i g h t。 啊,咱们可以通过这种方式来进行获取啊,这是没问题的啊,我们可以获取到它的高度和这个宽度。 好,当然除了这个以外呢,咱们还可以怎么做?哎,这里咱们还可以去呢,来一个 h o 杠 image, 然后底儿呢?直接通过它,它这里也有一个函数叫 get image 的 size, 好 吧,好,那么这个函数其实我们也可以放哪呢?放到咱们这个说明文档里面,咱们去搜索一把,试试看好不好?放这儿啊,咱们搜索一下啊, 这里其实我们一搜索你会明显发现这里其实你看它是不是提供了静态函数,这是我们所说的前面通过 h operator set 来进行处理的这个函数。 好,那下面这个这是什么?这是实例函数吗?这是实例函数。好了,既然如此的话呢,正好呢啊,我们这里其实呢,呃,这两种呢,咱们都给大家去写出来啊,那第二种话,这个咱们其实需要写入的话呢,这里咱们需要来一个 啊 out 的 话,那么在这里我们需要使用的这个,呃,具体宽度、长度这些其实属于的,是吧?数据变量, 而在这个里面啊,数据边上的话的使用话,它是需要使用,是吧?我,我能够实现来一个 float 吗?能搞这个吗?哎,就这里面,你看啊,它是通过这个 h top 啊,这里面咱们去 with 啊,放这,好吧, w i d t h 啊,然后这里咱们再来一个,呃, out 了,然后这里面咱们来一个看一下啊,放这话这样其实也可以得到我们这个结果啊,这也是完全可以得到我们这个结果的,好吧,放咱们这里啊, 好,然后这会儿的话,来啊,我们去获取到这个图像的宽度和这个高度。以后呢,这会儿的话呢,咱们就可以去设置什么呢?设置我们这个窗口的显示部分 啊,那这会儿这个窗口显示部分呢?比如这边咱们就是 hwm c, 然后点一个呢?呃, hulk window, 然后点一个呢? set part 啊啊,这什么意思呢啊?这个函数其实是就是用作设置呢,我们窗口的这个显示部分啊,啊,这会儿的话,咱们给它来第一个参数啊,来,咱们直接去,这,其实它是个数字啊,我们给个负一啊,这道错啊,那这边咱们其实这里要处理的话,其实就是, 呃,都是这种 htop 的 这个项啊,然后的话呢,紧接着往后咱们继续呢来利用一个 htop 啊 啊,放咱们这里,然后呢这会儿的话呢,咱们去把这个 h e i g h t 啊,咱们去整它高度的去减个 e, 然后呢这个 with, 咱们也去减个 e 啊,放这儿吧。 好,那么这会咱们经过了这边处理以后呢,我们再去怎么玩呢?咱们再去显示我们这个图像啊,再去选这个图像啊,让咱们 hwm c 点一个呢? open window, 然后点一个呢 this object, 然后呢把这个图像呢把它给显示过来啊,放这儿,好,这个是来用做我们显示图像的。 好,那么这会儿的话来, ok 啊,兄弟们,那咱们这会儿再写上图像上,这会儿我们就不再是直接调用这个函数了啊,那么下面这个函数呢,这会儿我们需要去把它给调整一下,这会儿呢,咱们把这个给注上,然后呢换成什么呢?换成我们上面这个 this 点儿呢?嗯, 这个函数 dec 面积, 然后呢把这个 h o image 啊,把它传进去,然后呢这里咱们是 z s 点 h w m c 点的 hulk window 啊,把它传进来, ok, 这是没问题的。 好,那么现在的话,来啊,刚刚我们给咱们兄弟们演示,就是我们目前用的这一款这个控件的话呢,它是没有办法去自动缩放我们这个图像的,现在的话呢,这会呢,哎,它是不是可以把这个图像进行一个,这其实是对其做了个拉伸啊? 这是把那个图像其实做了拉伸,这里其实把那个图像是不是相当说他这里这个形状其实是进行,这是形状是变化了的啊,这个这个这个苹果其实他是没有这么长的,是吧?他是个圆的啊,这里是把我们这个图像呢,现在做了一次拉伸。 好,当然在这个里面的话,其实啊我们显示这个效果的话呢,呃,其实我们想告诉咱们兄弟们,其实这里面啊,我们调用函数的时候,我们获取你看对于图像的分辨率, 我们其实都有两种方式啊,我们可以通过这种是面向过程方式直接调用进来函数,也可以直接通过来我们现有这个对象去调用他的什么实力函数,那么实力函数其实就是基于对象来进行调用的啊,那么基于对象来进行调用,这其实就是面向对象的方法。 好,那么这一会的话呢啊,我们加载图像这个的话,基本上给咱们兄弟去完成。好吧,但是我们这里也体现了两种呢实现的风格啊,这是我们在 c 项目联合合并编程的时候呢,他的一个最基本的啊,这个使用方式啊,给咱们兄弟们去演示了。我们如果说啊,对于哪一块有疑惑的,我们可以直接从这里呢去区分一下,看一下这个签名即可。 好,呃,那么这是来我们给咱们兄弟们讲的关于呢?呃,前面这里啊,他的一个去加载图像的这个啊,紧接着往后呢是灰度化的处理。

马上都二零二六年了,谁还在手动改文件?用 ansible 一 句话就能搞定。很多运维学 ansible 只停留在部署服务, 却不知道它的文本修改模块才是提效神器。我这里给大家介绍三个常用的模块与功能定位。第一个 myfile, 它的主要用途是用于文本搜索匹配进行替换插入或者删除。操作类型可以插入,也可以替换或者删除。 经典的使用场景,修改配置文件中单行键值或者注置开关。但是它也有限制,那就是不适合复杂多行或者结构化文本的批量重写。 如果是多次变更,需要对多处修改进行多次的调整,结构化数据上分层更适合特定模块。然后第二个就是 rips, 它的用途基于正则表达,对文件中匹配的内容进行替换,适合复杂模式的文本替换。正则支持 可以指定匹配,并用指定的内容替换多行处理匹配正则可以匹配多行模块,但需要谨慎 编写模式。经典的场景是替换模板或者批量修改复杂文件块,当然它也有限制,就是需要精确的正则,勿匹配的风险比较高,可以用备份,以防意外替换。第三个就是 broken file, 主要是用于像文本中插入、替换或删除 包含开始杠结束标识的整块文本块,便于管理整段配置,它可以自动添加标记,以便后续识别和更新。托管一段配置片段或者脚本块,你比如 在配置文件中插入一段服务配置,适合多次密等插入和更新。当然它的使用也有限制, 影像用于多块级操作,不适用于单行精确替换,然后我们来看一下它们的使用场景和如何去选择。如果你是单行与简单建值的修改,更推荐于 line five, 然后这里是视力。 在用 nine five 修改的时候,需要注意的是,确保精确,避免误替换同类行备份是最好的策略。如果你处理的是复杂模式或多处替换,更推荐的模块是 ripeness, 因为它更适合处理正则替换与多处模式变更。在使用这个模块的时候,需要注意 这是正则,并使用备份或在临时环境验证。如果你是插入或者管理诊断配置,我们就更推荐 broken five, 因为它更适合插入可识别的配置块 并保持密等。需要注意的是, mark 可以 自定义,以避免与其他管理工具冲突。最后教你一个实战的小技巧,就是不管在改单条或者多条文本的时候都要自动备份,万一写错了,直接用备份文件可以恢复。另外,测试的时候 一定要先干跑一遍,看会不会改错,确保无误后再正式执行。运维的核心是提效,而不是埋头苦干。我整理了详细的排查技巧和学习资料,需要的同学留运维我分享给你。

如何一键删除 word 文档中的所有空行?现在我们经常用 ai 的 生成文件,复制过来的时候会伴随着大量的空行,对于这种情况,我们一次一次地去删除比较困难,因此今天跟大家分享如何批量地删除 word 文档里面的空行。 首先按住 ctrl 加 a 全选文章,点击开始下面的查找替换。点击替换,在查找内容中输入特殊格式里面的标记段落,因为它是有分行,所以是点击两次标记段落,替换为特殊格式里面的标记段落,点击一次, 再点击全部替换。这里发现了有二十二个空行,是我们一键替换,也就是把空行删掉,确定确定,这样子就可以看到空行全部没有了,同时这里还发现了很多星星,慢慢删除也不要浪费时间,因此我们就把这个星星替换为空白, 替换为空白,这样就是可以把全部的星星给删掉,一共有四十四个星星,全部删除确定完成。

当你新接手的一个图纸打开时,出现了这道选择题,你会怎么做?如果你选择的是为每个 s h x 文件指定替换文件,那么恭喜你,你跟百分之九十的人一样答错了, 因为这样操作文字不一定会显示,而且以后每次打开这个文件都需要重新选择一遍。你正确的操作应该是选择忽略缺少的 s h x 文件,并继续文件。打开后点击格式文字样式,在弹出的对话框的样式中逐个选择。 当发现右边字体栏中出现黄色感叹号,这就说明这个文字样式的字体是缺失的。如果你手头上没有这些文件,那么你就用 txt 字体替换它。 大字体这边则选择 h g、 t、 x t 字体替换,这样修改后再保存,以后每次打开就不用再做选择题了。最后再告诉你,这里还有一个只有 c、 a、 d 老手才知道的小技巧,就是选择字体的时候千万不要选宋体! 千万不要选宋体!千万不要选宋体!重要的事情要说三遍,因为宋体的文字太多,会让你图纸变得很卡,而且它比一般的字体都大,这会让你的文字排版变得混乱,你学废了吗?

哈喽大家好,我是金庸堂的小谭啊,有粉丝问这个特斯拉的这个快捷键啊怎么设置?那小谭初期教程啊,教一下大家,咱们现在特斯拉的快捷键是 z l 加 z l 加下,那咱们现在啊给它改成 z l 加下,咱们切换到电脑界面啊,选这个 config, 然后这个还有个 config, 把这 config 给它复制到桌面啊,然后咱们打开这个 config 往下拉,就这边有一个快捷键 啊,就是具体哪些快捷键可以使用啊?我放在这个屏幕下方啊,大家可以就是根据自己的喜好进行更换,然后比如咱们想改成 z l 加下,那就把这个删掉,然后点保存, 然后复制,咱们切换回之前的文件夹,然后选粘贴, 然后替换目标中的文件,然后这个设置文件就替换好了啊,然后咱们进入这个大一层的界面, 呃,这时候呢,咱们在这个咱们的随时界面啊,点这快捷键 z l 加下啊,这时候呢,咱们特斯拉的这个菜单啊就出来了。 以上的就是更改这个特斯拉快捷键的方法啊,有需求的小伙伴可以按照这个方法进行修改,那这期就这样,咱们下期见。