【问题标题】:Display IplImage (JavaCV) on an SWT canvas在 SWT 画布上显示 IplImage (JavaCV)
【发布时间】:2011-07-19 08:53:31
【问题描述】:

我正在将 JavaCV 用于大学项目。它本质上是一个运动检测器。

我使用 OpenCVFrameGrabber 类从网络摄像头获取帧,我想在我的 GUI 上显示抓取的帧。

我正在使用 SWT,我认为将帧显示到 Canvas 组件中会很好。 我有一个问题,因为 OpenCVFrameGrabber 提供图像作为 IplImage 类的实例,而 SWT 使用 org.eclipse.swt.graphics.Image 图像类。

所以我应该以某种方式将图像从 IplImage 转换为 SWT Image。最好的方法是什么?

【问题讨论】:

    标签: java image opencv swt


    【解决方案1】:

    我最近将 BufferedImages (AWT) 转换为 SWT 图像对象。 我使用了以下sn-p:java2s.com

    也许代码可以帮助您入门。或者有人已经将 IplImages 转换为 BufferedImages,您可以“管道”这两种转换方法。

    干杯

    【讨论】:

    • 将 awt 图像转换为缓冲图像很容易。 IplImage 本身公开了这样做的方法,我想这会起作用。但是由于 swt 的一些其他问题,团队决定切换回 swing,我们不再需要转换图像...谢谢您的帮助!
    【解决方案2】:
    import java.awt.GridLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.image.BufferedImage;
    import java.util.logging.Level;
    import java.util.logging.Logger;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.SwingWorker;
    
    import com.googlecode.javacpp.Loader;
    import com.googlecode.javacv.*;
    import com.googlecode.javacv.cpp.*;
    import static com.googlecode.javacv.cpp.opencv_core.*;
    
    @SuppressWarnings("serial")
    public class CFrameTest extends JFrame {
        JButton jbtStart;
        JButton jbtStop;
        CanvasFrame frame;
        FrameGrabber grabber;
        IplImage grabbedImage;
        public CFrameTest() {
            super("test");
            setSize(250, 100);
            setLocationRelativeTo(null);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setLayout(new GridLayout(1, 2));
            jbtStart = new JButton("Start camera");
            jbtStop = new JButton("Stop camera");
            this.add(jbtStart);
            this.add(jbtStop);
            setVisible(true);
            jbtStart.addActionListener(
                    new ActionListener() {
                        public void actionPerformed(ActionEvent e) {
                            System.out.println("Startcap");
                            jbtStart.setEnabled(false);
                            jbtStop.setEnabled(true);
                            try {
    
                                (new CameraSwingWorker()).execute();
                                /*startCamera();*/
    
    
                            } catch (Exception ex) {
                                Logger.getLogger(CFrameTest.class.getName()).log(Level.SEVERE, null, ex);
                            }
                        }
                    });
            jbtStop.addActionListener(
                    new ActionListener() {
                        public void actionPerformed(ActionEvent e) {
                            System.out.println("Stopcap");
                            jbtStart.setEnabled(true);
                            jbtStop.setEnabled(false);
                            frame.setVisible(false);
                        }
                    });
            Loader.load(opencv_objdetect.class);
        }
        public static void main(String[] args) {
            CFrameTest testFrame = new CFrameTest();
        }
        public void startCamera() throws Exception {
            frame = new CanvasFrame("Test");
            grabber = new OpenCVFrameGrabber(0);
            CvMemStorage storage = CvMemStorage.create();
            grabber.start();
            grabbedImage = grabber.grab();
            while (frame.isVisible() && (grabbedImage = grabber.grab()) != null)
            {
                BufferedImage bfimg = grabbedImage.getBufferedImage();
                //grabbedImage.copyTo(bfimg);
                frame.showImage(bfimg);
    
                //frame.showImage(grabbedImage);
                cvClearMemStorage(storage);
            }
            grabber.stop();
        }
    
    
        class CameraSwingWorker extends SwingWorker<String, Object> {
            @Override
            public String doInBackground() {
                try {
                    startCamera();
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                return "yeah";
            }
    
            @Override
            protected void done() {
                try {} catch (Exception ignore) {
                }
            }
        }
    
    
    
    
    }
    
    /*javax.swing.SwingWorker*/
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-25
      • 2016-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多