2017-08-11 33 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); 
      } 
     }