欢迎光临散文网 会员登陆 & 注册

基于Python的Opencv入门教程第二大部分(P2.识别物体)

2022-01-25 16:15 作者:闲予1217  | 我要投稿

书接上文(doge)

轮廓检测并绘制

在这个OpenCV基础教程中,我们正在使用OpenCV和Python查找轮廓形状。

在上图中,我们有6个形状轮廓。让我们通过代码找到并绘制他们的轮廓:

在第34行和第35行,我们使用CV2。查找轮廓以检测图像中的轮廓。注意参数标志,但现在让我们保持简单——我们的算法是在阈值中查找所有前景(白色)像素。复制()图像。

第36行非常重要,因为CV2。findContours的实现在OpenCV 2.4、OpenCV 3和OpenCV 4之间进行了更改。无论涉及到什么样的轮廓,博客上都会出现这种兼容性。

我们在第37行复制原始图像,以便在随后的第40-45行绘制轮廓。

我们使用CVC列表中的每一行CNT47来适当地绘制cnts。画轮廓。我选择了紫色,它由元组(240,0,159)表示。

根据我们之前在这篇博文中了解到的内容,让我们在图像上叠加一些文本:

第48行构建一个文本字符串,其中包含形状轮廓的数量。计算这张图像中物体的总数就像检查轮廓列表的长度一样简单。

结果如下图所示:

使用OpenCV计算轮廓就像找到轮廓然后调用len(cnts)一样简单。

侵蚀和扩张

腐蚀和膨胀通常用于减少二值图像中的噪声(阈值化的副作用)。

为了减小前景对象的大小,我们可以通过多次迭代来削弱像素:

在第55行,我们复制thresh图像,同时将其命名为mask。

然后,利用CV2。侵蚀,我们继续通过5次迭代来减小轮廓尺寸(第56行)。

如下图所示,由俄罗斯方块轮廓生成的面具略小:

使用OpenCV,我们可以侵蚀轮廓,有效地使其变小,或通过足够的迭代使其完全消失。这通常用于移除遮罩图像中的小斑点。

类似地,我们可以在遮罩中显示前景区域。要扩大区域,只需使用CV2.dilate:

在图像处理管道中,如果需要连接附近的轮廓,可以对图像应用膨胀。图中显示的是经过五次迭代扩展轮廓的结果,但不是两个轮廓变成一个。

掩蔽和按位操作

遮罩允许我们“遮掩”我们不感兴趣的图像区域。我们称它们为“遮罩”,因为它们会隐藏我们不关心的图像区域。

如果我们使用文章中的第四张图片的thresh图像,并用原始图像遮罩它,我们将看到下图:

当使用阈值图像作为与原始图像相比的遮罩时,彩色区域会随着图像的其余部分被“遮罩”而重新出现。当然,这是一个简单的例子,但正如你所想象的,面具非常强大。

在上图中,背景现在是黑色的,前景由彩色像素组成——任何被遮罩图像遮住的像素。

让我们学习如何做到这一点:

通过复制二值阈值图像生成掩模(第67行)。

从这里,我们使用CV2按位和两幅图像中的像素组合在一起。按位_和。

结果如上图所示,我们现在只显示/突出显示俄罗斯方块。

运行第二个OpenCV教程Python脚本

上期简单的讲了一下如何运行这个程序,那么详细教程来了!

(干嘛说这么多废话)

要运行第二个脚本,请确保您位于包含下载的源代码和Python脚本的文件夹中。从那里,我们将打开一个终端,提供脚本名+命令行参数:

参数标志是--image,图像参数本身是俄罗斯方块。png-目录中相关文件的路径。

此脚本没有终端输出。同样,要循环浏览图像,请确保单击图像窗口使其处于活动状态,从那里可以按一个键,它将被捕获,以前进到脚本中的下一个等待键(0)。当程序完成运行时,脚本将优雅地退出,并在终端中显示一个新的bash提示行。

PS:当然也可以使用上一期所讲的方法,上文是原作者写的,而上一期的是我这个87找老师后的解答,两者都可以运行

以下是废话时间(bushi)

那么,关于基于Python的Opencv入门教程的第二大Part也结束了。(没想到两期就赶完了)

接来应该会更新关于这个外国作者的其他文章。

还有,视频短时间内是更不了了QAQ

基于Python的Opencv入门教程第二大部分(P2.识别物体)的评论 (共 条)

分享到微博请遵守国家法律