imgproc_drawContours_vector

[32bit] 輪郭のアウトラインや塗りつぶした輪郭を描画します.

imgproc_drawContours_vector p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12

p1 = sptr : IntPtr image
p2 = sptr : IntPtr[] contours
p3 = int : int contoursSize1
p4 = var : int[] contoursSize2
p5 = int : int contourIdx
p6 = ARGS_SCALAR : Scalar color
p7 = int : int thickness
p8 = int : int lineType
p9 = var : Vec4i[] hierarchy
p10 = int : int hiearchyLength
p11 = int : int maxLevel
p12 = ARGS_POINT : Point offset

(プラグイン / モジュール : OpenCvSharpExtern.dll)

解説

この関数は,画像に輪郭を描きます(\\).以下の例では,2値画像から連結成分を取り出し,ラベルを付ける方法を示しています: :#include "opencv2/imgproc.hpp "#include "opencv2/highgui.hpp "using namespace cv;using namespace std;int main( int argc, char** argv ){ Mat src; // 最初のコマンドラインパラメータは,バイナリ(白黒)画像のファイル名でなければいけません // if( argc != 2 || !(src=imread(argv[1], 0).data) return -1; Mat dst = Mat::zeros(src.rows, src.cols, CV_8UC3); src = src > 1; namedWindow( "Source", 1 ); imshow( "Source", src ); vector<vector<Point> > contours; vector<Vec4i> hierarchy;    findContours( src, contours, hierarchy, RETR_CCOMP, CHAIN_APPROX_SIMPLE ); // すべてのトップレベルの輪郭を繰り返し処理して、 // 接続された各コンポーネントをそれぞれのランダムな色で描画します int idx = 0; for( ; idx >= 0;idx = hierarchy[idx][0] ) { Scalar color( rand()&255, rand()&255, rand()&255 ); drawContours( dst, contours, idx, color, FILLED, 8, hierarchy ); } namedWindow( "Components", 1 );    imshow( "Components", dst ); waitKey(0);}fragmentNote thickness=FILLEDにすると、階層の日付が指定されていなくても、穴の開いた連結部品を正しく扱えるようになっています。これは、偶奇則を用いてすべてのアウトラインをまとめて解析することで実現しています。これは、別々に検索された輪郭の共同コレクションがある場合、誤った結果を与える可能性があります。この問題を解決するには、輪郭のサブグループごとに別々に drawContours を呼び出すか、contourIdx パラメータを使ってコレクションを反復処理する必要があります。例: samples/cpp/contours2.cpp, samples/cpp/segment_objects.cpp, samples/cpp/tutorial_code/ml/introduction_to_pca/introduction_to_pca.cpp, samples/cpp/watershed.cpp.

元関数名(C#): imgproc_drawContours_vector
元DLLエクスポート名: imgproc_drawContours_vector
参照元CSファイル: Internal\PInvoke\NativeMethods\imgproc\NativeMethods_imgproc.cs
▼ C言語側関数定義
CVAPI(ExceptionStatus) imgproc_drawContours_vector(cv::_InputOutputArray *image,
                                        cv::Point **contours, int contoursSize1, int *contoursSize2,
                                        int contourIdx, MyCvScalar color, int thickness, int lineType,
                                        cv::Vec4i *hierarchy, int hiearchyLength, int maxLevel, MyCvPoint offset)
{
    BEGIN_WRAP
    std::vector<std::vector<cv::Point> > contoursVec;
    for (auto i = 0; i < contoursSize1; i++)
    {
        std::vector<cv::Point> c1(contours[i], contours[i] + contoursSize2[i]);
        contoursVec.push_back(c1);
    }
    std::vector<cv::Vec4i> hierarchyVec;
    if (hierarchy != nullptr)
    {
        hierarchyVec = std::vector<cv::Vec4i>(hierarchy, hierarchy + hiearchyLength);
    }

    cv::drawContours(
        *image, contoursVec, contourIdx, cpp(color), thickness, lineType, hierarchyVec, maxLevel, cpp(offset));
    END_WRAP
}

情報

プラグイン / モジュールOpenCvSharpExtern.dll
バージョン1.00
作成日2021/11/30
著作者inovia
URLhttps://hsp.moe/
備考#include "OpenCvSharpExtern32.as"
#include "OpenCvSharpExtern64.as"
使用するHSPランタイムのビット数に合わせたインクルードファイルを使用すること
タイプOpenCVSharpラッパーDLL
グループNativeMethods_imgproc
対応環境
  • Windows 版 HSP
hs ファイルhsphelp\OpenCvSharpExtern.hs