如何使用 JavaCV 从网络摄像头捕获和录制视频

2024-03-11

我是 JavaCV 新手,我很难找到关于我感兴趣的主题的不同问题的好教程。我已经成功地从我的网络摄像头实现了某种实时视频流,但问题是我使用我在网上找到的这段代码片段:

@Override
    public void run() {

        FrameGrabber grabber = new VideoInputFrameGrabber(0); // 1 for next
                                                                // camera
        int i = 0;
        try {
            grabber.start();
            IplImage img;
            while (true) {
                img = grabber.grab();
                if (img != null) {
                    cvFlip(img, img, 1);// l-r = 90_degrees_steps_anti_clockwise
                    cvSaveImage((i++) + "-aa.jpg", img);
                    // show image on window
                    canvas.showImage(img);
                }

这会产生多个 jpg 文件。

我真正想做的是捕获我的网络摄像头输入,并在显示它的同时将其保存在正确的视频文件中。我了解到FFmpegFrameRecorder但不知道如何实施。另外我一直想知道视频文件格式有哪些不同的选项,因为flv也许对我来说更有用。


这是一段相当长的旅程。还有一些事情我不确定它们背后的含义,但这里有一个使用 JavaCV 从网络摄像头捕获和录制视频的工作示例:

import com.googlecode.javacv.CanvasFrame;
import com.googlecode.javacv.FFmpegFrameRecorder;
import com.googlecode.javacv.OpenCVFrameGrabber;
import com.googlecode.javacv.cpp.avutil;
import com.googlecode.javacv.cpp.opencv_core.IplImage;

public class CameraTest {

    public static final String FILENAME = "output.mp4";

    public static void main(String[] args) throws Exception {
        OpenCVFrameGrabber grabber = new OpenCVFrameGrabber(0);
        grabber.start();
        IplImage grabbedImage = grabber.grab();

        CanvasFrame canvasFrame = new CanvasFrame("Cam");
        canvasFrame.setCanvasSize(grabbedImage.width(), grabbedImage.height());

        System.out.println("framerate = " + grabber.getFrameRate());
        grabber.setFrameRate(grabber.getFrameRate());
        FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(FILENAME,  grabber.getImageWidth(),grabber.getImageHeight());

        recorder.setVideoCodec(13);
        recorder.setFormat("mp4");
        recorder.setPixelFormat(avutil.PIX_FMT_YUV420P);
        recorder.setFrameRate(30);
        recorder.setVideoBitrate(10 * 1024 * 1024);

        recorder.start();
        while (canvasFrame.isVisible() && (grabbedImage = grabber.grab()) != null) {
            canvasFrame.showImage(grabbedImage);
            recorder.record(grabbedImage);
        }
        recorder.stop();
        grabber.stop();
        canvasFrame.dispose();
    }
}

对我来说,完成这项工作有点困难,因此除了那些可能有相同问题的人之外,如果您遵循有关如何在 Windows 7/64 位上设置 JavaCV 的官方指南,并且想要使用上面的代码捕获视频,您应该创建中的一个新目录C:\ : C:\ffmpeg并从中提取文件ffmped官方指南中要求您下载的版本。那么你应该添加C:\ffmpeg\bin给你的Enviorment variable PATH就这样。关于此步骤,所有学分都转到卡尔·菲利普 https://stackoverflow.com/users/176769/karlphillip

和他的帖子here https://stackoverflow.com/questions/10790613/javacv-unsatisfiedlinkerror-in-windows-7

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 JavaCV 从网络摄像头捕获和录制视频 的相关文章

  • 视频录制开启时,每 5 秒间隔保存一次视频(Android 操作系统)

    我想在视频录制打开时每 5 秒保存一次视频 我尝试了很多解决方案 但我面临着Glitch也就是说 最后保存的帧在预览中保留大约 300 毫秒 我认为原因是在 MediaRecorder 类中 一旦记录器停止 就需要在重新启动之前完全重新配置
  • 使用 AVFoundation 进行视频录制

    我正在尝试使用 AVFoundation 录制视频 当我仅向会话添加视频输入时 一切正常 但是当我向其中添加音频输入时 它会停止录制视频 录制开始后立即调用委托方法 这是我的代码 void recordVideo self session
  • Android 应用程序演示

    我想为我的 Android 应用程序制作一个视频演示 我知道我可以通过在屏幕前拿着摄像机进行演示并演示该应用程序 但是有没有其他方法可以做到这一点 例如 Windows 版 JingProject 您可以在视频中记录屏幕上的活动 有没有一个
  • 将 OpenCV 矩阵循环转换为 JavaCV

    不久前得到了 O Reilly 的 学习 OpenCV 一书 从那时起 我一直忙于将我看到的所有示例代码从 OpenCV 转换为 JavaCV 通常还会进行一些我自己的修改 一直以来 我都试图尽可能保持纯 OpenCV C 语言 代码并避免
  • 使用 OpenCV 和 Python-2.7 进行屏幕捕获

    我在用着Python 2 7 and OpenCV 2 4 9 我需要捕获向用户显示的当前帧并将其加载为cv Mat 这是我使用 Raoul 技巧编写的解决方案代码 我使用 PIL ImageGrab 模块来抓取打印屏幕帧 import n
  • 使用 python 修剪网络摄像头的实时视频(从中删除帧)

    我有一个捕获视频流的网络摄像头 30 秒后 我想从开始处删除 1 秒的视频 并继续捕获视频流等等 简而言之 我只想保存直播视频的最新30秒 OpenCV不提供视频处理 ffmpeg 修剪视频但创建一个新的输出文件 我不想保留副本 Creat
  • 在 iOS 中使用 AVFoundation 暂停和恢复同一文件的视频捕获

    我试图弄清楚如何实现在单个会话中重复暂停和恢复视频捕获的功能 但使用 AVFoundation 将每个新片段 每次暂停后捕获的片段 添加到同一视频文件中 目前 每次我按 停止 然后再次 录制 时 它只会将新的视频文件保存到我的 iPhone
  • FRAPS 替代方案:去哪里寻找以及寻找什么? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 今年晚些时候 我将有很多空闲时间 我想我应该为自己启动一个 小 项目 并将其作为开源发布 我想编写我自己
  • 在 Python 中使用 OpenCV VideoCapture 获取当前帧

    我正在使用 cv2 VideoCapture 在 python 脚本中读取 RTSP 视频链接的帧 read 函数位于每秒运行一次的 while 循环中 但是 我没有从流中获取最新的帧 我使用较旧的帧 这样我的延迟就增加了 无论如何 我是否
  • IMFMediSource 不支持 IKsPropertySet 接口

    我正在将基于 Direct Show 相机的 SDK 移植到 MFT 在我的旧代码中 我有 KSProxy 接口 如 IksTopolgy IKsControl 和 IKsProperty IksTopolgy IKsControl 用于枚
  • 如何将WPF动画逐帧渲染为视频?

    我在 WPF 中创建了一个我喜欢的很好的效果 我希望能够 记录 这个效果 但运行时却很不稳定 有没有办法可以将其转换为逐帧过程并自己将其另存为视频 而不是尝试在播放期间录制它 基本上我想将 WPF 渲染为视频 或列出一系列保存为位图的帧 关
  • iOS画屏视频采集不流畅

    我正在创建一个应用程序 我们可以在 imageView 中使用手指进行绘图 同时我们也可以记录屏幕 到目前为止我已经完成了这些功能 但问题是一旦视频录制完成 如果我们播放录制的视频 手指在视频中绘图不流畅 我没有使用 opengl 绘图在
  • Safari 的媒体记录 API 替代方案

    我需要通过浏览器从相机录制视频 我已经使用媒体记录 API 为 Chrome 和 Firefox 完成了此操作 var options mimeType video webm codecs vp9 mediaRecorder new Med
  • 用于多摄像机录制和流媒体设置的软件和/或硬件解决方案

    简而言之 我需要一种方法来流式传输 或以其他方式播放 电影以及 3 到 4 个其他 显示角度 并且用户能够更改他们正在观看的流式传输 最终结果应该是一个带有其他角度链接 按钮的视频播放器 允许用户根据需要切换摄像机流 角度 这是一个例子 您
  • OpenCv错误无法通过视频采集打开相机

    我通过 opencv 使用相机 重新启动后突然运行我的代码 它显示以下错误 WARN 0 global io opencv modules videoio src cap v4l cpp 802 open VIDEOIO ERROR V4L
  • 将 DVB-T 流捕获到电影文件

    我有一张带有电视信号实时视图的表格 来自 DVB T 棒 我有来自的示例项目 DTViewer http directshownet sourceforge net about html http directshownet sourcef
  • Android JavaCV 困境,创建 IplImage 时在“draw”方法中抛出 NoClassDefFoundError

    我正在使用 JavaCV 库和针对 Android 的预构建 OpenCV 库 我认为我已经以正确的方式设置了 Eclipse 因为我已经包含了 javacv jar 和 javacpp jar 两个 jar 另外 java cv andr
  • 直接屏幕像素/帧缓冲区访问[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想尝试创建一个玩游戏的程序 IE 机器人 我希望能够直接访问屏幕上的像素 IE 让我的程序 看到 一场比赛 然后 采取行动 或者至少
  • ffmpeg 用于屏幕捕获?

    所以我有一个小程序来捕获屏幕和计算机麦克风的声音 然后屏幕截图被编码为 ScreenVideo2 声音被编码为 AAC 如何使用 ffmpeg 逐帧混合 然后将混合输出发送到 wowza 媒体服务器 如果用ffmpeg无法完成 您能提供一些
  • 将嘈杂的硬币重塑为圆形

    我正在使用 JavaCV OpenCV 包装器 进行硬币检测 但是当硬币连接时我遇到了一些问题 如果我尝试侵蚀它们以分离这些硬币 它们就会失去圆形形状 如果我尝试计算每个硬币内部的像素 可能会出现问题 因此某些硬币可能会被误算为更大的硬币

随机推荐

  • 通过逻辑索引为数组赋值不起作用

    在Matlab中 我想用其他值替换某个值 我知道我可以这样做 X X 0 1 如果我想将所有出现的 0 替换为 1 我有一个数组 X 其中包含范围在 0 到 9 之间的数字 我想创建一个新数组 Y 其中如果 X i 某个给定数字 例如 5
  • 将列表附加到 R 中的列表列表

    我在将数据附加到已经采用列表格式的列表时遇到问题 我有一个程序 它将在模拟循环期间导出结果对象 数据本身存储为矩阵列表 我的想法是将这些列表存储在一个列表中 然后将此列表列表保存为 R 对象以供以后分析 但是我在正确实现这一点时遇到了一些问
  • 如何在 git checkout 中使用八进制字符?

    我有一个音乐文件的 git 存储库 最近我发现有些文件被删除了 我想我不小心删除了它们 但现在我只是短暂地陶醉于我有先见之明的事实 使用 git 存储库 因此我当前的 git 状态验证它们已被删除 以下是一些清单 deleted Steve
  • 在 ASP .NET (SMTP) 中发送邮件

    我在代码文件中编写了以下代码 但它不起作用 请帮助我 protected void Button1 Click object sender EventArgs e MailMessage msgeme new MailMessage ema
  • VBA:复制时前面的零被删除

    我正在使用 VBA 创建 Excel 文件的副本 在该文件中 有一列包含前面带有零的数字 该文件的副本已创建 但该列中的数据将被删除 我需要保留前面带有零的值 我该如何用VBA解决这个问题 最好的方法是通过将 Range NumberFor
  • 带有泛型的映射数组的问题[重复]

    这个问题在这里已经有答案了 可能的重复 Java 泛型和数组初始化 https stackoverflow com questions 470198 java generics and array initialization 如何在 Ja
  • 代码在 g++ 中运行完美,但在 Xcode 中则不然 - 找不到文件

    我创建了一个包含内容的文本文件 它与 cpp 文件位于同一文件夹中 而且我已经多次确认该文件存在 当我运行 g 时 编译并运行它会找到该文件 当我在 Xcode 中运行它时 它不起作用 如果找不到该文件 include
  • int 和 NSInteger 有什么区别? [复制]

    这个问题在这里已经有答案了 可能的重复 何时使用 NSInteger 与 int https stackoverflow com questions 4445173 when to use nsinteger vs int 为什么会有 NS
  • 检查 .lib 文件的工具?

    我正在评估一些文档不足的软件 当我构建示例项目时 我收到一个链接器错误 如下所示 error LNK2019 unresolved external symbol 这个应用程序没有大量的 lib 文件 因此我可以通过反复试验来解决这个问题
  • 嵌入式非托管 DLL 无法在 ASP.NET 中加载

    我正在为 WCF 服务开发 ASP NET 主机 该服务引用 C CLI 包装器库 该库本身引用非托管 DLL 基于这个问题 https stackoverflow com questions 2907169 asp net load un
  • 亚音速 3.0.0.3 崩溃

    运行最新版本的 SubSonic 3 0 0 3 检索单个记录 更改一个字段并调用 Save 会导致以下代码中出现空引用异常 公共无效更新 IDataProvider提供者 if this dirtyColumns Count gt 0 r
  • 如何处理 next.js 路由中的尾部斜杠?

    我正在尝试设置 next js 应用程序 但在处理带有尾部斜杠的路由时遇到问题 因此 例如 如果我有这样的页面结构 pages index js blog index js slug js 然后去 给我基础index js 即将 blog给
  • msdeploy 上的嵌套虚拟目录已删除

    我的项目使用 msdeploy 将包发布到 IIS 它部署在项目的现有版本上 在Web应用程序中 我有一个虚拟目录 但每次部署项目时 虚拟目录都会消失 我通过以下方式调用 MSDepoly source package d 9 1 0 67
  • 将文件直接从 FTP 传输到 Azure 文件存储,无需将它们保存在本地内存或磁盘中

    我必须将文件从 FTP 传输到 Azure 文件存储 我的代码工作正常 但我正在内存中传输这些文件 这不是最佳实践 所以首先我将流读取到Byte内存中的数组 然后我将输出上传到 Azure 文件存储 现在我知道最好异步执行此操作 但我不知道
  • google.script.run 不返回字符串

    试图找出用于制作 Google 文档插件的 Google Apps 脚本 我有 Code gs function helloWorld return Hello World 在我调用的 code gs 下 侧边栏 html console
  • 播放时拔掉耳机会导致 iPhone 应用程序出现错误

    我正在创建一个基于的应用程序在这里说话示例应用程序 如果耳机已插入或默认通过扬声器播放 我希望音频通过耳机播放 我使用了底部的代码来实现这一点 并且除非在播放过程中拔掉耳机 否则它工作正常 此时播放结束 没关系 问题是 当我再次点击播放时
  • Dockerfile 还是注册表?哪种分配策略是首选?

    如果您使用 Dockerfile 制作服务 您是否更愿意使用 Dockerfile 构建镜像并将其推送到注册表 而不是分发 Dockerfile 和存储库 供人们构建镜像 哪些用例有利于 Dockerfile repo 分发 哪些用例有利于
  • 可嵌入的 jpa 类应该实现 equals 和 hashCode 吗?

    假设我有以下场景 Entity public class Person Id private Long id Surrogate key Embedded private Name name Natural key public int h
  • C++:平台相关类型 - 最佳模式[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何使用 JavaCV 从网络摄像头捕获和录制视频

    我是 JavaCV 新手 我很难找到关于我感兴趣的主题的不同问题的好教程 我已经成功地从我的网络摄像头实现了某种实时视频流 但问题是我使用我在网上找到的这段代码片段 Override public void run FrameGrabber