OpenCVSharpで、動画の前後フレームに動きがあった個所を検出するOpticalFlow関連の関数を呼び出そうとして、
以下のコードを作成しています。
C#
1using System; 2using System.Collections.Generic; 3using System.Linq; 4using System.Text; 5using System.Threading.Tasks; 6using OpenCvSharp; 7using OpenCvSharp.CPlusPlus; 8using OpenCvSharp.Extensions; 9using OpenCvSharp.CPlusPlus.Gpu; 10 11namespace OpenCVConsole 12{ 13 class Program 14 { 15 static void Main(string[] args) 16 { 17 // 再生する動画指定 18 CvCapture cap = new CvCapture(@"test.mp4"); 19 20 // OpticalFlowの計算オブジェクトを作成 21 DenseOpticalFlowExt opticalFlow = Cv2.CreateOptFlow_Farneback_GPU(); 22 23 Mat prev = null; 24 Mat curr = null; 25 26 Mat dst = new Mat(); 27 28 while(true) 29 { 30 // 1フレーム取得 31 IplImage frame = cap.QueryFrame(); 32 33 if (frame == null) 34 { 35 // 動画の最後までいったら終了 36 break; 37 } 38 39 // Mat型に変換 40 curr = new Mat(frame); 41 42 if (prev != null) 43 { 44 GpuMat gpuCurr = new GpuMat(curr); 45 GpuMat gpuPrev = new GpuMat(prev); 46 GpuMat gpuDst = new GpuMat(dst); 47 48 // OpticalFlow計算 49 opticalFlow.Calc(gpuPrev, gpuCurr, gpuDst); 50 51 // 値取得 52 gpuDst.Download(dst); 53 54 Cv2.ImShow("処理結果", dst); 55 } 56 57 // 前回フレーム更新 58 prev = new Mat(curr); 59 } 60 61 } 62 } 63} 64
CreateOptFlow_Farneback_GPUで、CUDAを使用したOpticalFlow計算用のオブジェクトを作成し、計算しようとしているのですが、
実行すると「The library is compiled without CUDA support」とエラーが表示されます。
調べてみたところ、参照しているOpenCVのライブラリで、CUDAを使用するフラグ「WITH_CUDA」がONになっていないようです。
OpenCVSharpは、nugetでインストールしました。
ただ、OpenCVSharpはOpenCVをラッパしたものなので、この「WITH_CUDA」をONにすることはできないのでしょうか?
OpenCVSharp上で「WITH_CUDA」をONにする方法が分かる方がおられましたら、宜しくお願い致します。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/04/14 14:53