質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MFC

MFC (Microsoft Fouondation Class)とは、MicrosoftがVC++用に開発したWindows用アプリケーションのフレームワークです。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Visual Studio 2013

Microsoft Visual Studio 2013は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2012の次のバージョンです

Q&A

0回答

5779閲覧

MFCでの動画再生(OpenCVをつかって)

Gurina28

総合スコア12

MFC

MFC (Microsoft Fouondation Class)とは、MicrosoftがVC++用に開発したWindows用アプリケーションのフレームワークです。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Visual Studio 2013

Microsoft Visual Studio 2013は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2012の次のバージョンです

0グッド

0クリップ

投稿2016/12/02 14:15

編集2016/12/02 14:16

###前提・実現したいこと
OpenCVを使って取得した動画像をMFCでダイアログに表示するプログラムを作っています。
イメージ説明

非常にシンプルで、Loadボタンより再生したい動画ファイルを取得し、その下のスペースに表示後、OKボタンで再生が開始されるというものです。

###発生している問題・エラーメッセージ
以下のサイトを参考に作成したのですが、Opencvのcv::Videocaptureのopenが上手く行きません。
http://takacity.blog.fc2.com/blog-entry-96.html

常に、下記コードの「OnBnClickedButtonLoad1」でAfxMessageBox(errorDisplay)が出力される状態です。

###該当のソースコード

C++

1ImageProcess Movie1; 2void CMainDlg::OnBnClickedButtonLoad1() 3{ 4 string movieFileName = openMovieFileName(MovieFileName1); 5 6 if (!Movie1.open(movieFileName)){ 7 CString errorDisplay; 8 errorDisplay.Format(_T("読み込みエラー!\n error file name :\n %s"), movieFileName); 9 AfxMessageBox(errorDisplay); 10 } 11 else{ 12 setBitmapFromMat(Movie1.currentImg); 13 } 14 15}

C++

1string CMainDlg::openMovieFileName(CString &editBox) 2{ 3 CString filter("Movie Files (*.avi;*.wmv;*.mp4)|*.avi; *.wmv; *.mp4||"); 4 CFileDialog selDlg(TRUE, NULL, NULL, OFN_HIDEREADONLY, filter); 5 6 if (selDlg.DoModal() == IDOK) 7 { 8 editBox = selDlg.GetPathName(); 9 UpdateData(FALSE); 10 11 CStringA csTempmb(editBox.GetBuffer(0)); 12 string fileName = csTempmb.GetBuffer(0); 13 14 return fileName; 15 } 16 17 return false; 18}

C++

1void CMainDlg::setBitmapFromMat(Mat img) 2{ 3 4 CBitmap m_bmp; //画像(bitmapファイル) 5 char* ColorBuf = (char*)calloc(img.rows * img.rows * 4, sizeof(RGBQUAD)); 6 7 for (int y = 0; y < img.rows; y++) { 8 for (int x = 0; x < img.cols; x++) { 9 // Blue 10 ColorBuf[y * img.cols * 4 + x * 4 + 0] = img.data[y * img.step + x * 3 + 0]; 11 // Green 12 ColorBuf[y * img.cols * 4 + x * 4 + 1] = img.data[y * img.step + x * 3 + 1]; 13 // Red 14 ColorBuf[y * img.cols * 4 + x * 4 + 2] = img.data[y * img.step + x * 3 + 2]; 15 //Reserved 16 ColorBuf[y * img.cols * 4 + x * 4 + 3] = 0; 17 } 18 } 19 20 m_bmp.CreateBitmap(img.cols, img.rows, 1, 32, ColorBuf); 21 free(ColorBuf); 22 23 CStatic* pictbox = (CStatic*)GetDlgItem(IDC_STATIC_BMP1); 24 pictbox->SetBitmap(m_bmp); //Picture Controlに表示 25 26 return; 27 28}

C++

1bool ImageProcess::open(string fileName){ 2 3 // open movie 4 cap.open(fileName); 5 if (cap.isOpened()){ 6 return false; 7 } 8 9 cap >> currentImg; 10 11 return true; 12 13}

###試したこと
①ファイルの取得および出力は以下より問題ないことを確認しています。
・テキストボックスに表示される結果が適切。
・ImageProcess::open内でfileNameをcsvファイルで出力した結果適切。

②cap.open()の引数を"test.wmvとしてソースコード直下に該当動画を入れて見たが動画は同様にAfxMessageBoxが呼び出される。

###補足情報(言語/FW/ツール等のバージョンなど)
opencv : 2.4.10
visual studio : 2013
言語:C++

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

MasahikoHirata

2016/12/11 09:29

cap.open(fileName);’で渡している‘fileName’を確認すべきと思いますが。
MasahikoHirata

2016/12/11 09:31

この場合`fileName`はフルパスもしくはカレントですが。‘editBox = selDlg.GetPathName();‘の後、’fileName = csTempmb.GetBuffer(0);’で渡ってない予感。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問