輪郭領域のサイズで輪郭をどのようにソートできますか?そして、私はどのように最大/最小を得ることができますか?OpenCV C++:contourAreaで輪郭をソート
9
A
答えて
28
あなたはカスタム比較関数オブジェクトを
// comparison function object
bool compareContourAreas (std::vector<cv::Point> contour1, std::vector<cv::Point> contour2) {
double i = fabs(contourArea(cv::Mat(contour1)));
double j = fabs(contourArea(cv::Mat(contour2)));
return (i < j);
}
使用std::sort
を使用することができます:C++ 11が利用可能な場合だけでラムダ関数を使用して溶液を得
[...]
// find contours
std::vector<std::vector<cv::Point> > contours;
std::vector<cv::Vec4i> hierarchy;
cv::findContours(binary_image, contours, hierarchy, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE, cv::Point(0, 0));
// sort contours
std::sort(contours.begin(), contours.end(), compareContourAreas);
// grab contours
std::vector<cv::Point> biggestContour = contours[contours.size()-1];
std::vector<cv::Point> smallestContour = contours[0];
2
を。
sort(contours.begin(), contours.end(), [](const vector<Point>& c1, const vector<Point>& c2){
return contourArea(c1, false) < contourArea(c2, false);
});
その後、輪郭が昇順にソートされているので、最大面積と1を取得するために最小の面積とcontours[contours.size()-1]
との輪郭を取得するためにcontours[0]
にアクセスすることができます。
関連する問題
- 1. OpenCV輪郭モーメント?
- 2. Cannyの輪郭を輪郭に変換するOpenCV
- 3. 注文OpenCVの輪郭
- 4. OpenCV ||輪郭類似度
- 5. 輪郭(OpenCV)のピクセルを扱う?
- 6. Android OpenCV輪郭を見つける
- 7. のJava - OpenCVのは、余分な輪郭
- 8. cのopencvの輪郭/オブジェクトの重心?
- 9. Opencv:輪郭検出、拡張、質量スケッチ
- 10. Java OpenCV輪郭のスキュー調整
- 11. Opencv Python 2.7の輪郭検出
- 12. 内部輪郭抽出(HOLES)OpenCV
- 13. 輪郭の一致 - 輪郭の変位の検出
- 14. pythonを使ってopencvで輪郭を作成する
- 15. 輪郭抽出
- 16. R - 輪郭マップ
- 17. OpenCV C++で輪郭の極点を見つける
- 18. opencvで輪郭の長さを見つける
- 19. 輪郭の重心から輪郭の周囲に線を引く方法は?
- 20. OpenCV C++/Obj-C:近くの輪郭を接続する
- 21. opencvの輪郭/オブジェクト間の距離を見つける
- 22. opencv crop輪郭内の画像の一部
- 23. PythonのOpenCV輪郭最小次元位置
- 24. ブロブ/輪郭をマージするには
- 25. MATLABの輪郭行列
- 26. matplotlib 3Dの輪郭線ラベル
- 27. 理解輪郭機能
- 28. ggplotのKNNモデルの輪郭?
- 29. Androidのビットマップの輪郭
- 30. アンドロイドで輝くテキストの輪郭。
compareContourAreasが2つの引数で定義されている場合、どのようにこの法律が有効ですか? – Zypps987