輪郭領域のサイズで輪郭をどのようにソートできますか?そして、私はどのように最大/最小を得ることができますか?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. 輪郭(OpenCV)のピクセルを扱う?
- 7. Go/OpenCV:輪郭をフィルタする
- 8. OpenCV - 輪郭を閉じる(Java)
- 9. Android OpenCV輪郭を見つける
- 10. Java OpenCV輪郭のスキュー調整
- 11. JAVA(Android)のOpenCV描画輪郭
- 12. のJava - OpenCVのは、余分な輪郭
- 13. cのopencvの輪郭/オブジェクトの重心?
- 14. Opencv:輪郭検出、拡張、質量スケッチ
- 15. OpenCV:輪郭検出Android contourldxの問題
- 16. 内部輪郭抽出(HOLES)OpenCV
- 17. Opencv Python 2.7の輪郭検出
- 18. 輪郭の一致 - 輪郭の変位の検出
- 19. pythonを使ってopencvで輪郭を作成する
- 20. opencvを使ってAndroidで輪郭を描く
- 21. ソート方法輪郭(x、y)に応じたMatOfPointのリスト
- 22. OpenCVでジグソーパズルの1ピクセルラインの輪郭を取得する
- 23. opencvで輪郭の長さを見つける
- 24. 輪郭から点までの距離を求めるopencv C++
- 25. OpenCV Javaでエリア別に輪郭を並べ替える
- 26. OpenCV C++で輪郭の極点を見つける
- 27. java opencvで最大の輪郭を見つける方法
- 28. 輪郭線で最も長い線を描くOPENCV
- 29. OpenCVで最大の輪郭を検出する
- 30. Matplotlibの輪郭
compareContourAreasが2つの引数で定義されている場合、どのようにこの法律が有効ですか? – Zypps987