画像の一部を抽出するためにGetSubImage
関数を実装しました。私はSetROI
,Copy
、およびResetROI
を使います。しかし、パラレルタスクが同じ画像を使用している場合には、SetROI
はパラレル化できないため、これは機能しません。OpenCV:画像の一部を抽出するための同時GetSubImage
並行して実行できる画像の部分を抽出する他の方法はありますか?
画像の一部を抽出するためにGetSubImage
関数を実装しました。私はSetROI
,Copy
、およびResetROI
を使います。しかし、パラレルタスクが同じ画像を使用している場合には、SetROI
はパラレル化できないため、これは機能しません。OpenCV:画像の一部を抽出するための同時GetSubImage
並行して実行できる画像の部分を抽出する他の方法はありますか?
マトリックスの一部を指す一時的なマトリックスヘッダーを作成することができます。次に、そのヘッダーにcopyTo()
メンバ関数を使用できます。 C++での例:
Mat GetSubImage(const Mat& source, const Rect ®ion)
{
Mat dest;
Mat roi(source, region);
roi.copyTo(dest);
return dest;
}
この方法で、データもsource
のヘッダでもないが、操作の影響を受けているので、あなたは、同時にそれを実行することができます。
最後に、画像の一部を抽出するために、この関数を使用しています。 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;
}
時間を割いて解決策を投稿していただきありがとうございます!それは精神だ!私は近代的なAPIに切り替えることを提案することができます。これはOpenCV 2.0で導入され、現在は3.1です。 – ypnos
どのAPIですか?私はこのhttps://github.com/shimat/opencvsharpを使用しています。それは私にとって非常に完全で完璧です。 –
はいOpenCVSharpには2つのAPIが付属しています。古いOpenCV 1.xと新しいOpenCV 2.x、3.x。 https://github.com/shimat/opencvsharp#usageを参照してください.CvMat、IplImageがありますか?いいえ!その例では新しいAPIが使用されているためです。 Mat ==新規、CvMat ==古い。 – ypnos
ありがとうございます。しかし、私はOpenCvSharpライブラリを使用しており、CvMatクラスにはコンストラクタがありません。 –
あなたはどういうことを言っていますか?それはすぐそこにあります:http://shimat.github.io/opencvsharp/html/bf9a14ed-6ebb-704b-2372-7e104ef77196.htm – ypnos