[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 |
URL | https://hsp.moe/ |
備考 | #include "OpenCvSharpExtern32.as"
#include "OpenCvSharpExtern64.as" 使用するHSPランタイムのビット数に合わせたインクルードファイルを使用すること |
タイプ | OpenCVSharpラッパーDLL |
グループ | NativeMethods_imgproc |
対応環境 |
|
hs ファイル | hsphelp\OpenCvSharpExtern.hs |