粉丝1.7万获赞7.5万

哈喽,大家好,我是兔子,如果你需要做图像处理,那么你一定离不开一个库,就是 opencv。 今天我就来详细的教一下大家怎么去装基于 passion 的 opencv 的环境,今天会讲这些东西。 首先 open cv 是什么呢? open cv 它不是某一种编程语言,它只是一系列的酷, 他是一系列别人写好的库,然后封装成了各种编程语言可以调用的接口,你去调用这些接口就可以去使去实现相应的功能。他有四加加接口, python 接口,加外接口等等。 我今天教大家安装的是基于 python 的 open c v, 如果你想要看基于私家家的 open c v 的话,你可以在评论区给我留言,如果 人数较多的话,我考虑出一期 c 加加的 open cv 的教安装教程好, 好了,那我们我们来开始安装吧。装 open cv 之前首先要装什么呢?首先我们刚才讲了, opencv 是一系列的库,我们通过拍摄去调用它,所以我们首先要装拍摄的环境,包括什么呢?拍,就包括拍唱和呢?靠,那 拍 charm 是你写代码的地方,是你的编辑器。呃,那 com 大就是你的拍摄环境加一系列的包,建议你装拍 charm 加上的 com 大。 这个我有出过一个教程,你可以去点击我那个安装教程,里面讲解的非常详细,教你一步一步安装好这两。安装好这两个环境之后,我们就可以来装奔 cv 了。首先打开我们的 cmd 命令窗口,或者是嗯呐,康大的这个命令 窗口。三亩地的命令窗口是什么呢?键盘的温加尔会出现左边这个界面,然后三亩地回车,这个就是命令,这个就三亩地命令窗口,那么呢康大的命令窗口是什么呢?你在这里搜索输入,额,南康大,看到这里就出现一个这个,额,南康大这个, 这个就是可以看到他们这个上面是不同的,就是一个是 sam d 的,一个是,呃,康大的这两个都是输入这个命令的, 我们今天就用三亩地来来演示吧,如果你的三亩地不行,你可以尝试一下用这个呢。康大的这个咱们先看一下你你的拍摄环境,首先 要看你的拍子环境变量有没有设置好,你在 cmd 这里输入拍子回车,可以看到这里有拍子的版本,就说明 你你这个拍摄环境是设置好了的,这里这个警告是没有关系的,出现你的拍摄版本就可以试一下你这个拍摄是不是可以用的。一加二 回车,可以看到打印了一个一加二,等于三,打印了一个三,我们的拍摄环境是可以的。如果你这个拍摄环境不可以的话,你要先设置环境变亮在这里 我的电脑属性,然后找到这个高级系统设置,再点看,点到这个高级点这个环境变量, 点击这个系统变量,看到这系统变量里的 pass, 点击编辑,然后可以看,看到看到这几个没?如果你,那 你看一下有没有你的,嗯,那康大的环境在不在这个环境变量里,如果不在环境变量里就找到你,嗯,那康大安装的那个位置,嗯,那康大,嗯,那康大的下面的,下面的这些目录你都给他复制过来,就在这里 新建,然后再复制过来,新建,复制过来,把这几个目录全部都复制过来,然后点击确定,确定就确定就可以了。你可以电脑重启一下, 然后你再在这里打 python, 应该就有了。如果你电脑装了多个 python 的环境, 你想要换这个默认的拍摄环境,也是修改这个,修改刚才的这个环境变量就可以了,再在这里 ctrl z 退出刚才的编辑环境。 编程环境之后,我们要来开始安装了,安装命令是这个,给大家放大一下,这这两行都可以,这个是 pepping store, 这个 open c v 杠 pattern 就可以了,但是如果你这么装的话,他可能会比较慢, 你给他加上杠 r, 然后后面是这个清华镜像的这个网址,就是使用清华镜像版的话,他会快很多,所以我们直接用第二条命令复制一下,然后 复制到这边回撤,等待他安装完成,他没有报错,而且显示已经成功的安装。我们来看一下有没有安装完成。输入一下 pass, 进入 pass 的环境, 然后我们试试 input c v 二,看会不会报错。看没有报错,下面一个问题是很多人想 知道我安装完的 opencv 的库,它的路径是在哪里?找到你安装完的康纳的那个路径,然后你找到这个立步,立步之后有一个撒的 packages, 这个 砸到 packages, 然后在这里你看到这个 c v 二就是你装的 open c v, 我们在代码里,在拍唱里写代码,看看到底对不对。 关于拍 charm 的使用,我也有一个详细的教程去讲它的使用,不了解拍 charm 的使用方法呢,去看我那个视频就可以了,那我们今天就讲问 c v 安装,所以代码就代码 v, c v 的用法就不详细跟大家讲了。 这单代码的功能就是读取一个这个 cat 点 j j p g cat 点 j p g 是这个 cat 点 j p g 是 这个图片是我。首先你要你,你要把你的图片放到这个和你这个代码同一个目录下, 然后你运行这个代码,如果你你放在别的目录下,这里要要改成要改路径,如果你放到和他同一个目录下,这里不用改路径,直接写这个图片的名称就可以了。我们来运行一下右键 run, 运行一下,可以看到这个小猫图片就显示出来了, 说明我们的 open cv 已经完成了。然后再回到我们的代码,如果你之前有写过代码,你就会发现,你就会发现问题,问题是这里这个, 你把鼠标放这边,它显示是报错的,而且仅 o c v 点,你发现它不 不能自动补全了,他理论上来讲就是他自带的阿木瑞子是他自带的那个函数,他应该是可以自动补全的,但是他不行了。然后我们用 pront, 你看他是可以自动补全的, 它下面会显示出这些是可以自动补全的。现在就说明虽然可以用了,但还是有点小问题,这个问题会非常影响我们写代码的体验,所以我们要把这个问题解决。这个问题是高版本的 opencv, 有的四点五之类的, 或者再往前的是没有这个问题的,我们安装的比较新,他有这个问题,我尝试了很多种方法去解决,最后发现最有效,最简单的方法就是这个, 回到我们刚才讲的那个 c v 二的这个,我们说 open c v 是装在这里的,找到这个 c v 二,点 p y d, 把这个文件复制一下, ctrl c 复制,然后返回到上一层,到这个 set packages, 然后粘贴,这里面就有这个 c v r 点 p y d 了,把拍唱关关掉, 然后再重新打开。我们看到这里报错没有了,我们来看一下自动补全行不行吧? c v 看到它这个自动补全可以了,它这边就会提示出它这些自带的一些一些函数了。 到这我们 open c v 就已经安装完成,可以使用了。好啦, open c v 的安装到这里就结束啦,相信你也安装成功了吧,我还在考虑要不要出 open c v 的教 学,看大家有没有这个需求,如果需要的人比较多的话,我就考虑出一系列简单的 oppocv 使用,带领大家简单的入门。好了,今天的视频到这里就结束了,我们下次再见。


欢迎大家学习有 buff 的 open cv 小白入门速成系列视频教程学习本教程需要拍成三的基本语言基础, 如果没有拍摄语言基础的话,请先看巴夫老师的拍摄零基础入门系列教程,在上手进行 ok cv 练习前,需要先安装配置好开发环境。在本教程中,操作系统使用温时 拍摄版本,选择三点八及以上开发工具使用拍恰姆社区版, oppo c v 使用当前的最新版本四点五点五作为演示环境。接下来教大家如何安装 opin c v。 在拍恰姆底部的选项中点击终端,英文叫太密脑,在光标闪烁处输入 p i p install open cv gun pattern, 按回车就会自动开始安装,有时候会报错就多执行 几遍,如果还是不行就换成国内的原机型安装。安装完成后还是在终端里出入 pip 内斯特安,回车后如果显示了纳木派和 open cv 干 pass 这两个库,就说明安装完成了。恭喜你能够完成了最艰巨的一步,下个视频我们就开始携带吗?


a i 大 模型教程第五天, open cv 读取图片哈喽大家好呀,我是浅。今天咱们从零开始,一步搞定 python, 你 的计算机视觉神器 open cv, 它可是我们做图片处理、计算机视觉相关操作的好帮手,就算你刚接触编程也能听懂。首先得要先把这个工具装到我们的电脑里面,再拍唱,打开终端 open cv 杠 python 回车之后,等它跑完,显示 successful, 就 代表安装好了,这是我们后面所有操作的基础。 装完库以后就可以写代码了,咱们首先来看第一行 import cv 二这行代码的意思就是把刚装好的 open cv 这个库引入到我们的代码里,就像我们需要用到一个工具,得要先把它从工具箱里拿出来一样, 只有引入之后才能调用它里面的各种功能。接下来看 a m 等于 c v 二点 a m ray 的 这一行代码。 c v 二点 a m ray 的 就是 open c v 里专门用来读取图片的函数。括号里的参数就是我们的图片路径。这里写的 images 下划线 flore 点 gpg, 意思就是当前文件夹下的 image 文件夹里有一张叫 flore 点 g b g 的 图片,大家要根据自己的图片实际位置来修改这个路径。这一步就是把咱们电脑里的图片读进了程序, 存到了变量 am 里面。然后是 c v 二点 am show 这一行代码。 am show 就是 image show 的 缩写,作用是把咱们刚读进来的这个图片显示在一个窗口里。 第一个参数 test 是 这个窗口的名字,大家可以随意改成自己喜欢的名字。第二个参数 im 就是 我们刚才存图片数据的变量,用来告诉函数要显示的是这一张图, 光显示图片还不行,咱们得让窗口停住,不然运行代码后,窗口会一闪而过,根本看不清图片。所 所以就有了 c v 二点 with k 这一行代码。 with k 就是 让程序等待键盘输入的函数,括号里的零代表的是无限等待,直到你按下键盘上的任意键,窗口才会关闭, 那如果写成一千,那就是等待一千毫秒,也就是一秒后自动关闭。这个小细节能帮我们好好看清图片,那如果说大家不想直接看图片,而是想查看图片在程序里的数据效果,就可以利用 print 语句来打印查看。 print i m 逗号 i m 点 shift 就是 用来查看图片数据的。 i m 本身是一个多维数组,里面存储着图片的像素信息,而 i m 点 shift 就是 用来返回图片的尺寸,比如幺四二四八百三。 咱们一起来拆解一下这三个数字。第一个数字幺四二四代表图片的高度,也就是有幺四二四行像素,也就是有八百列的像素。 最后一个数字三是什么意思呢?它其实就是我们常说的通道数。在 open cv 里, i m 点 shift 返回的格式就是高度、宽度通道数。咱们平时看到的彩色图片,其实由红绿蓝三层颜色叠加而成的,每 每一层负责一种颜色的深浅变化,所以这个三就代表这张图有三个通道,也就是有三层颜色图层。说到这里,咱们再补充一下刚才读取图片的小细节。刚才咱们用的是默认方式读取彩色图,也就是三个通道三层颜色的图, 如果在 amr 的 函数里加第二个参数零,就会把图片转成黑白的灰度图,这时候图片就只有一个通道,也就是只有一层颜色信息,只记录黑白明暗,没有彩色的区分,所以 am 点 shift 就 只会返回两个数字, 没有了最后的三,这也就是我们说的单通道。那如果我们想把刚才转换成的灰度图保存下来也特别简单,只需要在最后加一行代码就可以保存。灰度图的代码是 c v 二点 i m right 这一个方法咱们简单来说一下这行代码, c v 二点 i m right 是 open c v 里专门用来保存图片的函数。第一个参数, grey floor 点偏机是保存后的图片名字和格式,大家可以随意的更改。 第二个参数, i m 就是 咱们刚才读取并转换成灰度图的变量,用来告诉函数要保存的是这一张图片。加完这行代码后,咱们再一次运行一下这个代码, 运行结束后,大家就会发现和自己的编程脚本同一个文件夹里多了一张叫 grey flower 点偏机的图片,打开它就能看到,这就是我们保存好的绘图了,是不是特别简单,一步就能搞定保存操作,大家动手试试吧!

是淘米,今天继续我们 open cv 学习,那么在上一节课当中,我们给大家讲过,通过我们 opencv 的一个哈尔吉呢去进行人脸检测。今天啊我们继续讲这个人脸检测,不过呢是基于我们的这个叫 deliber 这个库,那 deliber 是什么呢?它其实就是一个深度学习开源工具 啊,这个得力不库啊,是基于 c 加加开发的,不过呢也支持 python 啊,所以我们在应用的时候啊,直接调用这个库就可以,非常简单。 那么这个得利本呢,对于人脸特征提取啊,他的支持比较好,那么也有很多这个训练好的人脸特征提取模型,可以直接拿过来使用。 delete 人脸识别开发呢,非常适合用于一些人脸的一些项目。所以啊,如果以后各位朋友做类似的项目呢,可以调用这个库,非常简单。那在这里,在 在这里呢,我也给大家提供了一个官方地址和 github 上的一个源码库啊,待会呢我也会给大家进行一下演示。那么 deliver 这个算法呢?今天我们会用到其中的一个算法,就这个号的算法啊,号的算法呢,一般是用来进行一个行人检测的, 那这这个号的算法呢,是在二零零五年提出来的,当时呢也是比较有影响力,那号的算法是什么呢?他的中文意思叫做方向梯度直方图, 那这个 hulk 呢,它是一种特征描述子啊,通常用于从图像数据中提取特征,它广泛应用于我们计算机视觉任务中的物体检测。 这里啊有一些这个名词啊,比如说特征描述子啊,他的那什么是特征描述子呢?他是图像的简化表示,仅仅包含 有关图像的重要信息,什么意思呢?比如说我们有一张图片,对吧?那么这个图片当中我们想检测里面的人脸,那么这个人脸有关这个人脸的信息就是一些关键信息,那么这些关键信息呢,我们就可以说他就是一种特征描述字 啊,理解起来啊,可以上去比较形象的去理解啊。那么这里呢,我给大家就提供了一个网址啊,你可以下载这篇论文去看一下,这是作者呢在零五年发表的一篇论文,我觉得讲的比较详细。 关于这个 hold 算法呢,我会在接下来的一期视频当中,专门给大家讲一讲这个 hold 算法的原理,包括它的一个运作的一个方式是怎样的,以及它的一个结果。 ok, 那今天呢,我们主要就是通过我们这个 delete 算法来给大家做一个人脸的检测。首先我们可以呢去到 官网看一下,包括他这个源码库看一下,我们还是看一下他的官网,我这里呢已经给大家找好了,比如说这个就是我们得利不酷的一个官网啊,那么在这里呢,他有介绍了很多这个呃库里面的一些算法,比如说像机器学习算法, 还有呢 s v m 算法,对吧?包括像这个呃 hog 算法,也有里面有一个 hog 算法,在这里有个叫 hog 算法,对吧? 包括像什么目标检测啊,人脸识别。所以呢,感兴趣的朋友啊,可以到他的官网来看一下他这个算法的实现是怎样的。 不过有一点啊,它里面这些算法的实现呢,都是用 c 加加写成的,如果你懂 c 加加,那我觉得读起来是比较比较比较顺畅的啊,不过呢你可以了解一下他这个实现的一个过程是怎样的,可以可以参考一下,那我们这边也 看一下它的这个 github 上的源码库,那么这个这个就是它的一个源码库,你可以把它下载下来啊,如果你没有这个 github 的一个这个账号呢,你就在这里啊进行一个, 进行一个注册就可以了,注册注册好之后你就可以啊,有个叫做 download, 你可以点击 download 就可以了。那么下载下来之后啊,你需要把这个文件文件包进行解压,解压之后呢就能够 解压之后啊就能够看到这个 deliber 这个源码库。我给大家看一下这个 deliber 源码库,它里面呢就是有一些文档,一些文件,哎,你可以自己去看一下的。 我这里呢就不给大家详细的介绍了,包括他一些案例,对吧? examples 你都可以去看一下,包括用 python 写的一些案例,它里面都比较丰富,可以去看一下怎么实现的啊?那么今天呢,我们就 通过代码给大家演示一下如何基于 deliber 来进行人脸的检测。首先啊,我们需要呢打开我们上一节视频当中创建的那个项目 hfs recognition, 如果你是第一次啊这个创建项目呢,你就点击这个叫做 create new project, 你就创建一个新的一个项目工程。那这里我就不给大家介绍了,因为上一节视频包括之前的视频我都反复讲过如何通过拍 charm 来创建一个新的工程项目,首先我们还是打开这个 face recognition, 这个是我们上一节课创建的一个工程项目啊,包括这个这边的代码是我们上一节视频当中写的,是基于这个 hard 这个吉年来进行人脸检测。一个是呢检测图片,一个是通过我们的摄像头来进行人脸检测啊,我就不给大家去细讲了, 感兴趣的朋友可以去看一下上一节的视频。那么在这里呢,我们创建一个新的一个 package, 一个包,比如说我这边叫做 face detection, 对吧?人脸检测 detection, 然后呢是基于这个 deliberate, ok, 然后呢在这个呃这个包下面我们再新建一个 pass 文件,我们新建一个 pass 文件,比如说 face detection, 对吧? deliber 或者说 the lab, 对吧?我们今天主要是呃第一个代码呢,我们主要是用它来检测图片的,我们写一个 emi 九 就可以了,这个就是我们一个建行的一个空的一个拍摄文件。那么想一下我们要实现一个人脸检测,他的步骤有哪些?那么我们还是仿照上一节视频当中讲的那个流程,我们先用中文来描述一下这个,像这个 啊,他的流程是怎样的?比如说第一步我们是不是要导入一个库,对吧?那么第二步我们要干嘛呢?是不是你要定一个方法,用它来显示图片,对吧?显示图片,也就是说显示我们最终的一个检测效果,那么我们就通过这个方法去实现。 那么第三一步是什么呢?我们是不是还是跟呃上次讲的一样,我们还是要定一个方法,这个方法主要是用来绘制这个人脸的矩形框,因为我们这个人脸检测出来之后啊,在他的面部会有一个矩形框,所以这个方法呢,主要是绘制 人年矩形框,它主要是起到一个绘制作用。 ok, 这个就是我们需要定义的两个方法。那接下来呢,我们是不是就要实现我们这个主函数了,叫做 man 函数,对吧?那我这里呢,先提前给大家写一下,比如说 man, 然后这 边是一个程序的一个入口,这这个写法是非常固定的,所以这个是非常固定的,我们其他代码呢,会写写在这个卖函数下面就可以了。 ok, 我们看一下第四步要干嘛?第,因为我们是对一张图片进行软件检测,所以呢,你需要读取一张图片,对不对? 读取一张图片,这是第四步。那第五步我们要干嘛?你是不是要把这张图片,因为他是一张彩色图片吗?你要进行一个灰度转换,对吧?这些步骤啊,我觉得我们已经写了很多遍了,我就稍微一笔带过了,一笔带过, 然后呢?你这个,呃,图片转换之后,那么接下来你是不是需要调用我们这个 delete 库,对吧?调用这个 delete 库,所以我这边可以这样写,调用 delete 库啊,库中的检测器,因为我们今天主要是基于 delete 来做人脸检测,所以我们就调用他这个方法,对吧?用他这个检测器来进行人脸检测就可以了。那么接下来我们第七步要干嘛 啊?对吧?第七步,那你是不是当你检通过这个检测器检测出人脸之后,我是不是需要通过这个方法把这个人脸给他绘制出来,就画出一些矩形框,把这个人脸给他框住就可以了,对吧?所以我这里呢,第七步就是说给检测出的人脸, 给检测出的人脸绘制矩形框,对吧?所以我们这边的每一步其实他都是有依据的,都是啊,在上一步完成之后,我们继续下一步, ok, 那么第八步是不是什么呢?我们是不是要创建一个画布,对吧?创建画布,因为我们要把这个结果显示在这个画布上。那第九一步是什么呢? 我们是不是要把整个检测效果给他显示出来,显示,对吧?最终的检测效果,他的每一步我们就是这样这样去去做的,或者说他的依据就是这样的,他的流程是这样,我们我们稍微浏览一下导入库,显示图片, 绘制人脸矩形框,读取一张图片灰度转换,调用这个库,调用库里面的检测器。然后呢,我们把检测出来的人脸呢,给他画上这些矩形框。 最第八步呢,创建一个画布。第九步呢,就显示最终的一个一个结果。那我们用代码来实现一下,比如第一步很简单吧, 首先呢,我们是需要导入我们的 cv 库,还需要导入什么?导入我们的 delibe 库,对吧?因为我们今天主要是通过 delibe 来实现的。然后呢,我们还需要导入我们的 number 派,对吧?南派库还需要导入一个叫做 mud plot leave 库,这这几个库啊,我们之前基本上都要用到这几个库, ok, 这个是南派,不要写错,是南派, ok, 呃,酷。导入好之后就是定一个方法来显示图片,显示这个效果啊,那么你显示图片,所以呢,你需要传进来一张图片,那么你还需要传进来一个抬头,就一个标题,对吧?一个标题,这个图片的标题, 那么图片传进来之后,它是以它的这个读取的,我们 open cv 是里面是一个 bgr 的一个通道的一个图片,所以我们需要把它转换成一个 rgb, 所以这边呢,我们需要对图片进行一个通道的一个顺序转换, 比如说这个,其实在以前我们这个代码当中啊,我们反复讲过了,这边前面的高和宽不变, 后面的通道给它颠,就是,呃,把它的顺序啊,稍微颠倒一下就可以了,把 bgr 的通道转换成 rgb, 也就颠倒一下就可以了。那么接下来呢,我们要把它的标题哎,给它显示一下抬头, 然后我们还需要显示什么?你是不是还需要显示一下这张图片,对吧?你要把这张图图片给它显示出来, i'm show 这个方法,那把这个 imager, 这个 rgb 的图片给它显示,然后呢我们把整个坐标轴关闭,我们不需要这个坐标轴,所以我们就用 off 把它关闭就可以了。 这个就是啊,我们显示图片的方法就这几行,代码非常简单。那么第三一步呢,就是绘制人脸矩形,怎么绘制呢?那跟我们上一节视频当中啊,这个做法一模一样,一模一样直接是一个呃, d f, 对吧?然后呢绘制,我这边用的是 pro 用的这个方法名 rectangle, 那么你绘制这个人脸矩形框,你是不是要把那个图片给我传进来, 同时呢你还需要给我传进,传进来什么呢?你检测到的人脸,对吧?比如说你,你在一张图片当中检测到了两个两啊,两个人脸,那么你这个人脸这个数据,你是不是要给我传进来我才能绘制? 如果你没有检测到,那我肯定不能绘制吗?你,你得到几个人脸了,那我就给你绘制几个,所以你这边肯定要给我传进来一个 faces, 就说你,你的检测器,也就是你在这里 你的检测器,他到底检测到了几个人脸,你必须要给我传进来, ok, 那么传进来之后我们要干嘛?你是不是要在图片上给他绘制出人脸了?很简单,怎么绘制呢?跟上一节视频当中一模一样。我们这边有个叫做 d e t 表示 detect 简写,然后可以也可以用 face 吧?用 face, 比如说 for face 啊, faces, 就说我会把你传进来的几个人脸一个一个的通过循环给它取出来, 于是我取出第一个人脸,我就给你画出来,第二个人脸我再给你画出来,第三个人脸我再给你画出来,就是说我通过循环一个一个的提取。那接下来呢?我们就给他进一个绘制,用我们的 rectangle 这个方法就是绘制一个长方形。首先你要把图片传进来,我是在你这张图片上绘制, 接下来呢,你需要把你的坐标给我传进来,比如说我们上一节,上一节讲这个哈尔纪念的时候啊,比如说像这张图片,对吧?我们上次给大家讲过,你在他这个人脸上画一个矩形框,你是不是要把这个,呃,你是不是要把这个第一个坐标,也就是 这个坐标你给我传进来,对吧?然后是哪一个坐标?就是这个对角线的坐标,这两个坐标你给我传给我之后,我就可以把你这个矩形光给你画出来。所以呢我们接下来也是获取到他的两个局,两个坐标啊,一个坐标是这里,一个坐标是这里, 所以呢我们代码也是这样去实现的。首先我们获取到它第一个坐标啊,也就是通过我们这个 face 能够获取到他这个左边的,我们通过这个方法叫 left, 就能够获取到他左边的这个坐标。然后呢我们再获取到什么呢?他这个上面的这个坐标上面的叫 top, 我们就能够把第一个坐标给他获取得到。因为这个, 呃,人脸检测到之后啊,他给你传返回的数据呢,他是有坐标的,他是有坐标的啊,这个坐标呢,就说一个是 左上角的一个坐标是这样的,一个是右下角的坐标,所以呢这边你一定要把它括起来,这里啊,它是有一个圆括号,把这两个值放在一起的,所以这边一定要注意括号不要少写了。然后我们再把它的这个,呃右下角就那个斜对角形的坐标给它拿到,一个是 right 方法, 一个是 fasten, 然后是 mountain, 一个底部的一个一个值你会拿到,这样呢我们就把第一个坐标给他拿到了, 第二个坐标也给他拿到了,也就是跟我们 pp ppt 上一样,我先把第一个坐标拿到了,再把第二个坐标拿到了,那么这个矩形框我一下子就能画出来了,所以这边我写的这个作用啊,就是说获取它的坐标值, 那么获取到坐标之后,我再画这个矩形框的时候,我就要给这个矩形复制一个 颜色,比如说一个蓝色,对吧? bg 二嘛,我这个 b 呢给了他一个二五五的值,那个 g 和二全部是零,那么他最终显示呢,肯定肯定就是一个蓝色的值,就一个蓝色的线。 然后呢我再给这个矩形框加粗啊,或者他的这个线条吧,我给他一个四号,就是他粗一点,粗一点就行了, 这个就是我们的矩形框,那么一个循环下来啊,就一个负循环下来呢,他就会把你检测到的人脸全部给他画上这个矩形框,最后呢我们需要把这个, 呃这个图片给他返回,返回去。为什么呢?因为我们这个图片啊,你传进来的时候他没有画矩形框,那么你这个复循框运行完之后,他上面呢都把人脸给你画出矩形框了,所以这个图片呢也就变成了一张新的图片,所以你要把这张图片呢再给他返回,返回去,因为我这边, 因为我这里啊要给他显示图片的,对吧?所以你这边这个图片你肯定要给我返回来的。接下来呢我们这个方法就给他写好了。如何绘制人脸的矩形框, 那么第四一步是什么呢?我们是不是要读取一张图片了,对吧?因为我们要在,我们要检测一张图片,所以这里呢我们可以这样写,比如说 imager, 对吧?我们要读取一张图片, 用我们的 imere 的就可以了。然后我这边比如说我读起一个什么呢?比如像这个 family, 我看我这边有没有,哎,我这边还没有素材,对吧?我就把啊上一件视频当中这个 family, 这个这个图片我给他拷贝过来,怎么拷贝呢?很简单,我这边可以这样写,我看看行不行? 这个右击,然后有个叫 copy, 对吧? copy 拷贝,然后在这里啊,右击粘贴就可以了。呃,粘贴一下, 这样呢,我这个图片啊,这个素材就给我拷拷贝过来了,对吧?那接下来呢,我们就检测这张图片,给我这里将写 检测这个人脸就是发明了吗?对,图片呢,我们已经读取进来了,接接下来我们是不是要对他进行一个灰度转换?灰度转换很简单啦,直接是调用这个 cvt 开了,对吧?然后呢,你把图片传进来,我再给他进行一个灰度的转换, 首先是通过我们的 bgr 转换成一个 gra 就可以了,非常简单。然后转换完之后,我们接下来很重要的一点就是要调用 the leave 库中的这个检测器,这个检测检这个检测器的调用非常简单, 直接是 delete, 对吧?然后点,然后是 get 就可以了。然后呢,因为我们是对人脸的一个正面进行检测嘛,所以我们 就选择这个 frontal face, 呃, detector 就可以了,我们回车一下,我们就调用这个方法来进行啊,就说来啊,调用他的一个检测器,比如说我这边给他负一个值叫 detector 吧,对吧?我现在呢已经获取到了这 glib 库中的这个 这个库中的这个检测器了,那接下来呢,我这个检测器获取到了,那我是不是要对这个人脸啊?对,这对这个图片,这个灰度图片进行人脸检测了,对吧?这个太简单了,直接用这个检测器,比如说 detector, 这是我们刚刚获取到的检测器,对吧?把这张灰度图片给他传进去就可以了,传进去就可以了。然后呢,我这边这里呢,会得到一个返回的检测到的一个值,也就是说它里面有几个人脸,他都会一下子给你检测出来。所以我这里啊,我就用一个变量来接收这个检测 的结果,比如说检测的结果 detects result 就行了,对吧?我可以这样,呃,把这个检测的结果呢复制给了这个变量,就说 我获取,我获取到了,你给我检测出来几个人脸,那这里呢,我可以再加一个参数,比如加个一,为什么就说我想把这张图片给他放大一倍, 让我们这个检测器呢去检测,这样呢能够确保它里面所有的人脸都能够被检测到, ok, 这个一的作用啊,就是说放大,我这边给大家备注一下,一,比如说,哎, 我这边给大家做一个备注,一,代表将图片放大一倍。 ok, 这个就是我们通过检测器来检测人脸,对图片进行一个检测。那么接下来呢,我们是不是要获取据说 给我们这个人脸啊,进行一个绘制矩形框,怎么绘制呢?直接通过我们的 plot 这个 rectangle 这个方法,就通过这个方法来绘制矩形,我们直接调用它就可以了。然后呢你要把图片给它传进去,比如说我这边传一个图片,我把它的备份拷贝一份给它传过去,然后还干嘛? 我们是不是要把这个结果给他传过去啊?对吧?因为这个就是我们检测出来的人脸嘛,我就要把这个结果给他返回过去,那么他画好, 给他画好之后,他又给我返回出一张新的图片,所以我这里呢需要接收一下,接收一下这个新的图片,可是我这边叫做 image result 吧,这个就是我接收到的一个啊,新的一个图片了,上面呢 他给我绘制了,绘制出了所有的人脸,然后接下来呢,我们是创建一个画布,怎么创建呢?通过我们的 p o t 这个 figure 来创建画布就可以了,然后里面我们设置一个画布的大小,对吧?然后呢我们还可以设置什么?设置一下画布的一个标题,比如说 super title, 我们这边写一个 fast detection with deliber, 对吧?我们基于 deliber 来做人脸检测,然后给它设置一下字体的大小,比如说我们就设置一个呃,十四,对吧?然后呢再设置一下它的这个 字体的大小粗细,比如说粗一点啊,他这个标题的字体啊,粗一点。 ok。 画布呢,我们已经创建好了,接下来呢 我们就是要把整个结果给他显示出来,怎么显示呢?直接调用这个修 image 方法就可以了,我们传进去一个结果的照片,传进去一个标题,那么他就帮我们把 整个检测的结果给他显示出来了,所以我们这里直接调用他的方法就可以了,比如说修,对吧? amg, 然后呢我们把这个结果给他传进去,就把 这个结果啊,我们这个绘制好的,绘制好软点矩形的结果给他传进去,然后给他加一个标题,我们就加一个叫做 face detection 就可以了, ok, 然后呢我们把整个画布显示一下, p o t show 就可以。 ok, 那么现那么我们现在把整个流程全部通过代码呢进行了实现啊,哎,这好像有问题,我们少了一个括号,不要写错,不然他会报错, 然后其他的我们全部都写好了。那接下来呢,我们就运行一下,看看他能不能得到正确的一个效果或一个一个结果, 我们让一下看看会不会报错,哎,显示出来了,对吧?我们代码没有问题,我们代码编写没有问题,他就呢把这张图片呢进行了一个人脸的一个检测, 他发现有三个人脸,所以呢他全部给你画上了矩形框,对吧?全部画上了矩形框,然后这这个呢黑色字体啊,这个就是我们的这个超级标题,这个就是我们每一张图片显示的那个小标题,比如说我们的超级标题是不是,是不是这个,对吧?他就显示在这里,然后这个呢就是我们 图片上方的这个小标题,对吧?所以呢这个结,这个这个结果是我觉得没有问题,他的这个检测效果还是不错的,但是一定要注意,我们这个算法,他只能针对正脸进行检测,比如说你要是脸特别歪,特别侧,他就无法检测了,所以这个算法呢,他还是 比较低级的一个算法,比较低级的算法,那么以后呢,我们会讲到深度学习,通过深度学习来进行人脸的检测识别,那个准确率是非常非常高的,基本上能够达到百分之九十五以上, ok, 那么目前我们只是啊算是一个人脸检测的一个入门,入门算法, 这个是针对图片的一个检测效果。那接下来呢,我们就通过代码再实现一下,通过我们笔记本自带的摄像头来实现人脸的检测,这个啊也很好写。那么我还是 啊,那这个是因为我担心这个接下来视频比较长,我就先这这个图图片的人脸检测,我们就先到这里,那下一个视频呢,我就再给大家录制一下关于这个通过摄像头来进行人脸的识别。 好了。那这期视频呢,我们就先到这里,如果有任何疑问可以在视频下方啊给我留言。那么欢迎大家继续学习后续的课程,拜拜。

