在 java 中从网络摄像头捕获图像?

新手上路,请多包涵

如何从网络摄像头连续捕获图像?

我想尝试对象识别(可能通过使用 java 媒体框架)。

我正在考虑创建两个线程

一个线程:

  • 节点 1:捕获实时图像
  • 节点2:保存图片为“1.jpg”
  • 节点 3:等待 5 秒
  • 节点 4:重复…

其他线程:

  • 节点 1:等到图像被捕获
  • 节点 2:使用“1.jpg”从每个像素中获取颜色
  • 节点3:将数据保存在数组中
  • 节点 4:重复…

原文由 Divide By Zero 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 376
1 个回答

这个 JavaCV 实现工作正常。

代码:

 import org.bytedeco.javacv.*;
import org.bytedeco.opencv.opencv_core.IplImage;

import java.io.File;

import static org.bytedeco.opencv.global.opencv_core.cvFlip;
import static org.bytedeco.opencv.helper.opencv_imgcodecs.cvSaveImage;

public class Test implements Runnable {
    final int INTERVAL = 100;///you may use interval
    CanvasFrame canvas = new CanvasFrame("Web Cam");

    public Test() {
        canvas.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);
    }

    public void run() {

        new File("images").mkdir();

        FrameGrabber grabber = new OpenCVFrameGrabber(0); // 1 for next camera
        OpenCVFrameConverter.ToIplImage converter = new OpenCVFrameConverter.ToIplImage();
        IplImage img;
        int i = 0;
        try {
            grabber.start();

            while (true) {
                Frame frame = grabber.grab();

                img = converter.convert(frame);

                //the grabbed frame will be flipped, re-flip to make it right
                cvFlip(img, img, 1);// l-r = 90_degrees_steps_anti_clockwise

                //save
                cvSaveImage("images" + File.separator + (i++) + "-aa.jpg", img);

                canvas.showImage(converter.convert(img));

                Thread.sleep(INTERVAL);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        Test gs = new Test();
        Thread th = new Thread(gs);
        th.start();
    }
}

还有 关于 JavaCV 配置的帖子

您可以修改代码并能够定期保存图像并进行您想要的其余处理。

原文由 gtiwari333 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题