
OpenCV初心者です。AVI形式の動画を再生しながら、Kinectからの映像を表示するというWindowsフォームアプリケーションを作っています。
開発環境はVisual C++ 2010 Express、OpenCV2.3.1で、KinectはOpenNIで動かしています。
現在、どちらか一方の映像が動いているとき、もう片方の映像が止まってしまうという問題が発生しています。AVI動画もKinectからの映像も同時に動いているようにするにはどうすればよいでしょうか。
以下にソースコードを示します。
#include "stdafx.h"
#include "Form1.h"
#include <stdio.h>
#include <opencv2\opencv.hpp>
#include <XnCppWrapper.h>
using namespace oni00;
#define CONFIG_PATH "Config00.xml"
#define WIN_WIDTH 640
#define WIN_HEIGHT 480
bool capFlag = false;
IplImage* img_camera = 0;
int g_slider_position = 0;
CvCapture* g_capture = NULL;
xn::Context context;
xn::ImageGenerator image;
xn::ImageMetaData imageMD;
//フォームを表示し、動画・カメラ映像用の画面を表示する
System::Void Form1::Form1_Load(System::Object^ sender, System::EventArgs^ e){
XnStatus nRetVal = XN_STATUS_OK;
nRetVal = context.InitFromXmlFile(CONFIG_PATH, NULL);
if (nRetVal != XN_STATUS_OK) {
MessageBox::Show("error - config.xml cannnot read");
return;
}
nRetVal = context.FindExistingNode(XN_NODE_TYPE_IMAGE, image);
if(nRetVal != XN_STATUS_OK) {
MessageBox::Show("error - Image Generator");
return;
}
img_camera = cvCreateImage(cvSize(WIN_WIDTH, WIN_HEIGHT),
IPL_DEPTH_8U,
3);
cvNamedWindow("Camera View");
cvNamedWindow("Movie View", CV_WINDOW_AUTOSIZE);
}
//Kinectの映像表示のボタン。ボタンを押すことでcapFlagが切り替わり、再生できる。
System::Void Form1::buttonstart_Click(System::Object^ sender, System::EventArgs^ e){
XnStatus nRetVal = XN_STATUS_OK;
buttonstop->Focus();
capFlag = true;
while (capFlag == true) {
context.WaitOneUpdateAll(image);
image.GetMetaData(imageMD);
memcpy(img_camera->imageData, imageMD.RGB24Data(), img_camera->imageSize);
cvCvtColor(img_camera, img_camera, CV_RGB2BGR);
cvShowImage("Camera View", img_camera);
Application::DoEvents();
}
}
//カメラ映像の一時停止ボタン
System::Void Form1::buttonstop_Click(System::Object^ sender, System::EventArgs^ e){
capFlag = false;
}
//以下のコードでAVI動画を表示する。http://itdiary.hatenablog.com/entry/2013/05/17/1 …を参考にしました。動画が複数あるために以下のように改良しました。
//スライドバー操作の際のコールバックルーチン定義のための関数
void onTrackbarSlide(int pos){
cvSetCaptureProperty(
g_capture,
CV_CAP_PROP_POS_FRAMES,
pos
);
}
//動画を表示する関数
void Showmovie(){
//bool isStop = false;
int frames = (int) cvGetCaptureProperty(
g_capture,
CV_CAP_PROP_FRAME_COUNT
);
if( frames!=0 ){
cvCreateTrackbar(
"Position",
"Movie View",
&g_slider_position,
frames,
onTrackbarSlide
);
}
IplImage* frame;
while(1){
frame = cvQueryFrame(g_capture);
if(!frame) {g_slider_position = 0;};
g_slider_position++;
cvShowImage("Movie View",frame);
cvSetTrackbarPos(
"Position",
"Movie View",
g_slider_position
);
char c = cvWaitKey(33);
if(c==27) break;
else if(c==32){
c = cvWaitKey(0); //スペースキーで一時停止
if(c==27) break;
}
}
cvReleaseCapture(&g_capture);
}
//動画を表示するボタン。このボタンは複数あり、それぞれ違う動画を表示できるようになっている。
System::Void Form1::button1_Click(System::Object^ sender, System::EventArgs^ e){
g_capture = cvCreateFileCapture( "link1.avi" );
Showmovie();
}
//フォームを閉じると、他の画面も閉じる
System::Void Form1::Form1_FormClosed(
System::Object^ sender, System::Windows::Forms::FormClosedEventArgs^ e){
capFlag = false;
context.Release();
cvReleaseImage(&img_camera);
cvDestroyAllWindows();
}
コードが多くて申し訳ありませんが、よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript アップロードファイルの種類によって処理を分岐させたいのですが書き方が分からずアドバイスお願いします 4 2023/06/17 19:12
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- Perl RSSにdiv,ul classを付けたいのですがどのようにつけるのかわからないです 2 2022/03/28 01:53
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- JavaScript vertical sliderをautoplayしたい 2 2022/08/25 14:47
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- JavaScript html5に変えるとスライドショーが消えてしまった。 3 2022/03/26 19:53
- C言語・C++・C# Windows Formアプリからコンソールを呼び出して文字を出力させたい 8 2023/05/09 10:53
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
LINEで動画を送信 その後表示し...
-
Power Point の動画が止まる
-
ヤフオク説明文で直接URLを飛ば...
-
2つの動画を同時に再生する事は?
-
パソコン上で4K動画を4k非対...
-
xvideosが再生できない
-
PCの画面共有で映画を見る方法
-
fanzaについて
-
パワーポイントで動画を繰り返...
-
SayMove!で動画が再生されない。
-
スマホで撮った8Kの動画をPCで...
-
DVD再生画面の表示を消したい
-
VLC media playerでmpgの動画を...
-
xvideos.comの動画ダウンロード...
-
PowerDVDで再生したときだけエ...
-
FANZAというサイトでエッチな動...
-
Firefox 拡張機能 でYouTubeか...
-
動画ダウンロードの際の HD と ...
-
u-nextをiPhoneとテレビを繋い...
-
動画ゲッター 保存先
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
LINEで動画を送信 その後表示し...
-
Power Point の動画が止まる
-
動画がウインドウズと一緒に拡...
-
パソコンで動画再生時に画面が...
-
ヤフオク説明文で直接URLを飛ば...
-
bxsliderで動画と静止画混在の...
-
画面4枚に横長にならない様に映...
-
Access 2003で動画の再生ができ...
-
WMV形式の動画の色がおかしい
-
Linuxで動画をmplayerで再生し...
-
iphoneの動画再生を横で見るに...
-
小5女子です。 1つ相談があるの...
-
ブラウザを使えばYouTubeなどの...
-
2つの動画を同時に再生する事は?
-
LINEの動画再生についてです。 ...
-
DMMのストリーミングを保存
-
検索bingについて
-
ピアノ楽譜サイトの動画
-
動画が再生できない?
-
SayMove!が再生できない
おすすめ情報