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を探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
LINEで動画を送信 その後表示し...
-
bxsliderで動画と静止画混在の...
-
動画がウインドウズと一緒に拡...
-
Power Point の動画が止まる
-
パソコン上で4K動画を4k非対...
-
パワーポイントで動画を繰り返...
-
this AVについて
-
グーグルドライブの動画をDVD-R...
-
PCの画面共有で映画を見る方法
-
Firefox 拡張機能 でYouTubeか...
-
dmmtvを最近使い始めたのですが...
-
iPadで、YouTubeを止めずに別の...
-
やり方教えてください
-
DVDカラオケの作成方法教えてほ...
-
YouTubeについてです。 2〜3日...
-
mp4の動画を再生するとPCが落ち...
-
コーデックが見つかりませんと...
-
マックブックでユーチューブの...
-
You tubeなどでダウンロードし...
-
ダウンロードした動画の動きに...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
LINEで動画を送信 その後表示し...
-
ヤフオク説明文で直接URLを飛ば...
-
Power Point の動画が止まる
-
動画がウインドウズと一緒に拡...
-
ブラウザを使えばYouTubeなどの...
-
パソコンで動画再生時に画面が...
-
bxsliderで動画と静止画混在の...
-
Access 2003で動画の再生ができ...
-
義兄の無神経さに困っています。
-
iphoneの動画再生を横で見るに...
-
毎日毎日ものすごい数の愛子動...
-
LINEの動画再生についてです。 ...
-
macでブラウザ上の動画を縮小再...
-
ピアノ楽譜サイトの動画
-
フェイスブック ユーチューブ動...
-
tudouの動画が見れない!
-
動画が途中で停止してしまいます。
-
動画が再生できない?
-
WMV形式の動画の色がおかしい
-
microSDカードに保存していた動...
おすすめ情報