2017-08-11 3 views
-1

私はstd::vectorcv::Point2fの値を持っています。 私は現在のマウスの位置であるPoint2fを持っています。OpenCv、マウスクリックがPoint2fに近いかどうかを確認しますか?

cv::Point2f mousePnt; 
std::vector<cv::Point2f> maskPnts; 

私は現在のマウスクリックポイントは、ベクターに含まれているかどうかを確認する機能を持っている、そしてもしそうなら、それを削除します。

if (std::find(maskPnts.begin(), maskPnts.end(), mousePnt) != maskPnts.end()) 
     { 
      std::cout << "found pnt: " << mousePnt << std::endl; 
      maskPnts.erase(std::remove(maskPnts.begin(), maskPnts.end(), mousePnt), maskPnts.end()); 
     } 

私がやりたい何のマージンを追加することですこのエラー。たとえば、マウスのクリックが既存の値の20ピクセル以内にある場合、その既存の値はベクトルから削除されます。

どうすればいいですか?

ありがとうございます。

+0

なぜ単純な(サークルベースの)計算をしないのですか? – user0042

+0

マウスをクリックして内側を検索すると円が作成されますか? – anti

+0

ええと、トレランスはベクトル右に適用する必要がありますか?私は急いでここに考えていたかもしれない。しかし、とにかく、マウスのクリック点の周りの円内の一致するベクトル点をチェックすることも同様に機能するはずです。各ポイントの – user0042

答えて

0

ありがとうございます。上記のコメントに基づいて、私はこの機能が働いています:

for (int p = 0; p < maskPnts.size(); p++) 
     { 
      if (std::pow(sqrt(mousePnt.x - maskPnts[p].x),2) + std::pow((mousePnt.y - maskPnts[p].y),2) <= 20) 
      { 
       maskPnts.erase(maskPnts.begin() + p); 
      } 
     } 
関連する問題