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版)_构造函数

参考文档:

​OpenCV Java documentation (4.6.0)​

以上是关于java怎么写摄像头获取的视频流的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Java 从网络摄像头获取视频和音频流?

手机web页面怎么调用摄像头执行扫描,获取数据?

OpenCV-视频读写(java版)

如何在网络上编写音频/视频应用程序?

C# 如何采集 视频和音频 如何调用摄像头获取图片

Canvas截取视频流上传图片