在JPanel中显示图像时出现问题

皱纹

我正在尝试编写一个获取视频帧,处理它们然后将其显示JPanel为图像的应用程序我使用OpenCV库获取视频帧(一个接一个),然后对其进行处理,然后将其显示在屏幕上(以获得播放视频的效果)。

我使用Java Swing创建了GUI。使用必要的按钮和一个面板来创建一个窗口应用程序,以显示视频。单击“开始”后,将playVideo调用一种方法,该方法将从所选视频中获取视频帧,对其进行修改并将其显示在面板中。我的代码如下所示:

public class HelloApp {
    private JFrame frame;
    private JPanel panel;
    final JLabel vidpanel1;
    ImageIcon image;
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                HelloApp window = new HelloApp();
                window.frame.setVisible(true);
            }
        });
    }

    public void playVideo() throws InterruptedException{
        Mat inFrame = new Mat();
        VideoCapture camera = new VideoCapture();
        camera.open(Config.filename);
        
        while (true) {
            if (!camera.read(inFrame))
                break;
            Imgproc.resize(inFrame, inFrame, new Size(Config.FRAME_WIDTH, Config.FRAME_HEIGHT), 0., 0., Imgproc.INTER_LINEAR);

            ... processing frame

            ImageIcon image = new ImageIcon(Functions.Mat2bufferedImage(inFrame)); // option 0
            vidpanel1.setIcon(image);
            vidpanel1.repaint();
        }
    }

    public HelloApp() {
        frame = new JFrame("MULTIPLE-TARGET TRACKING");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(null);//new FlowLayout() 
        frame.setResizable(false);
        frame.setBounds(50, 50, 800, 500);
        frame.setLocation(
            (3 / 4) * Toolkit.getDefaultToolkit().getScreenSize().width,
            (3 / 4) * Toolkit.getDefaultToolkit().getScreenSize().height
        );
        frame.setVisible(true);
        vidpanel1 = new JLabel();

        panel = new JPanel();
        panel.setBounds(11, 39, 593, 371);
        panel.add(vidpanel1);
        frame.getContentPane().add(panel);
        JButton btnStart = new JButton("START / REPLAY");
        btnStart.addActionListener(new ActionListener() {
            
            @Override
            public void actionPerformed(ActionEvent e) {
                EventQueue.invokeLater(new Runnable() {

                    @Override
                    public void run() {
                        try {
                            playVideo();
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                });
            }
        });
    }
}

每次单击“开始”按钮时,我都试图删除旧面板并创建一个新面板,但是它不起作用。我也尝试在运行方法之前使用方法playVideo清理所有面板:

panel.removeAll();
panel.repaint();
playVideo();

老实说,我不知道怎么了。创建了GUI,拍摄并处理了帧,但是面板仅显示最后一帧。我将不胜感激任何建议:)

LppEdd

首先,证明它实际上可以与您的代码一起使用。
在这里,我读取了位于该resources文件夹中的JPG图像,但实际上并不重要。

在此处输入图片说明

您的代码也有点混乱。您将附件固定在哪里btnStart JButton您还需要了解如何布局组件

您有一个mainJFrame和一个JPanel需要布局的根在这种情况下,我们可以选择BorderLayout

panel = new JPanel(new BorderLayout());

然后,我们添加我们的组件。

panel.add(btnStart, BorderLayout.PAGE_START);
panel.add(vidpanel1, BorderLayout.CENTER);

在此处输入图片说明

现在说到你的问题,你说

创建gui,拍摄并处理帧,但是面板仅显示最后一帧

我不知道“最后一帧”部分是多少,这主要是因为您正在事件调度线程内部运行无限循环-阻塞循环,这将导致GUI冻结并变得无响应。

在其中,actionPerformed您实际上应该生成一个new Thread,在其中,playVideo您应该包装

ImageIcon image = new ImageIcon(Functions.Mat2bufferedImage(inFrame));
vidpanel1.setIcon(image);
vidpanel1.repaint(); // Remove this

在中EventQueue.invokeAndWait,例如

// Process frame
...

