java怎么写摄像头获取的视频流
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java怎么写摄像头获取的视频流相关的知识,希望对你有一定的参考价值。
摄像头获取到的数据其实都是一帧一帧的图片,任何语言不仅仅是java都可以对这些数据进行处理,但是Java不是最佳的选择。针对这些图片你首先要知道摄像头是否对视频流使用了压缩技术,例如:H263\H264或者是没有压缩过的。
如果是压缩过的,你需要先对每一帧进行解编码(DECODE),然后就是一张图了,你进行你要做的编辑,然后再编码(ENCODE),再放入视频流中。
C语言开发的视频处理软件是cstream,你可以看一看,这个是通道式处理,添加插件,处理每一个buffer,一个buffer就是一帧,同时也可以处理多种格式的音频。
对视频的编辑不是简简单单就能实现的,需要对算法有很好的了解。 参考技术A public class video
public static void main(String[] args) throws Exception
final String savedImageFile = "d:\\\\my.jpg"; //拍摄所存储的文件
OpenCVFrameGrabber grabber = new OpenCVFrameGrabber(0);
grabber.start(); //开始获取摄像头数据
IplImage image =grabber.grab(); //将所获取摄像头数据放入IplImage
int width = image.width();
int height = image.height();
final BufferedImage bImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics2D bGraphics = bImage.createGraphics();
CanvasFrame canvas = new CanvasFrame("Camera",1);
canvas.setCanvasSize(width, height);
canvas.getCanvas().addMouseListener(new MouseAdapter()
public void mouseClicked(MouseEvent e)
try
ImageIO.write(bImage, "jpg", new File(savedImageFile));//数据写入my.jpg
catch (IOException e1)
// TODO Auto-generated catch block
e1.printStackTrace();
);
while(canvas.isVisible() && (image=grabber.grab()) != null)
canvas.showImage(image);
bGraphics.drawImage(image.getBufferedImage(),null,0,0);
cvReleaseImage(image);
grabber.stop();
canvas.dispose();
参考技术B JMF 可以有,这个程序请百度 JMF 摄像头 了。本回答被提问者和网友采纳
OpenCV-视频读写(java版)
@TOC
OpenCV 2 中提供了两个类来实现视频的读写。读视频的类是
VideoCapture,写视频的类是
VideoWriter
读视频
VideoCapture 既可以从视频文件读取图像,也可以从摄像头读取图像。该类提供了一系列构造函数和方法打开视频文件或摄像头。下方对VideoCapture的常用方法进行说明
方法 | 说明 | |
open() VideoCapture() | open(index) VideoCapture(index) | index表示要打开的视频捕获设备的ID 通过构造函数的方式打开第index个摄像头 (下方不再说明) |
open(int index, int apiPreference) | apiPreference:媒体类型,缺省时默认为  CAP_ANY (更多查看Videoio类) | |
open(int index, int apiPreference, MatOfInt params) | ||
open(String filename) | 打开一个视频文件。 filename:文件地址 | |
open(String filename, int apiPreference) | ||
open(String filename, int apiPreference, MatOfInt params) |
示例:
public static void main(String[] args)
String libraryPath= System.getProperty("user.dir")+"\\\\lib\\\\opencv_java460.dll";
System.load(libraryPath);
VideoCapture vc = new VideoCapture();
//打开摄像头
vc.open(0);
Mat mat = new Mat();
while(vc.read(mat))
for(int i=0;i<mat.rows();i++)
for (int j=0;j<mat.cols();j++)
if (i>(mat.rows()/2) )
//给相应位置赋予像素值
mat.put(i,j,144,238,144);
HighGui.imshow("test", mat);
HighGui.waitKey(1);
vc.release();
//关闭窗口
HighGui.destroyAllWindows();
执行效果:
参考文档:
OpenCV Java documentation (4.6.0)
以上是关于java怎么写摄像头获取的视频流的主要内容,如果未能解决你的问题,请参考以下文章