私のプロジェクトでは、cvFindContours を使用してオブジェクトを検出します。結果を使用して、入力画像の ROI をマークしたいと思います (検出されたブロブ間の距離が高い場合は、ROI のタグ付けを繰り返したい)。
私の問題は、見つかったブロブからのいくつかの四角形が重なっているか、より大きなブロブの一部であることです。内側のブロブを削除して最小限の距離でブロブをマージするための高速なソリューションはありますか?
例えば:
cv :: Rect:のoperator&を使用して、長方形が重なっているかどうかを確認できます。
cv::Rect a(x1,y1,w1,h1);
cv::Rect b(x2,y2,w2,h2);
cv::Rect intersect = a&b; // if intersect is not empty, the rect overlaps
「最小距離」に関しては、標準のopencv関数を使用してそれを行う方法はありません。長方形間の「距離」を決定する必要があります:それらの中心間の距離(推奨されません)?彼らの国境間の距離?次に、2つの次元があることを思い出してください。あなたはそれを行うことができますが、あなたはそれを自分でコーディングしなければなりません。