当前位置:  开发笔记 > 编程语言 > 正文

从实时视频设备捕获图像以供基于Java的应用程序使用的最佳方法是什么?

如何解决《从实时视频设备捕获图像以供基于Java的应用程序使用的最佳方法是什么?》经验,为你挑选了1个好方法。

我正在研究用于某些场景的半实时检测的图像处理问题.我的目标是让实时视频以某种方式在我的Java代码中作为Motion JPEG帧到达.

我熟悉Java Media Framework,遗憾的是,我认为我们可以认为这是一个有效的死API.我也熟悉Axis盒子,虽然我非常喜欢他们的解决方案,但我会很感激我对我特定兴趣点的任何批评性反馈.

这就是我为此讨论定义"最佳"的方式:

延迟 - 如果我使用此视频流控制摄像机,我希望尽可能保持我的往返延迟不到100毫秒.这是我的控制输入到我看到可见变化的时间之间的时间.稍后编辑:要记住的另一件事是相机控制可能是手动和自动(事件触发器)的组合.我们需要立即看到这些图片,即使高质量的饲料是单独存档的.

免费/开源比免费更好.

可调编解码器参数 - 我需要能够在某些情况下调整编解码器.有时,高速低分辨率流实际上更容易处理.

与Java"集成" - 将此解决方案挂钩到我的代码有多麻烦?我是通过套接字发送数据包吗?点击网址?安装Direct3D/JNI组合?

Windows/Linux /两者? - 我更喜欢与操作系统无关的解决方案,因为我必须提供多种类型的操作系统,但可能有一种解决方案最适合一种而不是另一种.

注意:我知道其他图像/视频捕获编解码器,这不是这个问题的焦点.由于帧精度的降低,我对流API(例如MPEG4)特别感兴趣.但是,如果我的问题有一个解决方案可以提供另一个帧准确的数据流,请加入.

这个问题的后续行动:此时,我非常倾向于购买Axis视频编码器等设备,而不是试图直接在软件或PC上捕获视频.但是,如果有人有其他选择,我很乐意听到他们的意见.



1> gtiwari333..:

这个JavaCV实现工作正常.

码:

import com.googlecode.javacv.OpenCVFrameGrabber;

import com.googlecode.javacv.cpp.opencv_core.IplImage;
import static com.googlecode.javacv.cpp.opencv_highgui.*;

public class CaptureImage {
    private static void captureFrame() {
        // 0-default camera, 1 - next...so on
        final OpenCVFrameGrabber grabber = new OpenCVFrameGrabber(0);
        try {
            grabber.start();
            IplImage img = grabber.grab();
            if (img != null) {
                cvSaveImage("capture.jpg", img);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public static void main(String[] args) {
        captureFrame();
    }
}

还有关于从Camera 观看实时视频的帖子.以及JavaCV的配置:

我认为这符合您的要求.

推荐阅读
小白也坚强_177
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有