前一篇教程: 轮廓特征
下一篇教程: 轮廓:更多函数
目标
- 在这里,我们将学习提取对象的一些常用属性,例如 Solidity(坚实度)、Equivalent Diameter(等效直径)、Mask image(掩码图像)、Mean Intensity(平均强度)等。
1. 宽高比 (Aspect Ratio)
它是对象边界矩形的宽度与高度之比。
\[宽高比 = \frac{宽度}{高度}\]
let rect = cv.boundingRect(cnt);
let aspectRatio = rect.width / rect.height;
2. 范围 (Extent)
范围是轮廓面积与边界矩形面积之比。
\[范围 = \frac{对象面积}{边界矩形面积}\]
let area = cv.contourArea(cnt, false);
let rect = cv.boundingRect(cnt));
let rectArea = rect.width * rect.height;
let extent = area / rectArea;
3. 坚实度 (Solidity)
坚实度是轮廓面积与其凸包面积之比。
\[坚实度 = \frac{轮廓面积}{凸包面积}\]
let area = cv.contourArea(cnt, false);
cv.convexHull(cnt, hull, false, true);
let hullArea = cv.contourArea(hull, false);
let solidity = area / hullArea;
4. 等效直径 (Equivalent Diameter)
等效直径是面积与轮廓面积相同的圆的直径。
\[等效直径 = \sqrt{\frac{4 \times 轮廓面积}{\pi}}\]
let area = cv.contourArea(cnt, false);
let equiDiameter = Math.sqrt(4 * area / Math.PI);
5. 方向 (Orientation)
方向是对象指向的角度。以下方法也给出了主轴和次轴的长度。
let rotatedRect = cv.fitEllipse(cnt);
let angle = rotatedRect.angle;
6. 掩码和像素点 (Mask and Pixel Points)
在某些情况下,我们可能需要构成该对象的所有点。
我们使用函数:cv.transpose (src, dst)
- 参数
-
| src | 输入数组。 |
| dst | 与 src 相同类型的输出数组。 |
7. 最大值、最小值及其位置 (Maximum Value, Minimum Value and their locations)
我们使用函数:cv.minMaxLoc(src, mask)
- 参数
-
| src | 单通道输入数组。 |
| mask | 用于选择子数组的可选掩码。 |
let result = cv.minMaxLoc(src, mask);
let minVal = result.minVal;
let maxVal = result.maxVal;
let minLoc = result.minLoc;
let maxLoc = result.maxLoc;
8. 平均颜色或平均强度 (Mean Color or Mean Intensity)
在这里,我们可以找到对象的平均颜色。或者它可以是灰度模式下对象的平均强度。我们再次使用相同的掩码来执行此操作。
我们使用函数:cv.mean (src, mask)
- 参数
-
| src | 输入数组,该数组应具有 1 到 4 个通道,以便可以将结果存储在 Scalar 中。 |
| mask | 可选操作掩码。 |
let average = cv.mean(src, mask);