基于Python的Opencv入门教程第二大部分(P2.识别物体)
书接上文(doge)
轮廓检测并绘制

在上图中,我们有6个形状轮廓。让我们通过代码找到并绘制他们的轮廓:
在第34行和第35行,我们使用CV2。查找轮廓以检测图像中的轮廓。注意参数标志,但现在让我们保持简单——我们的算法是在阈值中查找所有前景(白色)像素。复制()图像。
第36行非常重要,因为CV2。findContours的实现在OpenCV 2.4、OpenCV 3和OpenCV 4之间进行了更改。无论涉及到什么样的轮廓,博客上都会出现这种兼容性。
我们在第37行复制原始图像,以便在随后的第40-45行绘制轮廓。
我们使用CVC列表中的每一行CNT47来适当地绘制cnts。画轮廓。我选择了紫色,它由元组(240,0,159)表示。
根据我们之前在这篇博文中了解到的内容,让我们在图像上叠加一些文本:
第48行构建一个文本字符串,其中包含形状轮廓的数量。计算这张图像中物体的总数就像检查轮廓列表的长度一样简单。
结果如下图所示:

侵蚀和扩张
腐蚀和膨胀通常用于减少二值图像中的噪声(阈值化的副作用)。
为了减小前景对象的大小,我们可以通过多次迭代来削弱像素:
在第55行,我们复制thresh图像,同时将其命名为mask。
然后,利用CV2。侵蚀,我们继续通过5次迭代来减小轮廓尺寸(第56行)。
如下图所示,由俄罗斯方块轮廓生成的面具略小:

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

掩蔽和按位操作
遮罩允许我们“遮掩”我们不感兴趣的图像区域。我们称它们为“遮罩”,因为它们会隐藏我们不关心的图像区域。
如果我们使用文章中的第四张图片的thresh图像,并用原始图像遮罩它,我们将看到下图:

在上图中,背景现在是黑色的,前景由彩色像素组成——任何被遮罩图像遮住的像素。
让我们学习如何做到这一点:
通过复制二值阈值图像生成掩模(第67行)。
从这里,我们使用CV2按位和两幅图像中的像素组合在一起。按位_和。
结果如上图所示,我们现在只显示/突出显示俄罗斯方块。
运行第二个OpenCV教程Python脚本
上期简单的讲了一下如何运行这个程序,那么详细教程来了!
(干嘛说这么多废话)
要运行第二个脚本,请确保您位于包含下载的源代码和Python脚本的文件夹中。从那里,我们将打开一个终端,提供脚本名+命令行参数:
参数标志是--image,图像参数本身是俄罗斯方块。png-目录中相关文件的路径。
此脚本没有终端输出。同样,要循环浏览图像,请确保单击图像窗口使其处于活动状态,从那里可以按一个键,它将被捕获,以前进到脚本中的下一个等待键(0)。当程序完成运行时,脚本将优雅地退出,并在终端中显示一个新的bash提示行。
PS:当然也可以使用上一期所讲的方法,上文是原作者写的,而上一期的是我这个87找老师后的解答,两者都可以运行

以下是废话时间(bushi)
那么,关于基于Python的Opencv入门教程的第二大Part也结束了。(没想到两期就赶完了)
接来应该会更新关于这个外国作者的其他文章。
还有,视频短时间内是更不了了QAQ