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

基于Python的Opencv入门教程(P3.让我们取出我们需要的部分)

2022-01-08 17:19 作者:闲予1217  | 我要投稿

书接上回(doge)

阵列切片和裁剪

提取“感兴趣区域”是图像处理的一项重要技术。

比如说,你正在努力识别电影中的人脸。首先,您需要运行一个人脸检测算法,以找到您正在处理的所有帧中的人脸坐标。然后,您需要提取人脸并保存或处理它们。在羞羞的铁拳找到所有包含副掌门(沈腾)的照片将是一个很好的人脸识别小项目。

现在,让我们手动提取一个副掌门(沈腾)。这可以通过阵列切片来实现。


OpenCV阵列切片允许我们轻松提取感兴趣区域(副掌门)

阵列切片显示在第20行,格式为:image[开始Y:结束Y,开始X:结束X]。这段代码获取一个副掌门,然后显示在第21行。就像上次一样,我们一直显示直到按下一个键(第26行)。

如图3所示,我们提取了沈腾的脸。在这个例子中,我实际上使用Photoshop预先确定了(x,y)坐标。

调整图像大小

调整图像大小很重要,原因有很多。首先,您可能需要调整大图像的大小以适应屏幕。对于较小的图像,图像处理速度也更快,因为要处理的像素更少。在深度学习的情况下,我们通常会调整图像大小,忽略纵横比,以便体积适合网络,而网络要求图像为正方形且具有一定的尺寸。

让我们将原始图像调整为200 x 200像素:

在第23行,我们忽略纵横比调整了图像的大小。窗口Fixed Resizing显示图像已调整大小,但由于未考虑纵横比,图像现在已扭曲。

可以使用CV2使用OpenCV和Python调整图像大小。调整大小,但纵横比不会自动保留。

让我们计算原始图像的纵横比,并使用它来调整图像大小,使其不会出现挤压和扭曲:

回想一下这个脚本的第9行,在那里我们提取了图像的宽度和高度。

假设我们要将600像素宽的图像调整为300像素宽,同时保持纵横比。

在第31行,我们计算新宽度与旧宽度的比率。

从那里,我们指定了新图像的尺寸dim。我们知道我们想要一幅300像素宽的图像,但我们必须用h乘以r(分别是原始高度和我们的比率)来计算高度。

将dim(我们的尺寸)输入CV2。resize函数,我们现在获得了一个名为resized的新图像,它没有失真(第32行)。

为了检查我们的工作,我们使用第33行的代码显示图像:

使用OpenCV在保持纵横比的同时调整图像大小是一个三步过程:(1)提取图像尺寸,(2)计算纵横比,(3)沿一个尺寸调整图像大小(CV2.resize),并将另一个尺寸乘以纵横比。请参见下一张图了解更简单的方法。

但是我们能让在调整尺寸时保持纵横比的过程变得更容易吗?

当然可以呀!

每次要调整图像大小时,计算纵横比都有点繁琐,因此我将代码包装在imutils中的一个函数中。

以下是如何使用imutils。调整大小:

在一行代码中,我们保留了纵横比并调整了图像的大小。

简单对吧?

您只需要提供目标宽度或目标高度作为关键字参数(第43行)。

结果如下:

如果您想在使用OpenCV和Python调整图像大小时保持纵横比,只需使用imutils即可。调整大小。现在,您的图像不会像上上张图所示那样冒被“挤压”的风险。


基于Python的Opencv入门教程(P3.让我们取出我们需要的部分)的评论 (共 条)

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