C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.74051 の関連記事表示

<< 0 >>
■74051  openCV/C++での動画ファイルの再生
□投稿者/ mako_chan3 -(2014/11/26(Wed) 13:43:52)

    分類:[C/C++] 

    お世話になります。
    oenCVで動画ファイルの取得、再生にトライしています。
    環境:VisualStudio2010 C++、openCV2.2

    ネット上のサンプルコードを試してみるのですが、動画ファイルへのアクセスのところで止まってしまいます。
    プロジェクトの構成は「ボタン」を配置、「ボタン」をクリックすると動画ファイルを取得、再生します。

    いくつかのサンプルコードを試しましたが、毎回同じところで例外が発生して止まります。
    色々と原因を探してみましたが見つかりませんでした。

    下記にコードを2種類添付しました。
    ご助言をお願いします。


    (コード1)

    // 20141126_video-capture-test_02Dlg.cpp : 実装ファイル
    //

    #include "stdafx.h"
    #include "20141126_video-capture-test_02.h"
    #include "20141126_video-capture-test_02Dlg.h"
    #include "afxdialogex.h"
    #include <stdio.h>
    #include <cv.h>
    #include <cxcore.h>
    #include <highgui.h>

    #ifdef _DEBUG
    #define new DEBUG_NEW
    #endif


    // CMy20141126_videocapturetest_02Dlg ダイアログ




    CMy20141126_videocapturetest_02Dlg::CMy20141126_videocapturetest_02Dlg(CWnd* pParent /*=NULL*/)
    : CDialogEx(CMy20141126_videocapturetest_02Dlg::IDD, pParent)
    {
    m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
    }

    void CMy20141126_videocapturetest_02Dlg::DoDataExchange(CDataExchange* pDX)
    {
    CDialogEx::DoDataExchange(pDX);
    }

    BEGIN_MESSAGE_MAP(CMy20141126_videocapturetest_02Dlg, CDialogEx)
    ON_WM_PAINT()
    ON_WM_QUERYDRAGICON()
    ON_BN_CLICKED(IDC_BUTTON1, &CMy20141126_videocapturetest_02Dlg::OnBnClickedButton1)
    END_MESSAGE_MAP()


    // CMy20141126_videocapturetest_02Dlg メッセージ ハンドラー

    BOOL CMy20141126_videocapturetest_02Dlg::OnInitDialog()
    {
    CDialogEx::OnInitDialog();

    // このダイアログのアイコンを設定します。アプリケーションのメイン ウィンドウがダイアログでない場合、
    // Framework は、この設定を自動的に行います。
    SetIcon(m_hIcon, TRUE); // 大きいアイコンの設定
    SetIcon(m_hIcon, FALSE); // 小さいアイコンの設定

    // TODO: 初期化をここに追加します。

    return TRUE; // フォーカスをコントロールに設定した場合を除き、TRUE を返します。
    }

    // ダイアログに最小化ボタンを追加する場合、アイコンを描画するための
    // 下のコードが必要です。ドキュメント/ビュー モデルを使う MFC アプリケーションの場合、
    // これは、Framework によって自動的に設定されます。

    void CMy20141126_videocapturetest_02Dlg::OnPaint()
    {
    if (IsIconic())
    {
    CPaintDC dc(this); // 描画のデバイス コンテキスト

    SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

    // クライアントの四角形領域内の中央
    int cxIcon = GetSystemMetrics(SM_CXICON);
    int cyIcon = GetSystemMetrics(SM_CYICON);
    CRect rect;
    GetClientRect(&rect);
    int x = (rect.Width() - cxIcon + 1) / 2;
    int y = (rect.Height() - cyIcon + 1) / 2;

    // アイコンの描画
    dc.DrawIcon(x, y, m_hIcon);
    }
    else
    {
    CDialogEx::OnPaint();
    }
    }

    // ユーザーが最小化したウィンドウをドラッグしているときに表示するカーソルを取得するために、
    // システムがこの関数を呼び出します。
    HCURSOR CMy20141126_videocapturetest_02Dlg::OnQueryDragIcon()
    {
    return static_cast<HCURSOR>(m_hIcon);
    }



    void CMy20141126_videocapturetest_02Dlg::OnBnClickedButton1()
    {
    // TODO: ここにコントロール通知ハンドラー コードを追加します。

    CvCapture* capture;
    IplImage* frame=NULL;

    //動画ファイル名
    char *FileName="tree.avi";

    //動画ファイルを開く
    if((capture=cvCaptureFromFile(FileName))==NULL){  ←ここで例外が発生し処理が止まってしまう。
    return;
    }

    cvNamedWindow("CaptureFromFile", CV_WINDOW_AUTOSIZE);

    while(1){
    frame=cvQueryFrame(capture);
    if(frame==NULL)
    break;

    cvShowImage("CaptureFromFile",frame);

    if(cvWaitKey(30)=='\x1b')
    break;
    }
    }


    (コード2)

    // 20141126_video-capture-test_03Dlg.cpp : 実装ファイル
    //

    #include "stdafx.h"
    #include "20141126_video-capture-test_03.h"
    #include "20141126_video-capture-test_03Dlg.h"
    #include "afxdialogex.h"
    #include "stdafx.h"
    #include "opencv2/opencv.hpp"

    #ifdef _DEBUG
    #define new DEBUG_NEW
    #endif


    // CMy20141126_videocapturetest_03Dlg ダイアログ




    CMy20141126_videocapturetest_03Dlg::CMy20141126_videocapturetest_03Dlg(CWnd* pParent /*=NULL*/)
    : CDialogEx(CMy20141126_videocapturetest_03Dlg::IDD, pParent)
    {
    m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
    }

    void CMy20141126_videocapturetest_03Dlg::DoDataExchange(CDataExchange* pDX)
    {
    CDialogEx::DoDataExchange(pDX);
    }

    BEGIN_MESSAGE_MAP(CMy20141126_videocapturetest_03Dlg, CDialogEx)
    ON_WM_PAINT()
    ON_WM_QUERYDRAGICON()
    ON_BN_CLICKED(IDC_BUTTON1, &CMy20141126_videocapturetest_03Dlg::OnBnClickedButton1)
    END_MESSAGE_MAP()


    // CMy20141126_videocapturetest_03Dlg メッセージ ハンドラー

    BOOL CMy20141126_videocapturetest_03Dlg::OnInitDialog()
    {
    CDialogEx::OnInitDialog();

    // このダイアログのアイコンを設定します。アプリケーションのメイン ウィンドウがダイアログでない場合、
    // Framework は、この設定を自動的に行います。
    SetIcon(m_hIcon, TRUE); // 大きいアイコンの設定
    SetIcon(m_hIcon, FALSE); // 小さいアイコンの設定

    // TODO: 初期化をここに追加します。

    return TRUE; // フォーカスをコントロールに設定した場合を除き、TRUE を返します。
    }

    // ダイアログに最小化ボタンを追加する場合、アイコンを描画するための
    // 下のコードが必要です。ドキュメント/ビュー モデルを使う MFC アプリケーションの場合、
    // これは、Framework によって自動的に設定されます。

    void CMy20141126_videocapturetest_03Dlg::OnPaint()
    {
    if (IsIconic())
    {
    CPaintDC dc(this); // 描画のデバイス コンテキスト

    SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

    // クライアントの四角形領域内の中央
    int cxIcon = GetSystemMetrics(SM_CXICON);
    int cyIcon = GetSystemMetrics(SM_CYICON);
    CRect rect;
    GetClientRect(&rect);
    int x = (rect.Width() - cxIcon + 1) / 2;
    int y = (rect.Height() - cyIcon + 1) / 2;

    // アイコンの描画
    dc.DrawIcon(x, y, m_hIcon);
    }
    else
    {
    CDialogEx::OnPaint();
    }
    }

    // ユーザーが最小化したウィンドウをドラッグしているときに表示するカーソルを取得するために、
    // システムがこの関数を呼び出します。
    HCURSOR CMy20141126_videocapturetest_03Dlg::OnQueryDragIcon()
    {
    return static_cast<HCURSOR>(m_hIcon);
    }



    void CMy20141126_videocapturetest_03Dlg::OnBnClickedButton1()
    {
    // TODO: ここにコントロール通知ハンドラー コードを追加します。

    //ビデオファイルのオープンとビデオキャプチャクラスのインスタンスの生成
    cv::VideoCapture cap("tree.avi");  ←ここで例外が発生し処理が止まってしまう。

    //ウインドウの生成
    cv::namedWindow("image",CV_WINDOW_AUTOSIZE);

    while(true){
    cv::Mat Img;

    //新しいフレームを取得する
    cap >> Img;

    //フレームが空?
    if(Img.empty())
    break;

    //ウインドウに表示
    cv::imshow("image",Img);

    //イベント待ち。ウインドウに表示させる場合はイベント待ちが必要
    cv::waitKey(30);
    }
    //return;
    }



