0

我有通过蓝牙读取无线电信号的 java 代码。我想读取不同的信号和每个信号打开网络摄像头。我有四个 USB 摄像头,如果代码检测信号 1,如果代码检测信号 2,camera2 应该打开,它应该打开摄像头 1,依此类推。我使用带有 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 语句。如果this.isDigitalOn(1)评估为真,则不会执行第二个 if 语句。

其次,第一个 while 循环将无限期地执行(不断地从相机中抓取帧)并将阻止您的程序继续打开下一个相机。您需要在单独的线程中打开每个摄像头,让它们同时运行。

如果你需要的话,有很多关于线程的教程,这里有一个例子。

于 2014-02-25T15:57:28.133 回答
0

你不能在java中这样检查

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

如果 this.isDigitalOn(1) return "true" 表示使用 this

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

否则只需使用

    if (this.isDigitalOn(1))

这会起作用

于 2014-02-25T15:39:15.863 回答
0
if (this.isDigitalOn(3))
                {
                    System.out.println("we are there 3 ");

                    Thread t = new Thread ()
                    {
                        public void run(){              
                      CvCapture capture0 = opencv_highgui.cvCreateCameraCapture(0);
                      opencv_highgui.cvSetCaptureProperty(capture0, opencv_highgui.CV_CAP_PROP_FRAME_HEIGHT, 500);
                      opencv_highgui.cvSetCaptureProperty(capture0, opencv_highgui.CV_CAP_PROP_FRAME_WIDTH, 1000);
                      IplImage grabbedimage0 = opencv_highgui.cvQueryFrame(capture0);
                      CanvasFrame frame = new CanvasFrame ("Webcam0");
                      frame.setDefaultCloseOperation(CanvasFrame.EXIT_ON_CLOSE);
                      while(frame.isVisible() && (grabbedimage0 = opencv_highgui.cvQueryFrame(capture0)) != null)
                    {
                          frame.showImage(grabbedimage0);
                    }
                    opencv_highgui.cvReleaseCapture(capture0);
                    grabbedimage0.release();
                    }
                    };
                    t.start();
                    }
于 2014-02-26T16:02:27.067 回答