2016-09-06 17 views
3

画像の一部を抽出するためにGetSubImage関数を実装しました。私はSetROI,Copy、およびResetROIを使います。しかし、パラレルタスクが同じ画像を使用している場合には、SetROIはパラレル化できないため、これは機能しません。OpenCV:画像の一部を抽出するための同時GetSubImage

並行して実行できる画像の部分を抽出する他の方法はありますか?

答えて

1

マトリックスの一部を指す一時的なマトリックスヘッダーを作成することができます。次に、そのヘッダーにcopyTo()メンバ関数を使用できます。 C++での例:

Mat GetSubImage(const Mat& source, const Rect &region) 
{ 
    Mat dest; 
    Mat roi(source, region); 
    roi.copyTo(dest); 
    return dest; 
} 

この方法で、データもsourceのヘッダでもないが、操作の影響を受けているので、あなたは、同時にそれを実行することができます。

+0

ありがとうございます。しかし、私はOpenCvSharpライブラリを使用しており、CvMatクラスにはコンストラクタがありません。 –

+0

あなたはどういうことを言っていますか?それはすぐそこにあります:http://shimat.github.io/opencvsharp/html/bf9a14ed-6ebb-704b-2372-7e104ef77196.htm – ypnos

1

最後に、画像の一部を抽出するために、この関数を使用しています。 C#およびOpenCVSharpラッパーで使用されます。

static public IplImage GetSubImage(IplImage ipl, CvRect r) 
    { 
     CvMat submat; 
     CvMat mat = ipl.GetSubRect(out submat, r); 
     IplImage i = new IplImage(r.Width, r.Height, ipl.Depth, ipl.NChannels); 
     Cv.Copy(mat, i); 

     mat.Dispose(); 
     submat.Dispose();   

     return i; 
    } 
+0

時間を割いて解決策を投稿していただきありがとうございます!それは精神だ!私は近代的なAPIに切り替えることを提案することができます。これはOpenCV 2.0で導入され、現在は3.1です。 – ypnos

+0

どのAPIですか?私はこのhttps://github.com/shimat/opencvsharpを使用しています。それは私にとって非常に完全で完璧です。 –

+0

はいOpenCVSharpには2つのAPIが付属しています。古いOpenCV 1.xと新しいOpenCV 2.x、3.x。 https://github.com/shimat/opencvsharp#usageを参照してください.CvMat、IplImageがありますか?いいえ!その例では新しいAPIが使用されているためです。 Mat ==新規、CvMat ==古い。 – ypnos

関連する問題