親記事 /過去ログ124より / 関連記事表示
削除チェック/

■74055  Re[1]: openCV/C++での動画ファイルの再生
□投稿者/ とっちゃん -(2014/11/26(Wed) 16:39:07)
>
    No74051 (mako_chan3 さん) に返信

    > ネット上のサンプルコードを試してみるのですが、動画ファイルへのアクセスのところで止まってしまいます。
    > プロジェクトの構成は「ボタン」を配置、「ボタン」をクリックすると動画ファイルを取得、再生します。
    >
    > いくつかのサンプルコードを試しましたが、毎回同じところで例外が発生して止まります。
    > 色々と原因を探してみましたが見つかりませんでした。
    >

    <<該当部分以外のソース省略>>
    > //ビデオファイルのオープンとビデオキャプチャクラスのインスタンスの生成
    > cv::VideoCapture cap("tree.avi");  ←ここで例外が発生し処理が止まってしまう。
    >
    例外発生は、ここですよね?
    例外の詳細は確認しましたか?

    例外が発生する、エラーが発生するという場合まずはそのエラーや例外の詳細を確認しましょう。
    例外が発生したのであれば、どのような例外が発生し、その中に含まれる情報には何があるのかを
    まず確認しましょう。

    そのうえで、その例外の内容も質問文に記載して、どうすればいいかを質問すると
    より具体的にどうすればいいという回答が得られると思います。