// Update GUI
EventQueue.invokeAndWait(() -> {
  ImageIcon image = new ImageIcon(Functions.Mat2bufferedImage(inFrame));
  vidpanel1.setIcon(image);
});

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在ScrollView中显示图像时出现问题

来自分类Dev

用HTML显示磁盘中的图像时出现问题

来自分类Dev

使用CarrierWave在Rails中显示图像时出现问题

来自分类Dev

在ScrollView中显示图像时出现问题

来自分类Dev

在显示来自JSON查询的图像时出现问题

来自分类Dev

在Keystone.js中显示带有说明的画廊图像时出现问题

来自分类Dev

Android应用中旋转图像时出现问题

来自分类Dev

在div中右对齐图像时出现问题

来自分类Dev

在Chrome / Firefox / Safari中渲染图像时出现问题

来自分类Dev

在dompdf和cakephp中显示rowspan时出现问题

来自分类Dev

在Java中显示图形时出现问题

来自分类Dev

在HTML中显示PHP代码时出现问题

来自分类Dev

Python:显示字典中的值时出现问题

来自分类Dev

编译图像时出现问题

来自分类Dev

导入图像资产时出现问题

来自分类Dev

编译图像时出现问题

来自分类Dev

尝试显示远程图像 (GET php) 时出现问题 - 损坏/空图像

来自分类Dev

批量显示变量时出现问题

来自分类Dev

显示CSS菜单时出现问题

来自分类Dev

显示Google图表时出现问题

来自分类Dev

在JPanel中集中对齐JLabel中的文本时出现问题

来自分类Dev

刷新页面时显示从Firebase上传的图像时出现问题

来自分类Dev

在elFinder中使用elfinder.min.js显示图像时出现问题

来自分类Dev

呈现大型html文件时出现问题(链接错误,图像无法显示)

来自分类Dev

单击图像时播放音频时出现问题

来自分类Dev

Python 3.8.5中的Tkinter:在函数中创建多个图像作为按钮时出现问题

来自分类Dev

在WP8.1应用程序中滚动和缩放图像时出现问题

来自分类Dev

在Android Studio中从Firebase数据库检索图像时出现问题

来自分类Dev

在WP8.1应用程序中滚动和缩放图像时出现问题

Related 相关文章

  1. 1

    在ScrollView中显示图像时出现问题

  2. 2

    用HTML显示磁盘中的图像时出现问题

  3. 3

    使用CarrierWave在Rails中显示图像时出现问题

  4. 4

    在ScrollView中显示图像时出现问题

  5. 5

    在显示来自JSON查询的图像时出现问题

  6. 6

    在Keystone.js中显示带有说明的画廊图像时出现问题

  7. 7

    Android应用中旋转图像时出现问题

  8. 8

    在div中右对齐图像时出现问题

  9. 9

    在Chrome / Firefox / Safari中渲染图像时出现问题

  10. 10

    在dompdf和cakephp中显示rowspan时出现问题

  11. 11

    在Java中显示图形时出现问题

  12. 12

    在HTML中显示PHP代码时出现问题

  13. 13

    Python:显示字典中的值时出现问题

  14. 14

    编译图像时出现问题

  15. 15

    导入图像资产时出现问题

  16. 16

    编译图像时出现问题

  17. 17

    尝试显示远程图像 (GET php) 时出现问题 - 损坏/空图像

  18. 18

    批量显示变量时出现问题

  19. 19

    显示CSS菜单时出现问题

  20. 20

    显示Google图表时出现问题

  21. 21

    在JPanel中集中对齐JLabel中的文本时出现问题

  22. 22

    刷新页面时显示从Firebase上传的图像时出现问题

  23. 23

    在elFinder中使用elfinder.min.js显示图像时出现问题

  24. 24

    呈现大型html文件时出现问题(链接错误,图像无法显示)

  25. 25

    单击图像时播放音频时出现问题

  26. 26

    Python 3.8.5中的Tkinter:在函数中创建多个图像作为按钮时出现问题

  27. 27

    在WP8.1应用程序中滚动和缩放图像时出现问题

  28. 28

    在Android Studio中从Firebase数据库检索图像时出现问题

  29. 29

    在WP8.1应用程序中滚动和缩放图像时出现问题

热门标签

归档