ばかげた質問をしている場合は申し訳ありませんが、Java ビルドを使用して openCV を学習しようとしています。opencv サンプルでは、C++ にメソッド imshow または python に showImage があることがわかりましたが、opencv Java API で検索すると、imshow メソッドが見つかりません。
Javaビルドでopencvのimshow()とwaitKey()のequalメソッドとは?
public static void showResult(Mat img) {
Imgproc.resize(img, img, new Size(640, 480));
MatOfByte matOfByte = new MatOfByte();
Highgui.imencode(".jpg", img, matOfByte);
byte[] byteArray = matOfByte.toArray();
BufferedImage bufImage = null;
try {
InputStream in = new ByteArrayInputStream(byteArray);
bufImage = ImageIO.read(in);
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
frame.getContentPane().add(new JLabel(new ImageIcon(bufImage)));
frame.pack();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
Java highgui ラッパーはまだありません (リンク)。画像を表示するには、swing または swt を使用する必要があります。参照: Opencv Java - イメージを GUI にロード
私はswingとawtで何かを作りました。
まず、BufferedImage
Mat img から取得imencode
します。ImageIo.read
MatOfByte mMatOfByte = new MatOfByte()
imencode(".png", img, mMatOfByte);
byte[] byteArray = mMatOfByte.toArray();
InputStream in = new ByteArrayInputStream(byteArray);
BufferedImage srcImage = ImageIO.read(in);
次に、ターゲット サイズの幅と高さ (w,h) に変更し、レンダリング ヒントを使用して、ケースを拡大または縮小したときにきれいな画像を取得します。
bufImage = new BufferedImage(w, h, srcImage.getType());
Graphics2D g = bufImage.createGraphics();
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g.drawImage(srcImage, 0,0, w, h, 0, 0, srcImage.getWidth(), srcImage.getHeight(), null);
bufImage
JPanelのpaintComponent()
メソッドでターゲットを使用しました。
のためwaitKey()
に、私は使用しKeyEventDispatcher
ました。
画像を表示するには、Javaスイングまたはawtを使用する必要があります..実行中のコードを見てくださいhttp://projectimageprocessing.blogspot.in/2013/05/introduction.html