ダイアログボックスを表示するプログラムと、カメラ画像を表示するプログラムを結合したいのですがうまくいきません。2つのプログラムを記載しておきますので、よろしかったら教えてください。
普通にダイアログボックスとカメラ画像CaptureとOutputがぞれぞれ表示されるようになっていればかまいません。
カメラ画像を表示するプログラムはURLのページにカメラ利用の基本形として記載されています。
よろしくお願いします。
カメラ画像表示プログラム
#include <stdio.h>
#include <cv.h>
#include <highgui.h>
int main(int argc, char** argv)
{
int key;
CvCapture* capture = NULL;
IplImage* captureImage = NULL;
IplImage* outputImage = NULL;
if(NULL==(capture = cvCaptureFromCAM(-1)))
{
printf("カメラが見つかりません");
return -1;
}
char* captureWindow = "Capture";
char* outputWindow = "Output";
cvNamedWindow(captureWindow, CV_WINDOW_AUTOSIZE);
cvNamedWindow(outputWindow, CV_WINDOW_AUTOSIZE);
while(1)
{
captureImage = cvQueryFrame(capture);
outputImage = cvCloneImage(captureImage);
/*
captureImageを画像処理して,その結果をoutputImageに描くような画像処理をここに書く
*/
cvShowImage(captureWindow, captureImage);
cvShowImage(outputWindow, outputImage);
cvReleaseImage(&outputImage);
key = cvWaitKey(1);
if (key == 0x1b)
{
break;
}
}
cvReleaseCapture(&capture);
cvDestroyWindow(captureWindow);
cvDestroyWindow(outputWindow);
return 0;
}
ダイアログボックスのプログラム
(このプログラムはまだ完成していないので変なところが多々あると思います)
#include "windows.h"
#include "resource.h"
// 関数のプロトタイプ宣言
BOOL CALLBACK DlgWndProc(HWND, UINT, WPARAM, LPARAM);
// エントリポイント
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow )
{
//ダイアログボックスを表示します
DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, (DLGPROC)DlgWndProc);
//戻り値を返します
return 0;
}
// (ダイアログボックス)ウインドウプロシージャ
BOOL CALLBACK DlgWndProc(HWND hWnd,
UINT message,
WPARAM wParam,
LPARAM lParam)
{
TCHAR sBuff[80];
int a, b, c, d, e, f, g, h, i;
float fxyz, lxyz;
static int ;
// メッセージの種類に応じて処理を分岐します。
switch (message)
{
case WM_INITDIALOG:
// ダイアログボックスが作成されたときの処理
c = 0;
return TRUE;
case WM_COMMAND:
// ボタンが押されたときの処理
switch (LOWORD(wParam))
{
case IDC_BUTTON7:
// [計算実行]ボタン
GetWindowText(GetDlgItem(hWnd,IDC_EDIT1), sBuff, 79);
a = atoi(sBuff);
GetWindowText(GetDlgItem(hWnd,IDC_EDIT2), sBuff, 79);
b = atoi(sBuff);
GetWindowText(GetDlgItem(hWnd,IDC_EDIT3), sBuff, 79);
c = a + b;
wsprintf(sBuff, "%d", c);
SetWindowText(GetDlgItem(hWnd,IDC_EDIT10), sBuff);
c = a + b;
wsprintf(sBuff, "%d", c);
SetWindowText(GetDlgItem(hWnd,IDC_EDIT11), sBuff);
c = a + b;
wsprintf(sBuff, "%d", c);
SetWindowText(GetDlgItem(hWnd,IDC_EDIT12), sBuff);
return TRUE;
case IDC_BUTTON8:
// [閉じる]ボタン
SendMessage(GetParent(hWnd), WM_COMMAND, wParam, c);
EndDialog(hWnd, 0);
return TRUE;
default:
return FALSE;
}
default:
return FALSE;
}
}
どのように結合するのかわかりません。
カメラ画像表示部をWindowsの流儀に従わせるところからでしょう。
キャプチャプログラムは OpenCV なるものを使っているらしい。
んー… ならば後者をOpenCVの流儀に従わせるのでしょうねぇ。
すみません、私にはやはりよく分からないので質問を変えたいと思います。
#include "windows.h"
#include "resource.h"
// 関数のプロトタイプ宣言
BOOL CALLBACK DlgWndProc(HWND, UINT, WPARAM, LPARAM);
// エントリポイント
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow )
{
//ダイアログボックスを表示します
DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, (DLGPROC)DlgWndProc);
//戻り値を返します
return 0;
}
// (ダイアログボックス)ウインドウプロシージャ
BOOL CALLBACK DlgWndProc(HWND hWnd,
UINT message,
WPARAM wParam,
LPARAM lParam)
{
int c;
// メッセージの種類に応じて処理を分岐します。
switch (message)
{
case WM_INITDIALOG:
// ダイアログボックスが作成されたときの処理
c = 0;
return TRUE;
case WM_COMMAND:
// ボタンが押されたときの処理
switch (LOWORD(wParam))
{
case IDC_BUTTON1:
case IDC_BUTTON2:
// [閉じる]ボタン
SendMessage(GetParent(hWnd), WM_COMMAND, wParam, c);
EndDialog(hWnd, 0);
return TRUE;
default:
return FALSE;
}
default:
return FALSE;
}
}
のBUTTON1をクリックした場合にUSBカメラをリアルタイムに表示させるにはどうすればいいでしょうか?
聞いてばかりで申し訳ないのですが、本当に分からないのでよろしくお願いします。
まずはOpenCVのページをじっくり読んではいかがですか?
通りすがりのものです。(いろいろぐぐっててたまたま流れ着きました)
タイムスタンプが若いんで書き込ませてもらいます。
リアルタイムで表示との事ですが、ボタンを押すことでキャプチャを行うスレッド(captureImage = cvQueryFrame(capture);とか)を立ててダイアログの方はタイマーで画像を再描画するようにしたらいいかもしれません。
このとき、IplImageをDIBに変換する必要があります。自分で作ることもできます田IPLというライブラリを使うと簡単にできます。
また、cvcam(obsolateかtestingらしい?)を使えば、表示領域のHWNDを指定することでオーバーレイによるプレビュー表示が簡単にできます。
この辺の議論は2chのプログラム板の画像処理に質問を投げるといいかもしれません。
OpenCV使いが何人かいるみたいですよ。
通りすがりです。ググってたら。
まだ探しておられるようでしたら、たまたま同じようなソースを書いたんで参考までに晒しますけど、もう解決したのかな?
僕の場合はカメラじゃなくて、DirectShowも合体させて動画から読み込んでるんですけど。
すいません。上記の方と同じ質問なのですが、もしよかったらまもうさんのソースを見せてもらえないでしょうか?
ツイート | ![]() |