前のチュートリアル: 輪郭の特徴
次のチュートリアル: 輪郭 : その他の関数
目的
- ここでは、Solidity、等価直径(Equivalent Diameter)、マスク画像、平均輝度(Mean Intensity)など、オブジェクトのよく使われるプロパティの抽出方法を学ぶ。
1. アスペクト比 (Aspect Ratio)
物体のバウンディング矩形の幅と高さの比である。
\[Aspect \; Ratio = \frac{Width}{Height}\]
let rect = cv.boundingRect(cnt);
let aspectRatio = rect.width / rect.height;
2. 占有率 (Extent)
Extent は輪郭の面積とバウンディング矩形の面積の比である。
\[Extent = \frac{Object \; Area}{Bounding \; Rectangle \; Area}\]
let area = cv.contourArea(cnt, false);
let rect = cv.boundingRect(cnt));
let rectArea = rect.width * rect.height;
let extent = area / rectArea;
3. Solidity
Solidity は輪郭の面積とその凸包の面積の比である。
\[Solidity = \frac{Contour \; Area}{Convex \; Hull \; Area}\]
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)
Equivalent Diameter は、輪郭の面積と同じ面積を持つ円の直径である。
\[Equivalent \; Diameter = \sqrt{\frac{4 \times Contour \; Area}{\pi}}\]
let area = cv.contourArea(cnt, false);
let equiDiameter = Math.sqrt(4 * area / Math.PI);
5. 向き (Orientation)
Orientation は物体が向いている角度である。次のメソッドは主軸 (Major Axis) と副軸 (Minor Axis) の長さも返す。
let rotatedRect = cv.fitEllipse(cnt);
let angle = rotatedRect.angle;
6. マスクとピクセル点
場合によっては、そのオブジェクトを構成するすべての点が必要になることがある。
次の関数を使用する: cv.transpose (src, dst)
- 引数
-
| src | 入力配列。 |
| dst | srcと同じ型の出力配列。 |
7. 最大値、最小値とその位置
次の関数を使用する: 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. 平均色または平均輝度
ここでは、物体の平均色を求めることができる。あるいはグレースケールモードでの物体の平均輝度でもよい。これにも同じマスクを使う。
次の関数を使用する: cv.mean (src, mask)
- 引数
-
| src | 結果を Scalar に格納できるよう、1~4 チャンネルを持つべき入力配列。 |
| mask | 省略可能な演算マスク。 |
let average = cv.mean(src, mask);