42

接続されたコンポーネントを見つけて、それらに対していくつかのタスクを実行できる OpenCV 関数を探しています (オブジェクト内のピクセル数、輪郭、ピクセルのリストなどを取得するなど)。

MatLab の regionprops に似た OpenCV (C++) の機能はありますか?

4

6 に答える 6

28

バージョン 3.0 から、OpenCV にconnectedComponents機能が追加されました。

于 2014-09-08T11:23:08.900 に答える
22

cvFindContours関数を見てください。非常に用途が広く、内部と外部の両方の輪郭を検出し、結果をさまざまな形式 (フラット リストとツリー構造など) で返すことができます。輪郭を取得したら、 cvContourAreaなどの関数を使用して、特定の輪郭に対応する接続​​コンポーネントの基本的なプロパティを決定できます。

(上記で説明した古い C スタイルのインターフェイスではなく) 新しい C++ インターフェイスを使用する場合は、関数名が似ています。

于 2012-10-03T04:36:21.123 に答える
3

OpenCV を使用する外部ライブラリを使用してもかまわない場合は、cvBlobsLibを使用してそれを行うことができます。

バイナリ イメージの連結成分ラベリングを実行するためのライブラリ ( regionprops Matlab function に似ています)。また、抽出されたブロブから結果を操作、フィルタリング、および抽出する機能も提供します。詳細については、機能のセクションを参照してください。

于 2012-10-02T10:28:35.020 に答える
1

cv::connectedComponentsWithStats()関数を使用できます。

ここに例があります。

    // ...
    cv::Mat labels, stats, centroids;
    int connectivity = 8; // or 4
    int label_count = cv::connectedComponentsWithStats(src, labels, stats, centroids, connectivity);
    for (int i = 0; i < label_count; i++)
    {
        int x = stats.at<int>(i, cv::CC_STAT_LEFT);
        int y = stats.at<int>(i, cv::CC_STAT_TOP);
        int w = stats.at<int>(i, cv::CC_STAT_WIDTH);
        int h = stats.at<int>(i, cv::CC_STAT_HEIGHT);
        int area = stats.at<int>(i, cv::CC_STAT_AREA);
        double cx = centroids.at<double>(i, 0);
        double cy = centroids.at<double>(i, 1);

        // ...
    }
于 2019-04-09T03:15:31.217 に答える