記事No.74051 のレス /過去ログ124より / 関連記事表示
削除チェック/

■74059  Re[2]: openCV/C++での動画ファイルの再生
□投稿者/ mako_chan3 -(2014/11/27(Thu) 07:41:11)
    No74055 (とっちゃん さん) に返信
    > ■No74051 (mako_chan3 さん) に返信
    >
    >>ネット上のサンプルコードを試してみるのですが、動画ファイルへのアクセスのところで止まってしまいます。
    >>プロジェクトの構成は「ボタン」を配置、「ボタン」をクリックすると動画ファイルを取得、再生します。
    >>
    >>いくつかのサンプルコードを試しましたが、毎回同じところで例外が発生して止まります。
    >>色々と原因を探してみましたが見つかりませんでした。
    >>
    >
    > <<該当部分以外のソース省略>>
    >> //ビデオファイルのオープンとビデオキャプチャクラスのインスタンスの生成
    >> cv::VideoCapture cap("tree.avi");  ←ここで例外が発生し処理が止まってしまう。
    >>
    > 例外発生は、ここですよね?
    > 例外の詳細は確認しましたか?
    >
    > 例外が発生する、エラーが発生するという場合まずはそのエラーや例外の詳細を確認しましょう。
    > 例外が発生したのであれば、どのような例外が発生し、その中に含まれる情報には何があるのかを
    > まず確認しましょう。
    >
    > そのうえで、その例外の内容も質問文に記載して、どうすればいいかを質問すると
    > より具体的にどうすればいいという回答が得られると思います。
    >

    ご助言ありがとうございます。
    エラー発生時に表示されたコメントは下記の通りです。
    「20141126_video-capture-test_02.exe の 0x00905a4d でハンドルされていない例外が発生しました: 0xC0000005: Access violation」
    正直これを見ても原因が分かりづらかったため、最初の質問では添付しませんでした。

    また、基本的な問題としてこの2つの記述自体は正しいのでしょうか。

    宜しくお願いいたします。
記事No.74051 のレス /過去ログ124より / 関連記事表示
削除チェック/

■74061  Re[3]: openCV/C++での動画ファイルの再生
□投稿者/ とっちゃん -(2014/11/27(Thu) 11:03:34)
>
    No74059 (mako_chan3 さん) に返信
    > ご助言ありがとうございます。
    > エラー発生時に表示されたコメントは下記の通りです。
    > 「20141126_video-capture-test_02.exe の 0x00905a4d でハンドルされていない例外が発生しました: 0xC0000005: Access violation」
    > 正直これを見ても原因が分かりづらかったため、最初の質問では添付しませんでした。
    >
    ソースコードを見ただけでは、この例外が発生することは誰にも突き止められないと思います。


    > また、基本的な問題としてこの2つの記述自体は正しいのでしょうか。
    >
    現状ではアクセス違反が発生していますので、正しいとは言えないと思います。
    原因がわからないので、それがプログラムソースが正しくないと言い切れるものなのか?
    については分かりません。

    ひとまず、tree.avi ファイルをフルパス指定してみるとかを試してみると状況が変わるかもしれませんよ。

記事No.74051 のレス /過去ログ124より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -