粉丝6获赞21

有了这样一个结果之后,那接下来我们就可以来做一个轮廓检测,把我们这些字符的轮廓给算出来,那这个轮廓检测怎么做呢?其实也是调一个函数啊,这是 c b 二。然后呢 fun 的 轮廓,这这边一个函数,那这个函数啊,有这么几个参数要填。首先你要是找哪张图的一个轮廓啊?注意啊,这张图必须是这个二之图啊,所以还是我们的 image 好。然后呢,接下来就是有一个参数啊,就是我这个模式,模式的话一般来说填个这个就可以了,什么阿姨吹嗯 数的模式去找。然后呢接下来还有一个 measure 的, measure 的话一般也是填一个什么 train simple 就可以了。然后这个轮廓检测的函数和十二十号的函数一样,会返回两个数据给我们。 第一个数据就是轮廓,也是我们真正要的那个数据,那比如说我们就叫做这个吧,好吧, 轮廓。然后还有一个数据,就是这些轮廓他们之间的关系,对于我们现在这个任务来说,这种关系是没有什么用的,所以我们可以不要。 好,然后呢我们来打印一下这个轮廓到底是个什么玩意?走,大家可以看到啊,这是啥? 这些啊,其实就是我这些字符啊,就比如说这个七是这么个样子,对不对?那他这个轮廓就是围着他这个边上绕一圈,是不是?那这些东西呢?就是这些边上的这个点的坐标, 懂了吧?所以为什么说这个东西才是我们真正要的呢?好,那有了这个轮廓之后啊,我们来看一下这里面到底有几个轮廓 哇?八个,是不是有八个轮廓?但是我们这里应该是只有五个字符啊,怎么会有八个轮廓呢?啊?其实啊,你看这个 a 这里啊,中间是有间隙的,是不是?那没连上啊?所以 这个是个轮廓啊,这个也是个轮廓,那我们是不是得想办法把这个东西给连起来?怎么连呢?其实非常简单啊,就是在我们做辅食的时候,我们把这个 ctrl 调大一点不就可以了吗?那就比如说我在做这个 五十的时候,把它的 curl 调成七行七列的,然后呢我们再来试一下,哎,可以看到,对吧? 连起来了,对不对?连起来之后呢?怎么样呢?嗯,轮廓数量也变少了,变成七个。有了这七个轮廓之后,我们接下来是不是应该从这七个轮廓里面挑出五个轮廓来代表这五个字符啊? 是不是?那怎么找呢?其实我们可以根据轮廓的面积来找,所以呢,我们得把这 所有的轮廓的面积都算一遍,那我们可以搞个变量啊,比如说叫 eric 面积,搞个列表,然后呢我们来循环一下啊, see in, 然后呢怎么算这个轮廓的面积呢?有一个函数 c p 二点, 呃, every 这个,嗯,轮廓的面积,然后呢,我们只需要把这个轮廓啊,单起这个轮廓扔进去啊,我们就能算出它的面积,我们可以打印一下看一下啊, 走,你看是不是?那我们是不是找出这里面五个最大的面积所对应的轮廓啊?就相当于是找到了那五个字符啊,所以呢,我们接下来还要干一个事情,就是 这七个里面挑五个最大的,那怎么挑呢?也很简单,我们先把这个 iris 转成安排的 ndry, 那转完之后就有好处了。什么好处呢?就是安排有个函数叫阿个 salt, 那这个阿克索者,他可以把我们的这个安排的数据进行从小到大排序,但是他排序的结果呢?是我们这些数据所对应的所引。 那这句话什么意思?我们打印一下啊,就知道了。比如说我这里叫一个 index 吧,啊,因为它是,所以嘛,然后呢 index 打印一下走,哎,是空的哦,我这个 airs 里面本来就是空的,还没 append 嘛,对吧?呃, 关机的,打印了,没有 pan, 那么我们这里就这个样子吧, er 面积,然后呢?把这个面积扔到这个 er 里面。 好,那接下来我们来试一下啊,先把这个面积打印出来,然后再把这个 index 打出来, 好,再来试一下。大家可以看到啊,这个是我们的面积,对不对啊?这个就是这个 index, 它呢是从小到大排序的,什么意思呢? 这个就是最小的,这个五是什么?五就是这个列表里面所以为五的那个数据,那零一二 二三四五,那这个是不是最小的,对吧?这个是这里面最小的,所以呢,第一个是五,然后第二小是谁呢?是一一的话,零一,你看 啊,没人比他小了吧?除了这个,然后接下来是二二的号,那是他吧,然后呢?再大一点,六零一二三四五六,那确实是这样子吧, 对不对?好,有了这个缩影之后啊,如果我们想要拿到面积最大的,那是不是取这五个, 对不对?取这五个吧,那取这五个怎么取?我们是不是可以切片啊?我们记下结果啊,是二六三四零,对不对?好,我们切个片啊,那 就是倒数第五个开始,那就负五,然后这样子走,那二六三四零,对不对?那有了这个二六三四零这个缩影之后,它其实就相当于是一个 face indexe, 那既然是 facing indexing, 那么这个东西给我们的 areas 是不是就能拿出对应的五个最大的面积的值?是不是?比如说我们这样子 扔进来,好,你看是不是五个最大的?当然我们这里的这个业务啊,不需要去拿他五个最大的面积,因为拿了没用。 感兴趣的是这七个轮廓里面,哪五个轮廓是我们想要的吧,对不对啊?所以呢,我们得改改代码, 那这个 index 这里我要拿最大的五个啊,拿手,顺便把这个东西搞上去, 然后这么一改之后啊,我们这个 index 啊,就是最大的那五个轮廓的缩影,对吧?二六三四零。好,有了这些东西之后啊, 我们得干嘛呢?我们得搞一个变量啊,比如说叫 top 五,然后轮廓 他是列表,然后呢,我们往里面去塞东西,对吧?那就可以循环个五次啊,然后就可以呢, 这个点 a pen 往里面塞东西,塞什么?是不是塞它的?然后呢?塞什么呢? index 的第二个,对不对? 好,然后呢,我们再来打印一下啊,走,嗯,有东西了吧,是不是?那为了验证一下的话啊,我们可以把什么呢? 把这个面积给打一下啊,看是不是最大的五个,对吧?那就是,嗯,哎,那个函数叫什么来着?叫这个啊? c b r 点这个啊,然后呢?嗯, 当前最后一个,走,你看是不是最大的五个,那就没错了啊,那就没错了,那有了这五个轮廓之后,我们是不是还要算出这五个轮廓, 他的那个包围框啊?对吧?就比如说我这个其他的包围框,应该就是这个样子吧,是不是这个挨的框是不是这个样子?一个矩形吧,那这个东西怎么算呢?其实也很简单啊,是这个样子的, 比如说我们有了这五个轮廓,那么我们就可以继续循环啊,啊 c, 然后叉破五这个,那这里面我们可以这个样子啊,打印一下。打印什么呢? cp 二点邦顶 rect, 那绑定矩形,其实就是那个轮廓的包围框啊,那怎么用呢?就是把这个单前的轮廓扔进来,然后呢我们再来打印一下,大家可以看到 啊,这里是不是有四个坐标啊?对不对?那这些坐标是什么意思呢?其实就是 x、 y w h 就是通过这四个值来表示一个矩形, x y 就是我这个矩形在原图里面的,呃,那个左上角的那个点的坐标, 然后呢, w 就是我这个包围框的宽度, h 就是包围框的高度。但是你如果细心的话,你会发现 有一个包围框,他的这个坐标是比较诡异的,那 x y 是零零,也就是整个图的左上角,那么也就是说这个最大的轮廓好像就是整张图啊,对不对?好像是整张图, 因为这里是个白色的,所以呢,那这个轮廓肯定不是我们要的轮廓,那怎么办呢?那这里改一改呗,那这里就变成负六负一,也就是说那 排的第二大到第六大的轮廓。好,然后我们再来试一下,哎,这个时候大家可以看到啊,这个轮廓啊,就好像比较正经一点啊。

今天给大家介绍一个非机动车计数器的项目,使用 opencv 和 ulov 八检测非机动车并计数,实现准确、快速的识别和分类非机动车, 对非机动车的管理和监控有着非常大的帮助,可以扩展带人未戴头盔、闯红灯的功能。优裸 v 八是一个使用拍套取框架创建和训练的剪辑神经网络模型, 是计算机视觉领域最流行的目标检测算法之一。运行代码来看看结果吧。

呃,目前展示的是一个基于传统 open cv 的一个网球的一个识别,那么可以看一下效果。 那么它的一个识别逻辑主要就是第一个基于 h s v 色域的一个呃分割,然后在色域分割的基础上再加上一个后复原检测,可以很很比较完美的去将网球给它呃识别出来。 但是目前这个程序有一个问题,就是他只能识别一个,那么这个时候我们只需要把这个程序给他稍微修改一点点。 呃可以看一下,大概就是主要最主要的功能就在这个地方。那么呃首先啊,它是通 过一个色域 shv 去将这边是色域 hv 的一个,一个高和一个低, 就三个字 h s v, 它的一个上线和下线的一个设域范围,然后根据这个设域范围将网球可以切割出来。呃切割出来以后,呃, 然后就用一个霍夫原检测对其进行一个原检测,就可以很很完美的将这个网球从图像中给他死死的分割出来。 那么我们如果需要去呃获取同时获取两个网球或者多个网球的话,它主要就在这个区域。呃这边是将呃 h s v 设于 分割出来的物体中,只显示最大的那个物体的边缘,然后将它画出来。那么我们要显示多个的话就很简单,我们画多个就可以了。所以 用一个 for 循环把所有检测出来的物体都给它画出来,然后再用一个后复原检测,只画圆就可以了。然后这个时候我们来再运行一下。 好,这是一个啊,这是两个。 可以看到它的一个响应速度和一个识别的一个精度都还是很不错的。 嗯,那么接下来还有一个就是在这个过程中,我 觉得一个最麻烦的就是这个色域的一个确定啊,他首先是需要经过一个呃色域的一个查表,但就现在可以演示一遍他查完表以后是一个什么样的一个效果。 我们导入一下测试的一个图片,比如说网球是绿色的,那我查完表以后,我的 h 的一个上限是七十七,然后下限是三十五,然后 v 的一个上限是二五五,下限是四十三, 然后 s 它的一个上线是二五五,下线是四十六。可以看到 他这个绿色其实并没有完全把这个网球给分割出来,所以当时是在程序里面的话就是啊,不停的去调,看调就控制变量法,看调哪一个,他的一个效果更好,他并不直观,也很费时间。那这个时候我们可以 有这个高效工具,以后我们就可以这样哎,给他增加一点点,看到他就已经可以 很好的将这个网球给他很明显的显示出来,但还有一些干扰。然后这个时候我们来调一下这个,看能不能尽量减少一点, 随着这个的增加,可以看到一些白点在减少,但减少到一定程度的时候,这个球上面的白点也在减少了。那么我们这个时候看能不能调一下其他的 哦,这个也不能怎么调,但这个可以把球上的一些黑点给他去掉,他两个是不是可以好像没有很好。让我们来看一下这 这个 s 就可以很好的去去除掉一些没必要的一些东西, 基本上就整个图片中就只留下了球, 那么这个纸就应该是一个比较好的一个风格效果。然后这个时候我们再把这个纸给他带到这个里面来就可以了。


