2016-01-11 2 views
0

Я использую OpenImaj для проекта, и мне нужно отображать видео в 800 * 600 на панели, но я должен снимать изображения с 1920 года1080, когда я нажимаю кнопку.Как изменить размер изображения в панели с помощью OpenImaj

Моя стратегия была первоначально захвачена с моей веб-камеры в 1920 году1080 и для изменения размера изображения в значке ярлыка, содержащегося в моей панели видео.

Моя проблема в том, что производительность очень низкая.

Есть ли эффективный способ изменения размера видео в соответствии с размером панели видео без изменения размера кадра (который я использую для сохранения изображения в 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))); 

         } 
        }); 

ответ

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(); 

, а также есть икона создана раз и setImage(), как это необходимо. Кроме того, я не знаю, как конвертировать MBF в BufferedImage, что боль от использования разных библиотек. g.drawImage() - хороший способ рисовать масштабированное изображение.

0

См. http://openimaj.org/apidocs/org/openimaj/image/processing/resize/package-frame.html для классов OpenIMAJ, которые позволяют изменять размер MBFImage. Вам нужно будет сыграть и посмотреть, что быстрее, но в моих очень быстрых экспериментах я нашел BilinearInterpolation лучше, чем ResizeProcessor с настройками по умолчанию, однако использование другого фильтра в ResizeProcessor может быть быстрее.

Вместо того, чтобы создавать новую BufferedImage каждый кадр, вы, вероятно, будет лучше рисовать MBFImage в компонент Swing-который отображает их непосредственно: http://openimaj.org/apidocs/org/openimaj/image/DisplayUtilities.ScalingImageComponent.html или http://openimaj.org/apidocs/org/openimaj/image/DisplayUtilities.ImageComponent.html (обратите внимание, что технически это и преобразовать в BufferedImage за кулисами, но только они выделить изображение один раз и просто перерисовать в него сэкономить много времени).

+0

Благодарим вас за ответ. До сих пор я тестировал BilinearInterpolation, и производительность была еще плохая. –

0

Благодарим за ответы. До сих пор я тестировал BilinearInterpolation, и производительность была еще плохая.

Я также вывести из цикла это, но ничего не изменилось

BufferedImage img = new BufferedImage(800, 600, BufferedImage.TYPE_INT_ARGB); 
Graphics2D g = (Graphics2D) img.getGraphics(); 

Я заинтересован в ScalingImageComponent, но я действительно не знаю, как использовать его. У вас есть примеры?

спасибо.

Смежные вопросы