在java中从网络摄像头捕获图像? [英] Capturing image from webcam in java?
本文介绍了在java中从网络摄像头捕获图像?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如何从网络摄像头连续捕捉图像?
How can I continuously capture images from a webcam?
我想尝试对象识别(通过使用 java 媒体框架).
I want to experiment with object recognition (by maybe using java media framework).
我正在考虑创建两个线程
I was thinking of creating two threads
一个线程:
- 节点 1:捕获实时图像
- 节点 2:将图像另存为1.jpg"
- 节点 3:等待 5 秒
- 节点 4:重复...
其他线程:
- 节点 1:等待图像被捕获
- 节点 2:使用1.jpg"获取颜色来自每一个像素
- 节点 3:将数据保存在数组中
- 节点 4:重复...
推荐答案
这个 JavaCV 实现工作正常.
This JavaCV implementation works fine.
代码:
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();
}
}
您可以修改代码并能够定期保存图像并进行您想要的其余处理.
You can modify the codes and be able to save the images in regular interval and do rest of the processing you want.
这篇关于在java中从网络摄像头捕获图像?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文