今天给大家介绍一个门店客流统计的项目,使用 opencv 检测顾客,并且设定客人进出区域,实现实时计算进出顾客的数量。客流量统计对于零售行业来说是非常重要的, 统计每天的进出店人数、过店人数以及人均驻留时间等,以及这些数据,经营者可以对店铺的经营策略进行调整,实现店铺的经营效益最大化。进行代码来看看结果吧。

呃,我们来看一下这个,呃物体的判断,物体的判断的这个程序,然后这里有一个乒乓球, 看无论他移动移动移动移动到哪他都能判断出这就是他要寻找的这个物体啊。 那么我们拿一个刚绕的东西,别说我这里也有个圆形的,圆形的 那他就他并没有认为这个就是他要寻找的物品。我们拿开 这圆形,因为我还做了这个颜色的这个判断,所以他就不能判断,只有我们这个 他才能够正确的那个判断出来。

ok, 看一下这个视频去水印的这个效果,我我写了个小程序,是这样的,大概是录把视频的每一针 都分几张图片,然后把它剪,然后把图片中有时间的位置定位,然后把它切下来,现在进行处理处理,再复位回去,复位回去,然后再把它合成视频代码部分,代码部分 代表部分就不多不多讲了,这因为写的有点乱,然后直接泡一下,看一下效果吧, 这里有几个删除一个,先准备两个空的文件夹,有一个有一个视频视频的录像, 定啊乱一个 开始跑,跑的时候他就会连家里面就会有,有文件 就分解出来,一直有分解出来,你看这里会有对象个人的变多, 我看他跑的时间还有还有一段的时间,然后再再讲解一下代代码部分嘛,两个文件夹, 哦,就是这这边就写一个循环,我这写了个死循环,来读取这个分解这个这个视频,这个视频 这这里这一部分,然后到这一部分去水定位,定位水印这一部分,这一部分代码大概就是这样的定位,把这里定位出来, 然后就是去水印,把这个 好再跑,再跑的时候我就再讲解一下这代码部分吧,代码部分就 就这这一段,就是就是就是分解视频,把它读进来,要分解分解,分解成一张一张图片, 这里就对应这里的,我写的是呃,写个第八个出来,把它分拆拆出来的这个,然后带合并回来,然后这里这一部分就是呃, 把把这每一张分解出来的视频,然后进行处理,去水印每一张,然后每一张就定位 定位,把这里定位定到这里,然后然后下一步就是把它去水 印,把这个位置的印给去掉,然后就是到下面这一部分代码就是他的合成视频,合成视频就就叫这个名字, 然后发生的视频,然后指这是眉针的图像,那没有声音的,哦,要声音怎么办呢?要声音,然后就自己打开一个减脂器, 导入两个视频,然后把声音导入进去,这很简单的一部分就不展示了。 好,跑完了就跑完,跑完就看一下,展示一下效果, 叫什么名字? 零零幺幺,这个跑完的效果,这没有声音的,只有一阵阵的画面, ok, 这就展示完毕了。如果是想换一个视频来跑一下也可以,但是要跑的有点久, 这再换一个文件名就行了。就是这个有一个弊端,就是在他补图片的时候补的不是很好,所以我们 每每次找的都是找一些啊水印在那些不重要的位置上面的,因为黑底啊那些比较容易去掉, 因为你补进去的图像和原图补的不是很好,就这一部分, 或许我也更改,把它修好一点点,下,下一个下期就写一个自动化的办公吗?