opencv を使用して c++ で拡張問題に取り組んでいます。私は駐車場のビデオフレームをキャプチャしました。最高のブロブを取得するために、これを思い付きました。
- 浸食 (5x5 カーネル長方形)、3 回の繰り返し
- Dilation GRADIENT (y 軸に沿った色のグラデーションのようなものと考えてください)
それで、これを機能させるために私は何をしましたか?最初に、2 つのポイント (x,y) と、それらのポイントでの 2 つの適切な拡張カーネルサイズを知る必要がありました。この情報を使用して、画像全体でこれらの値を補間および推定できます。そこで、これらのパラメーターから ROI (サイズと拡張カーネルサイズ) を計算しました。したがって、各 ROI には、膨張に使用される独自の事前定義されたカーネルサイズがあります。2 つの連続する ROI (opencv の四角形) の間にスペースがないことに注意してください。すべて正常に動作していますが、2 つの副作用があります。
- ブロブの側面に膨らみがあります。黒い線は ROI の境界線です。 バルジ画像
- メインのブロブから「切り離された」ブロブ。これらは実際には切り取られていませんが、上のブロブの 1 つの下の ROI は、分離されたブロブに拡張します (上の ROI からピクセル情報を取得すると思います)。それは 1 つの巨大なブロブである必要があります。そこにいるべきではないブロブ画像
ROI のサイズを変更するためにあらゆることを試し、その間にスペースを残しましたが、2 つの分離された ROI の間のブロブが拡張されないという欠点があります。
だから私の質問は:
- それらの副作用の正確な原因は何ですか?
- それらをなくすにはどうすればよいですか?
編集
だから私は私の解決策を見つけました: opencv dilate 関数を呼び出すとき、同じ cv::Mat を宛先イメージとして使用できるかどうかを確認する必要があります。そうでない場合は、元の画像と新しい画像の一部を使用することになります。だから私がしなければならなかったのは、宛先 cv::Mat を含めることだけでした。