0

Bluetooth 経由で無線信号を読み取る Java コードがあります。さまざまな信号を読み取りたいのですが、各信号はウェブカメラを開きます。コードが信号1を検出する場合、コードが信号2カメラ2を検出する必要がある場合、カメラ1を開く必要がある場合、4台のUSBカメラがあります。Eclipse で opencv を使用して次のコードを追加します。

if (this.isDigitalOn(1) == true)
{                       
    CvCapture capture = opencv_highgui.cvCreateCameraCapture(0);

    opencv_highgui.cvSetCaptureProperty(capture, opencv_highgui.CV_CAP_PROP_FRAME_HEIGHT, 500);

    opencv_highgui.cvSetCaptureProperty(capture, opencv_highgui.CV_CAP_PROP_FRAME_WIDTH, 1000);
    IplImage grabbedimage = opencv_highgui.cvQueryFrame(capture);

    CanvasFrame frame = new CanvasFrame ("Webcam0");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    while(frame.isVisible() && (grabbedimage = opencv_highgui.cvQueryFrame(capture)) != null)                                                               
    {
        frame.showImage(grabbedimage);
    }
}
else                    
    if (this.isDigitalOn(2) == true)
    {
        CvCapture capture1 = opencv_highgui.cvCreateCameraCapture(1);
        opencv_highgui.cvSetCaptureProperty(capture1, opencv_highgui.CV_CAP_PROP_FRAME_HEIGHT, 500);
        opencv_highgui.cvSetCaptureProperty(capture1, opencv_highgui.CV_CAP_PROP_FRAME_WIDTH, 1000);

        IplImage grabbedimage1 = opencv_highgui.cvQueryFrame(capture1);
        CanvasFrame frame1 = new CanvasFrame ("Webcam1");
        frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        while (frame1.isVisible() && (grabbedimage1 = opencv_highgui.cvQueryFrame(capture1)) != null)
        {
            frame1.showImage(grabbedimage1);
        }
    }

コードは正常に動作していますが、同時に複数のカメラを開くことはできません。アイデアはありますか?

4

3 に答える 3

1

まず、else ステートメントを削除する必要があります。true と評価された場合this.isDigitalOn(1)、2 番目の if ステートメントは実行されません。

次に、最初の while ループが無期限に実行され (カメラからフレームを継続的に取得する)、プログラムが次のカメラを開き続けるのをブロックします。各カメラを個別のスレッドで開き、同時に実行できるようにする必要があります。

必要に応じて、スレッドに関するチュートリアルがたくさんあります例を次に示します。

于 2014-02-25T15:57:28.133 に答える
0

Javaではこのようにチェックできませんでした

    if (this.isDigitalOn(1) == true)

this.isDigitalOn(1) が「true」を返す場合、これを使用することを意味します

    if (this.isDigitalOn(1).equals("true"))

それ以外の場合は、単に使用します

    if (this.isDigitalOn(1))

これはうまくいきます

于 2014-02-25T15:39:15.863 に答える