【问题标题】:How to change webcam format in JavaCV?如何在 JavaCV 中更改网络摄像头格式?
【发布时间】:2012-04-04 19:45:25
【问题描述】:

我终于让 JavaCV 与我的网络摄像头一起工作,但我找不到改变抓取图像输出格式的方法。

我的惠普笔记本电脑中有一个惠普高清 (720p) 固定网络摄像头。我得到的唯一分辨率是 640x480。我尝试使用所有可用的 FrameGrabber 子类。

我正在使用这个简单的代码:

import com.googlecode.javacv.CanvasFrame;
import com.googlecode.javacv.FrameGrabber;
import com.googlecode.javacv.cpp.opencv_core.IplImage;

public class Webcam {

    public static void main(String[] args) throws Exception {
        FrameGrabber grabber = FrameGrabber.createDefault(0);
        grabber.start();

        IplImage grabbedImage = grabber.grab();

        CanvasFrame frame = new CanvasFrame("Some Title", CanvasFrame.getDefaultGamma() / grabber.getGamma());

        while (frame.isVisible() && (grabbedImage = grabber.grab()) != null) {
            frame.showImage(grabbedImage);
        }

        frame.dispose();
        grabber.stop();
    }

}

我是否遗漏了什么,或者是否有其他方法可以使用 JavaCV 从网络摄像头捕获图像?

【问题讨论】:

    标签: java format webcam javacv


    【解决方案1】:

    我找到了另一种从网络摄像头捕获的方法,还设置了一些属性,例如首选宽度和高度。

    此代码适用于我:

    import com.googlecode.javacv.CanvasFrame;
    import com.googlecode.javacv.cpp.opencv_core.IplImage;
    import com.googlecode.javacv.cpp.opencv_highgui;
    import com.googlecode.javacv.cpp.opencv_highgui.CvCapture;
    
    public class Webcam {
    
        public static void main(String[] args) throws Exception {
            CvCapture capture = opencv_highgui.cvCreateCameraCapture(0);
    
            opencv_highgui.cvSetCaptureProperty(capture, opencv_highgui.CV_CAP_PROP_FRAME_HEIGHT, 720);
            opencv_highgui.cvSetCaptureProperty(capture, opencv_highgui.CV_CAP_PROP_FRAME_WIDTH, 1280);
    
            IplImage grabbedImage = opencv_highgui.cvQueryFrame(capture);
    
            CanvasFrame frame = new CanvasFrame("Webcam");
    
            while (frame.isVisible() && (grabbedImage = opencv_highgui.cvQueryFrame(capture)) != null) {
                frame.showImage(grabbedImage);
            }
    
            frame.dispose();
            opencv_highgui.cvReleaseCapture(capture);
        }
    
    }
    

    希望这可以帮助遇到同样问题的人。

    【讨论】:

    • start() 之前调用grabber.setImageWidth()setImageHeight() 也应该满足您的需要。
    • 你说得对 Samuel,我不知何故错过了它,或者我把它放在了 start() 之后。
    • @BranislavKuliha 当我将我的 Logitech C910 设置为它的原生 5MP 时,我发现 FrameGrabber 的 FPS 与 640x480(黄油般光滑)相比下降了很多。这是不是我系统的可用资源比其他任何东西都多?我想将其用作企业解决方案,如果我只需要设置一台功能非常强大的计算机,那就这样吧!
    • @Davek804:我不认为你的网络摄像头支持以如此高的 fps 速率进行 5MP 捕获。检查link 以查看完整的规格和系统要求。我认为您的 fps 在最大 1080p 即 2MP 捕获时应该是流畅的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-20
    • 1970-01-01
    • 2012-09-10
    相关资源
    最近更新 更多