表題の通りなのですがdirectshowで動画を再生するってのは割と簡単で
https://docs.microsoft.com/en-us/windows/desktop/directshow/how-to-play-a-file
この通りやればできます。
C++
1#include <dshow.h> 2void main(void) 3{ 4 IGraphBuilder *pGraph = NULL; 5 IMediaControl *pControl = NULL; 6 IMediaEvent *pEvent = NULL; 7 8 // Initialize the COM library. 9 HRESULT hr = CoInitialize(NULL); 10 if (FAILED(hr)) 11 { 12 printf("ERROR - Could not initialize COM library"); 13 return; 14 } 15 16 // Create the filter graph manager and query for interfaces. 17 hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, 18 IID_IGraphBuilder, (void **)&pGraph); 19 if (FAILED(hr)) 20 { 21 printf("ERROR - Could not create the Filter Graph Manager."); 22 return; 23 } 24 25 hr = pGraph->QueryInterface(IID_IMediaControl, (void **)&pControl); 26 hr = pGraph->QueryInterface(IID_IMediaEvent, (void **)&pEvent); 27 28 // Build the graph. IMPORTANT: Change this string to a file on your system. 29 hr = pGraph->RenderFile(L"C:\Example.avi", NULL); 30 if (SUCCEEDED(hr)) 31 { 32 // Run the graph. 33 hr = pControl->Run(); 34 if (SUCCEEDED(hr)) 35 { 36 // Wait for completion. 37 long evCode; 38 pEvent->WaitForCompletion(INFINITE, &evCode); 39 40 // Note: Do not use INFINITE in a real application, because it 41 // can block indefinitely. 42 } 43 } 44 pControl->Release(); 45 pEvent->Release(); 46 pGraph->Release(); 47 CoUninitialize(); 48}
問題はこの表示画像ににOpenCVでEffectをかけたいのですがやり方が全く分かりません。
CTransformfilter
というものを使ってやるってのはわかったのですがそのやり方が詳しくわかっている人がもしいたらお教えください。
COMのあたりに私あまり詳しくないので、私がわかったのはQueryInterfaceを既存のinterfaceにかけて自家製のクラスに誘導してそこでtransformすればいいらしいってことだけです。
どのようにして自家製のクラスに誘導していくのか全く分かりませんでした。
分かる人はお教えいただければありがたいと思います。
素直にDLLを作ってそこで変換しないといけないってことを言っているのか?ってのもよくわかりませんでした。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。