基于Python的Opencv入门教程(P3.让我们取出我们需要的部分)
书接上回(doge)
阵列切片和裁剪
提取“感兴趣区域”是图像处理的一项重要技术。
比如说,你正在努力识别电影中的人脸。首先,您需要运行一个人脸检测算法,以找到您正在处理的所有帧中的人脸坐标。然后,您需要提取人脸并保存或处理它们。在羞羞的铁拳找到所有包含副掌门(沈腾)的照片将是一个很好的人脸识别小项目。
现在,让我们手动提取一个副掌门(沈腾)。这可以通过阵列切片来实现。

OpenCV阵列切片允许我们轻松提取感兴趣区域(副掌门)
阵列切片显示在第20行,格式为:image[开始Y:结束Y,开始X:结束X]。这段代码获取一个副掌门,然后显示在第21行。就像上次一样,我们一直显示直到按下一个键(第26行)。
如图3所示,我们提取了沈腾的脸。在这个例子中,我实际上使用Photoshop预先确定了(x,y)坐标。
调整图像大小
调整图像大小很重要,原因有很多。首先,您可能需要调整大图像的大小以适应屏幕。对于较小的图像,图像处理速度也更快,因为要处理的像素更少。在深度学习的情况下,我们通常会调整图像大小,忽略纵横比,以便体积适合网络,而网络要求图像为正方形且具有一定的尺寸。
让我们将原始图像调整为200 x 200像素:
在第23行,我们忽略纵横比调整了图像的大小。窗口Fixed Resizing显示图像已调整大小,但由于未考虑纵横比,图像现在已扭曲。

让我们计算原始图像的纵横比,并使用它来调整图像大小,使其不会出现挤压和扭曲:
回想一下这个脚本的第9行,在那里我们提取了图像的宽度和高度。
假设我们要将600像素宽的图像调整为300像素宽,同时保持纵横比。
在第31行,我们计算新宽度与旧宽度的比率。
从那里,我们指定了新图像的尺寸dim。我们知道我们想要一幅300像素宽的图像,但我们必须用h乘以r(分别是原始高度和我们的比率)来计算高度。
将dim(我们的尺寸)输入CV2。resize函数,我们现在获得了一个名为resized的新图像,它没有失真(第32行)。
为了检查我们的工作,我们使用第33行的代码显示图像:

但是我们能让在调整尺寸时保持纵横比的过程变得更容易吗?
当然可以呀!
每次要调整图像大小时,计算纵横比都有点繁琐,因此我将代码包装在imutils中的一个函数中。
以下是如何使用imutils。调整大小:
在一行代码中,我们保留了纵横比并调整了图像的大小。
简单对吧?
您只需要提供目标宽度或目标高度作为关键字参数(第43行)。
结果如下:
