使用Java的OpenCV中的网络摄像头流

盖茨

我想在我的Java应用程序中流式传输摄像头,以获取一些图像处理功能。我正在使用随附的OpenCV和Java库文件。

我了解了如何捕获图像,但是又如何像视频一样连续捕获和显示帧。

请建议在下面的代码中进行修改,或以其他方式进行修改。

我正在使用Java Swing应用程序开发。

package openc;
import org.opencv.core.*;

public class openc {

private JFrame frame;

/**
 * Launch the application.
 */
public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                openc window = new openc();
                window.frame.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

/**
 * Create the application.
 */
public openc() {
    initialize();
}

/**
 * Initialize the contents of the frame.
 */
private void initialize() {
    frame = new JFrame();
    frame.setBounds(100, 100, 450, 300);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    Canvas canvas = new Canvas();
    frame.getContentPane().add(canvas, BorderLayout.CENTER);

            System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
            VideoCapture camera = new VideoCapture(0);
            if(!camera.isOpened()){
                System.out.println("Error");
            }
            else {
                Mat iframe = new Mat();
                while(true){
                    if (camera.read(iframe)){
                        System.out.println("Frame Obtained");
                        System.out.println("Captured Frame Width " + 
                        iframe.width() + " Height " + iframe.height());
                        while(true){
                        Highgui.imwrite(canvas, iframe);
                        }


                    }
                }   
            }
            camera.release();

}

}
dic19

我了解了如何捕获图像,但是又如何像视频一样连续捕获和显示帧。

我从未使用过OpenCV API,所以我对该库一无所知。但是我认为您的问题是由无限循环引起的典型线程阻塞问题:

while(true){ // infinite loop

    if (camera.read(iframe)) {
        System.out.println("Frame Obtained");
        System.out.println("Captured Frame Width " + 
        iframe.width() + " Height " + iframe.height());

        while(true) { // another infinite loop
            Highgui.imwrite(canvas, iframe);
        }
    }
} 

您有两个无限循环正在阻塞事件调度线程,从而导致GUI无法响应。Swing是单线程的,您必须格外小心如何创建/更新Swing组件。

在这种特殊情况下,我认为您可以使用SwingWorker定期在后台线程中读取相机数据并更新CanvasEDT中的对象。像这样:

SwingWorker<Void, Mat> worker = new SwingWorker<Void, Mat>() {
    @Override
    protected Void doInBackground() throws Exception {            
        while(!isCancelled()) {
            if (camera.read(iframe)) {
                publish(iframe);
            }
            Thread.sleep(500); // prudential time to avoid block the event queue
        }            
        return null;
    }

    @Override
    protected void process(List<Mat> chunks) {
        Mat lastFrame = chuncks.get(chunks.size() - 1);
        Highgui.imwrite(canvas, lastFrame);
    }        
};

worker.execute();

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Java的OpenCV中的网络摄像头流

来自分类Dev

java中的vlcj网络摄像头流

来自分类Dev

使用OpenCV固定网络摄像头视频中的位置

来自分类Dev

Qt OpenCV网络摄像头流打开和关闭

来自分类Dev

Qt OpenCV网络摄像头流打开和关闭

来自分类Dev

如何使用ffmpeg从网络摄像头访问压缩流

来自分类Dev

使用MJPG流作为网络摄像头源

来自分类Dev

OpenCV无法使用Python访问网络摄像头

来自分类Dev

使用Opencv直接从网络摄像头获取灰度图像

来自分类Dev

无法在OpenCV中使用网络摄像头显示图像

来自分类Dev

延迟显示网络摄像头流

来自分类Dev

在Python 2.7中使用OpenCV 2.4.7.0在网络摄像头源上叠加图像

来自分类Dev

在Python 2.7中使用OpenCV 2.4.7.0在网络摄像头源上叠加图像

来自分类Dev

使用 Python openCV 从实时馈送(网络摄像头)中提取光流作为数据(数字)

来自分类Dev

加快Java OpenCV中的摄像头访问

来自分类Dev

在Firefox中禁用网络摄像头

来自分类Dev

在我正在开发的程序中,我需要使用 java 打开网络摄像头。为此,我使用 opencv 进行编码,但出现以下异常弹出窗口

来自分类Dev

使用网络摄像头拍照

来自分类Dev

后台OpenCV中的Android摄像头

来自分类Dev

使用 IP 摄像头的 OpenCV 问题

来自分类Dev

网络摄像头视频流可在Chrome中运行,但不能在Firefox中运行

来自分类Dev

Django项目中的网络摄像头流

来自分类Dev

允许用户通过网络摄像头广播实时流

来自分类Dev

网络摄像头的MJPEG流不起作用

来自分类Dev

在Flask应用中嵌入WebRTC时没有网络摄像头流

来自分类Dev

如何在Emgu CV中从网络摄像头获取视频流?

来自分类Dev

在WPF中显示来自我的网络摄像头的视频流?

来自分类Dev

将网络摄像头视频流直接写入VPS中的指定目录

来自分类Dev

在WPF中显示来自我的网络摄像头的视频流?

Related 相关文章

  1. 1

    使用Java的OpenCV中的网络摄像头流

  2. 2

    java中的vlcj网络摄像头流

  3. 3

    使用OpenCV固定网络摄像头视频中的位置

  4. 4

    Qt OpenCV网络摄像头流打开和关闭

  5. 5

    Qt OpenCV网络摄像头流打开和关闭

  6. 6

    如何使用ffmpeg从网络摄像头访问压缩流

  7. 7

    使用MJPG流作为网络摄像头源

  8. 8

    OpenCV无法使用Python访问网络摄像头

  9. 9

    使用Opencv直接从网络摄像头获取灰度图像

  10. 10

    无法在OpenCV中使用网络摄像头显示图像

  11. 11

    延迟显示网络摄像头流

  12. 12

    在Python 2.7中使用OpenCV 2.4.7.0在网络摄像头源上叠加图像

  13. 13

    在Python 2.7中使用OpenCV 2.4.7.0在网络摄像头源上叠加图像

  14. 14

    使用 Python openCV 从实时馈送(网络摄像头)中提取光流作为数据(数字)

  15. 15

    加快Java OpenCV中的摄像头访问

  16. 16

    在Firefox中禁用网络摄像头

  17. 17

    在我正在开发的程序中,我需要使用 java 打开网络摄像头。为此,我使用 opencv 进行编码,但出现以下异常弹出窗口

  18. 18

    使用网络摄像头拍照

  19. 19

    后台OpenCV中的Android摄像头

  20. 20

    使用 IP 摄像头的 OpenCV 问题

  21. 21

    网络摄像头视频流可在Chrome中运行,但不能在Firefox中运行

  22. 22

    Django项目中的网络摄像头流

  23. 23

    允许用户通过网络摄像头广播实时流

  24. 24

    网络摄像头的MJPEG流不起作用

  25. 25

    在Flask应用中嵌入WebRTC时没有网络摄像头流

  26. 26

    如何在Emgu CV中从网络摄像头获取视频流?

  27. 27

    在WPF中显示来自我的网络摄像头的视频流?

  28. 28

    将网络摄像头视频流直接写入VPS中的指定目录

  29. 29

    在WPF中显示来自我的网络摄像头的视频流?

热门标签

归档