2

複数のWebカメラから写真をキャプチャしてWindowsVistaに自動的に保存するプログラムが必要です。このリンクから基本的なコードを入手しました。コードはWindowsXPで実行されますが、Vistaで使用しようとすると、「失敗しました」と表示されます。実行するたびに異なるエラーが表示されます。SDKプラットフォームを使用した場合、役に立ちますか?誰か提案はありますか?

4

2 に答える 2

2

私は 1 つしか持っていないため、複数の Web カメラでこれをテストすることはできませんが、OpenCV2.0で処理できるはずです。これは、開始するための 1 つの Web カメラを使用したサンプル コード (私は Vista を使用) です。

#include <cv.h>
#include <highgui.h> 

using namespace cv;    

int main()
{
    // Start capturing on camera 0
    VideoCapture cap(0);
    if(!cap.isOpened()) return -1;

    // This matrix will store the edges of the captured frame
    Mat edges;
    namedWindow("edges",1);

    for(;;)
    {
    // Acquire the frame from cap into frame
    Mat frame;
    cap >> frame;

    // Now, find the edges by converting to grayscale, blurring and then Canny edge detection
    cvtColor(frame, edges, CV_BGR2GRAY);
    GaussianBlur(edges, edges, Size(7,7), 1.5, 1.5);
    Canny(edges, edges, 0, 30, 3);

    // Display the edges and the frame
    imshow("edges", edges);
    imshow("frame", frame);
    // Terminate by pressing a key
    if(waitKey(30) >= 0) break; 
    }
return 0;
}

ノート:

マトリックス エッジは最初のフレーム処理中に割り当てられ、解像度が突然変化しない限り、次のフレームのエッジ マップごとに同じバッファが再利用されます。

ご覧のとおり、コードは非常にクリーンで読みやすいものになっています。これを OpenCV 2.0 ドキュメント (opencv.pdf) から取り上げました。

このコードは、Web カメラ (下frame) からの画像を表示するだけでなく、リアルタイムのエッジ検出も行います! これは、ウェブカメラをモニターに向けたときのスクリーンショットです:)

スクリーンショット http://img245.imageshack.us/img245/5014/scrq.png

コードで 1 つのカメラからのフレームのみを表示する場合:

#include <cv.h>
#include <highgui.h>

using namespace cv;

int main()
{
    VideoCapture cap(0);
    if(!cap.isOpened()) return -1;
    for(;;)
    {
    Mat frame;
    cap >> frame;
    imshow("frame", frame);
    if(waitKey(30) >= 0) break;
    }
return 0;
}
于 2009-11-02T02:46:02.763 に答える
0

プログラムが UAC オフまたは管理者の実行時に動作する場合は、結果を保存するために選択した場所が、ユーザーのマイ ドキュメント フォルダーなどの書き込み可能な場所であることを確認してください。一般的に言えば、ルート フォルダーとプログラム ファイル フォルダーは、通常のユーザーに対しては読み取り専用です。

于 2009-11-02T19:13:43.003 に答える