2计算轮廓大小_「干货」如何使用OpenCV测量图像中物体的尺寸大小

2369213308e1679c0d459e8c99135871.gif

首先,您需要知道类似于比例的概念称为每度量比的像素(pixels per metric ratio)。

近似含义是每个单位指标中包含的像素数。例如,图表上的1厘米包含100张图像。

实际上,相当于引用对象的作用,例如已知地图上的引用材质,我们可以使用此引用对象将其转换为地图上其他对象的大小。

引用对象需要具有两个重要属性:

  • 属性#1:我们应该以可测量的单位(例如毫米,英寸等)知道该对象尺寸(在宽度或高度方面)。
  • 属性#2:我们应该能够在图像中轻松找到这个参考对象,或者根据对象的 位置(例如参考对象总是放在图像的左上角),或者通过外观(如是独特的颜色或形状,独特且与图像中的所有其他物体不同)。在任何一种情况下,我们的参考应该 以某种方式唯一可识别

我们应该能够轻松地在图像中找到参考对象,无论是基于对象的位置(例如,参考对象总是放置在图像的左上角)还是通过外观(例如,独特的颜色或形状,与图像不同)其他物品)。在任何一种情况下,我们的参考应该以某种方式唯一可识别。

在下面的示例中,我们将使用美国硬币作为参考对象。在所有示例中,确保它始终是图像中最左侧的对象。

324e5676389540db1896f4cf0a42c34b.png

我们将使用美国四分之一作为参考对象,并确保它始终作为图像中最左侧的对象放置,使我们可以通过基于其位置对轮廓进行排序来轻松提取它。

通过保证四分之一是最左边的对象,我们可以从左到右对对象轮廓进行排序,抓住四分之一(它将始终是排序列表中的第一个轮廓),并使用它来定义 pixel_per_metric,我们定义为:

pixels_per_metric = object_width / know_width

美国四分之一的 已知宽度为0.955英寸。现在,假设我们的 object_width(以像素为单位)计算为150像素宽(基于其关联的边界框)。

因此 pixels_per_metric是:

pixels_per_metric = 150px / 0.955in = 157px

因此暗示在我们的图像中每0.955英寸大约有157个像素。使用此比率,我们可以计算图像中对象的大小。

用计算机视觉测量物体的大小

现在我们了解“每度量像素数”比率,我们可以实现用于测量图像中对象大小的Python驱动程序脚本。

打开一个新文件,将其命名为 object_size 。py ,并插入以下代码:

# import the necessary packagesfrom scipy.spatial import distance as distfrom imutils import perspectivefrom imutils import contoursimport numpy as npimport argparseimport imutilsimport cv2 def midpoint(ptA, ptB): return ((ptA[0] + ptB[0]) * 0.5, (ptA[1] + ptB[1]) * 0.5) # construct the argument parse and parse the argumentsap = argparse.ArgumentParser()ap.add_argument("-i

版权声明:本文为weixin_30135925原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。