0

プロジェクトに OpenImaj を使用しており、ビデオを 800*600 でパネルに表示する必要がありますが、ボタンをクリックしたときに 1920,1080 で画像をキャプチャする必要があります。

私の戦略は、最初は 1920,1080 で Web カメラからキャプチャし、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)));

                        }
                    });
4

2 に答える 2

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() は、スケーリングされた画像を描画する良い方法です。

于 2016-01-11T12:08:54.817 に答える
0

MBFImage のサイズを変更できる OpenIMAJ クラスについては、http: //openimaj.org/apidocs/org/openimaj/image/processing/resize/package-frame.htmlを参照してください。プレイして何が最速かを確認する必要がありますが、私の非常に簡単な実験では、デフォルトのオプション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れますが、画像を一度だけ割り当てて再描画するだけで多くの時間を節約できることに注意してください)。

于 2016-01-12T08:12:57.833 に答える