Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OpenCV-网络摄像头框架在Java中的macbook上不起作用_Java_Macos_Opencv_Webcam - Fatal编程技术网

OpenCV-网络摄像头框架在Java中的macbook上不起作用

OpenCV-网络摄像头框架在Java中的macbook上不起作用,java,macos,opencv,webcam,Java,Macos,Opencv,Webcam,我刚刚在mac air上完成了我的第一次opencv安装,我一直在尝试从内置在屏幕上的摄像头中获取输入。据我所知,我已经在Eclipse中正确地运行了这些库,因为我不再在每次尝试调用任何方法时都会遇到大量错误。然而,现在发生的是网络摄像头的问题,它似乎是在0传递给构造函数的情况下正确创建的(1-50中的任何内容都不会返回任何内容,我认为-1是默认值)。但是当我试着用它取回一个框架时,垫子总是空的 据我所知,我似乎能够访问摄像头,但在代码和能够实际激活摄像头拍摄视频之间存在某种断开。如果有什么关系

我刚刚在mac air上完成了我的第一次opencv安装,我一直在尝试从内置在屏幕上的摄像头中获取输入。据我所知,我已经在Eclipse中正确地运行了这些库,因为我不再在每次尝试调用任何方法时都会遇到大量错误。然而,现在发生的是网络摄像头的问题,它似乎是在0传递给构造函数的情况下正确创建的(1-50中的任何内容都不会返回任何内容,我认为-1是默认值)。但是当我试着用它取回一个框架时,垫子总是空的

据我所知,我似乎能够访问摄像头,但在代码和能够实际激活摄像头拍摄视频之间存在某种断开。如果有什么关系的话,在大多数节目中显示摄像机处于活动状态的灯光始终保持不活动状态

相关代码发布在下面。我非常感谢您提供的任何见解或java代码示例,以便从网络摄像头中获取图像,并在java gui中使用。谢谢

    System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

    VideoCapture camera = new VideoCapture(0);
    try {
        Thread.sleep(1000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }


    //camera.open(0); //Useless
    if(!camera.isOpened()){
        System.out.println("Camera broken");
    }
    else{
        System.out.println("Camera OK!");
    }

    Mat frame = new Mat();

    camera.read(frame);

    System.out.println("width:" + frame.width());

    Highgui.imwrite("myframe.png", frame);
输出为:

Camera OK!
width:0
libpng warning: Image width is zero in IHDR
libpng warning: Image height is zero in IHDR
libpng error: Invalid IHDR data
Cleaned up camera.

这个问题已经有一段时间没有被问到了,但由于我基本上遇到了相同的问题,我将发布一个解决方案(发现)(对于一个愚蠢的问题,这实际上是一个相当简单的解决方案):

相机需要时间来初始化(不确定硬件细节是什么,但你可以开始了)。为了修复它,我简单地添加了Thread.sleep(1000),它就开始工作了。一个稍微好一点的修复方法是将其封装在一个循环中,大约每1000毫秒重试一次,直到返回的垫子不是空的

希望有人能从中受益:-)


编辑:我应该先读一下你的代码。我真傻,抱歉。这个问题似乎与我的问题非常相似,所以我认为它是相同的。

我在Windows和Linux上也有类似的问题,我所要做的就是更改
VideoCapture
调用中的索引。你说从1到50的指数什么也不返回。你能确切地说发生了什么事吗?我注意到,有时我需要关闭所有其他使用相机的程序,而之前不起作用的程序才起作用。嗯,我会试一试,尝试重新启动所有程序,并尝试从头开始运行,不幸的是,这将不得不等到今晚。当我试图打开0-50,然后检查camera.isopen()是否打开时,它返回只有0插槽打开。所以我认为其他人是为了拥有其他相机而保留的,这是有道理的。我不应该说我有一些运气让我恢复了一个图像,但它的质量很差,我真的很想把它都保存在openCV中。是的,openCV已经不是那么简单了,所以在上面添加更多的库可能没有什么帮助:P我从来没有在java中使用过openCV,但我可以用python编写一段示例代码,它将遍历所有摄像头并尝试拍照,也许你可以从那里开始工作并用java重现它。但一定要尝试关闭一切并重新启动,它可能会像对我一样工作:D