gpt4 book ai didi

java - 使用opencv配合java可以同时打开多个摄像头吗?

转载 作者:行者123 更新时间:2023-12-01 13:21:14 26 4
gpt4 key购买 nike

我有通过蓝牙读取 radio 信号的java代码。我想读取不同的信号和每个信号打开网络摄像头。我有四个 USB 摄像头,如果代码检测到信号 1,则应打开摄像头 1;如果代码检测到信号 2,应打开摄像头 2,依此类推。我使用 opencv 和 eclipse 添加以下代码:

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);
}
}

代码工作正常,但无法同时打开多个摄像头。请问有什么想法吗?

最佳答案

首先您需要删除 else 语句。如果 this.isDigitalOn(1) 计算结果为 true,则不会执行第二个 if 语句。

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

如果您需要的话,有大量关于线程的教程,here就是一个例子。

关于java - 使用opencv配合java可以同时打开多个摄像头吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22018946/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com