如何使用OpenImaj调整面板中的图像大小

时间:2016-01-11 11:14:22

标签: java image resize panel openimaj

我将OpenImaj用于项目,我需要将800 * 600的视频显示到面板,但是当我点击按钮时,我必须在1920,1080拍摄图像。

我的策略最初是在1920,1080从我的网络摄像头捕获,并在我的panelVideo中包含的标签图标中调整图像大小。

我的问题是性能非常低。

是否有一种有效的方法可以根据panelVideo的大小调整视频大小而不改变帧大小(我用于将图像保存为1920,1080)? 谢谢您的回答。 问候。

final VideoCapture vc = new VideoCapture(1920,1080);
vc.setFPS(10);
final VideoDisplay<MBFImage> display = VideoDisplay.createVideoDisplay(vc, panelVideo);
display.addVideoListener(new VideoDisplayAdapter<MBFImage>()
                    {
                        @Override
                        public void beforeUpdate(final MBFImage frame)
                        {
                             //here I create a bufferedImage from the resized frame
                                BufferedImage img = new BufferedImage(800, 600, BufferedImage.TYPE_INT_ARGB);
                                Graphics2D g = (Graphics2D) img.getGraphics();
                                g.drawImage(ImageUtilities.createBufferedImageForDisplay(frame), 0, 0, 800, 600, null);

                             //here is the label that I use to display the video
                                labelVideo.setIcon(new ImageIcon(ImageUtilities.createBufferedImageForDisplay(frame)));

                        }
                    });

2 个答案:

答案 0 :(得分:0)

你至少可以在循环中删除这样的固定代码 - 只创建一次

 //here I create a bufferedImage from the resized frame
 BufferedImage img = new BufferedImage(800, 600, BufferedImage.TYPE_INT_ARGB);
 Graphics2D g = (Graphics2D) img.getGraphics();

并且根据需要创建一次Icon和setImage()。除此之外,我不知道如何将MBF转换为BufferedImage,这是使用不同库的痛苦。 g.drawImage()是绘制缩放图像的好方法。

答案 1 :(得分:0)

有关允许您调整MBFImage大小的OpenIMAJ类,请参阅http://openimaj.org/apidocs/org/openimaj/image/processing/resize/package-frame.html。您必须玩并查看最快的内容,但在我的快速实验中,我发现BilinearInterpolation优于ResizeProcessor默认选项,但在{{1}中使用了不同的过滤器可能会更快。

不是每帧都创建一个新的ResizeProcessor,最好不要将MBFImage绘制成直接显示它们的Swing组件:http://openimaj.org/apidocs/org/openimaj/image/DisplayUtilities.ScalingImageComponent.htmlhttp://openimaj.org/apidocs/org/openimaj/image/DisplayUtilities.ImageComponent.html(注意技术上这些两者都在幕后转换为BufferedImage,但它们只分配一次图像并重新绘制,节省了大量时间。)