蒙太奇与OpenCV(P1)
今天的博客文章有四个主要部分。
在第一部分中,我们将学习如何从驻留在磁盘上的图像数据集构建图像路径列表。
从这里开始,我们将使用build_montages函数获取这个图像列表,并创建实际的蒙太奇。
接下来,我们将在屏幕上显示蒙太奇。
最后,我将提供一个使用蒙太奇在OpenCV中显示图像的示例。
要将源代码+示例图像下载到本文,请确保使用下面的“下载”部分。
使用OpenCV创建蒙太奇
首先,打开一个新文件,将其命名为montage_example.py,并插入以下代码:
第3-7行导入我们所需的Python包。请注意如何从imutils包导入build_蒙太奇。
如果您的系统上没有安装IMUTIL(截至本文撰写之时为v0.4.3),请确保通过pip安装/升级它:
$pip安装--升级imutils
注意:如果您使用的是Python虚拟环境(就像我的所有OpenCV安装教程一样),请确保先使用workon命令访问您的虚拟环境,然后安装/升级imutils。
从这里,我们可以解析命令行参数:
我们的脚本需要一个命令行参数,后跟第二个可选参数,每个参数的详细信息如下:
--images:指向目录的路径,其中包含要用其构建蒙太奇的图像。
--samples:一个可选的命令行参数,指定要采样的图像数(我们将该值默认为21个图像总数)。
接下来,我们可以使用--images路径随机选择一些输入图像:
为了获得--images目录中所有图像路径的列表,我们调用list_images函数(第19行)。
出于本练习的目的,我们随机洗牌第20行上的图像路径,然后采集这些图像的样本以显示在屏幕上(第21行)。此采样返回的图像路径集将用于构建蒙太奇。
对于您自己的应用程序,您可能不必费心随机洗牌和选择一组图像路径——您已经有了图像路径。
在Brian最初的问题中,他希望显示他的图像搜索引擎的结果。
因此,结果包含他的图像路径。
同样,请记住,我们只是演示如何使用OpenCV构建蒙太奇——如何实际使用这个示例完全取决于您。
鉴于我们的ImagePath,我们已经准备好构建蒙太奇:
在第24行,我们初始化图像列表。
然后,我们在第28-31行的ImagePath中循环,从磁盘加载每个图像,然后将图像附加到图像列表中。
为了实际构建蒙太奇,我们在第34行调用build_montages函数——这是完成所有繁重工作的地方。如果您对build_montages方法的内部结构以及幕后发生的事情感到好奇,请务必查看GitHub上的源代码实现。
build_montages函数需要三个参数:
图像列表:该参数是通过OpenCV加载的图像列表。在我们的例子中,我们提供了构建在第28-31行上的图像列表。
图像形状:一个元组,包含蒙太奇中每个图像的宽度和高度。在这里,我们指出蒙太奇中的所有图像都将调整为129 x 196。将蒙太奇中的每个图像调整为固定大小是一项要求,这样我们就可以在生成的NumPy数组中正确分配内存。注意:蒙太奇中的空白将被黑色像素填充。
蒙太奇形状:第二个元组,这个元组指定蒙太奇中的列数和行数。这里我们指出,我们的蒙太奇将有7列(7幅图像宽)和3行(3幅图像高)。
build_montages方法返回NumPy数组格式的蒙太奇图像列表。
如果图像列表中的图像数量超过蒙太奇_形状所能容纳的数量,则会为额外的图像创建一个新的蒙太奇。重复此过程,直到所有图像都添加到蒙太奇。此过程与在多个页面上显示搜索结果相同。

以下为原文链接:
https://www.pyimagesearch.com/2017/05/29/montages-with-opencv/