cv2.findContours
とcv2.minAreaRect
で見つかったオブジェクトと回転した長方形のバイナリイメージがあります。イメージは[0; 1]に正規化されます 境界矩形内の非ゼロ領域を数える最も効率的な方法は何ですか?領域回転矩形の非ゼロピクセルをカウントする
1
A
答えて
2
- 元の画像と同じ大きさを持つ新しいゼロ値のマットを作成します。
- 回転した矩形を(RotatedRectの頂点を使用してfillConvexPolyに)描画します。
- Bitwise_andあなたのオリジナルマスク
- と、この画像はあなたの回転長方形のバウンディングボックスを持っているので、あなたはまた、画像のROIの前の手順を適用することができる結果画像
にfindnonzero関数を適用します。
2
Humam Helfawiの答えによると、私は少しのステップを提案チューニングされてきたので、次のコードは、私が必要なものをやっているようだ:
rectangles = [(cv2.minAreaRect(cnt)) for cnt in contours]
for rect in rectangles:
rect = cv2.boxPoints(rect)
rect = np.int0(rect)
coords = cv2.boundingRect(rect)
rect[:,0] = rect[:,0] - coords[0]
rect[:,1] = rect[:,1] - coords[1]
area = cv2.contourArea(rect)
zeros = np.zeros((coords[3], coords[2]), np.uint8)
cv2.fillConvexPoly(zeros, rect, 255)
im = greyscale[coords[1]:coords[1]+coords[3],
coords[0]:coords[0]+coords[2]]
print(np.sum(cv2.bitwise_and(zeros,im))/255)
1
contours
は点のリストです。この形状を同じサイズの空のバイナリイメージにcv2.fillConvexPoly
で塗りつぶしてから、cv2.countNonZero
またはnumpy.count_nonzero
を使用して占有ピクセル数を取得できます。
関連する問題
- 1. カーソルれる矩形領域
- 2. sierpinskiカーペット - 矩形の領域
- 3. 非矩形の画像領域にスキマージを使用する
- 4. 円と矩形の交点の領域
- 5. Emacsの矩形領域の除去
- 6. Excelで矩形領域を選択
- 7. OpenGL 2D矩形領域のクリッピング
- 8. Python/Pygameの矩形回転
- 9. 矩形座標回転
- 10. 矩形を中心に回転する
- 11. スケーリングと形状の回転(矩形)
- 12. cv :: Matの矩形領域のディープコピーを作成するには?
- 13. 球の表面に矩形領域をプロットする
- 14. PIL画像の矩形領域を消去する
- 15. デスクトップ上の領域矩形を選択する
- 16. 画面上で矩形を回転
- 17. 回転した矩形を描く
- 18. 線を描く矩形領域によるCAShapeLayer層の色
- 19. 多角形の領域 - 時計回り
- 20. 衝突検出回転矩形
- 21. 2つの矩形がある場合、重なり領域を表す別の矩形を返します。
- 22. 回転矩形を小さな矩形に分割する方法、元の大きな矩形を維持するために回転矩形を回転させる方法はありますか?
- 23. 回転する矩形の角を取得する
- 24. ドラッグ中に矩形領域をハイライト表示
- 25. 点の周りに矩形を回転する
- 26. PIL内のすべての非透明領域のすべての境界矩形を見つける
- 27. 回転イメージ領域を取得する方法は?
- 28. JavaFXキャンバスの領域をズームインして回転させる
- 29. Cocos2d-x指定された矩形領域のスプライトを削除する
- 30. バウンディングボックスに合わせて回転した矩形をスケールする
パフォーマンスがさらに必要な場合は、描画の代わりにピクセルを数えるdrawContoursコードを使用します。 – Micka