web-dev-qa-db-fra.com

Méthode équivalente pour imshow dans opencv Java build

désolé si je pose une question idiote, j'essaie d'apprendre openCV en utilisant Java build. Dans les exemples d'opencv, j'ai trouvé qu'il y a la méthode imshow en c ++ ou showImage en python, mais je recherche dans opencv = Java API, je ne trouve pas la méthode imshow.

Quelle est la méthode égale d'imshow () et waitKey () dans opencv avec Java build?

28
Orochi

Il n'y a pas encore Java wrapper highgui ( link ). Vous devez utiliser swing ou swt pour afficher l'image. Voir: Opencv Java - Charger l'image dans l'interface graphique

9
ArtemStorozhuk
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();
    }
}
28
Mar

Ceci est une solution prête à l'emploi pour l'équivalent Imshow () dans Java OpenCV Son simple à utiliser. L'API ressemblera à:

Imshow im = new Imshow ("Titre");

im.showImage (matimage);

Visitez ici https://github.com/master-atul/ImShow-Java-OpenCV

7
Atul

J'ai fait quelque chose avec swing et awt.

Tout d'abord, obtenez BufferedImage de Mat img par imencode et ImageIo.read

        MatOfByte mMatOfByte = new MatOfByte()
        imencode(".png", img, mMatOfByte);
        byte[] byteArray = mMatOfByte.toArray();
        InputStream in = new ByteArrayInputStream(byteArray);
        BufferedImage srcImage = ImageIO.read(in);

Deuxièmement, changez-le en largeur et hauteur de taille cible (l, h) et utilisez Indice de rendu pour obtenir une image nette dans le cas d'agrandissement ou de réduction.

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

J'ai utilisé la cible bufImage dans la méthode paintComponent() de JPanel.

Pour waitKey(), j'ai utilisé KeyEventDispatcher.

3
Chi Kim

vous devez utiliser Java balançoires ou awt pour afficher les images .. regardez le code en cours d'exécution http://projectimageprocessing.blogspot.in/2013/05/introduction.html

2
RAUSHAN RAJ