窗口中显示游戏画面,上面两节做完以后都是将截图保存到文件,然后手动的去打开,如何让它自动的显示出来呢?这里使用 opensiv 的 mco 方法将图片显示出来,我们复制一下代码, 嗯,粘贴好,我们再次把我们的游戏画面调出来,然后看一下 这个左上角是三十四,一百七十九,三十四,一百七十九,宽和高 是一二零零六七八六七六。 好,我们再来解释一下代码,第一行就是引入截图的库, 第二行是我们就要载入,因为我们要调用 oppo cv 来显示这个窗口,第二个我们就要载入这个 oppo cv 的一个库,那 oppo cv 他在拍摄里面就叫 cv two。 第三行载入一个浪派的一个库,这个库可以简单的理解为就是将图片转换成数组,因为那个 opensiv 无法直接处理 macs 的截图,需要用 number 做一下数组的转换好,再然后再接着我们就是定义的一个区域,然后我们实力化 这个这个截图的工具,然后做了一张截屏,截屏以后,然后我们去用安排的去把这个截屏转换一下, 转换一下我们就调用了 seven two 的 m 秀方法去把这个截屏显示出来,然后后面两行是什么什么用呢?如果说我们不加这两行,我们得到的一个效果是什么样的呢?就是一个窗口一闪而过, 不会停留等着我们,所以我们把这两行加上,然后我们再次运行的话,我们就发现有一个窗口已经跳出来了,我们这个代码的窗口挪挪开一下,我们再来测试一下 好运行,哎,我们我们就得到了一张自动显示出来的一张有机画面的截图。 好,这个时候可能说,嘿,这个截图挺大的,把我正常的游戏都已经遮挡住了,那么就可以利用另外这两行 将这个这个窗口等比例的缩小,你看我现在是不能缩小的,我们先关掉, 然后将这两行代码复制到哪里呢?复制在我们在显示截图之前,我们填上这两行代码,然后把注视取消掉。 啊,第一行代码就是说让这个窗口可以就是可以缩放啊,我解释一下,就是当我运行了这个以后, 我这个窗口也是按这个大小,但是我这个窗口他现在可以拖放,当然每次运行的时候都需要拖放,就不方便。那么第二行就是比如说我现在截图的是幺二零零乘七六八,那么我就显示六百乘以三百多的一个一个窗口, 我们来看一下实际的效果,这样他就会以小窗口来显示,我们再把再次把游戏打开重新截图看一下。 好,我们可以看到有一张等比例的就在这里显示了,然后我们也不会不会影响我们游戏的运行。 好,本节就再见。结束了,如果觉得视频对你有帮助,欢迎一键三连。