如何在java / javacv中的图像上绘制检测到的关键点?

时间:2014-03-14 22:16:03

标签: java opencv javacv feature-detection keypoint

有人能告诉我如何检测图像的关键点并在java中的该图像上绘制关键点? 我试过smt,但我无法弄清楚如何绘制它们? 关于我应该如何进行的任何想法或任何绘制我的代码的想法?

final IplImage image1 = cvLoadImage(
                "C:/Users/Can/Desktop/panorama_image1.jpg",
                CV_LOAD_IMAGE_GRAYSCALE);

        final CanvasFrame canvas1 = new CanvasFrame("Image1");

        canvas1.showImage(image1);

        canvas1.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);

        SIFT sift = new SIFT();

        KeyPoint keypoint1 = new KeyPoint();

        sift.detect(image1, null, keypoint1);

        System.out.println("Keypoints for image1: " + keypoint1.capacity());

2 个答案:

答案 0 :(得分:2)

如果您或其他人仍需要答案,我相信可能的方法是

opencv_features2d.drawKeypoints(_image1, keypoint1, Mat.EMPTY);

然后,您可以使用

_image1保存到文件中

ImageIO.write(_image1.getBufferedImage(), "png", new File("image1.png"));

但在此之前,您必须打开image1作为Mat对象: Mat _image1 = new Mat(image1);

答案 1 :(得分:1)

假设您或其他人仍然需要此操作,您可以执行以下操作。

使用Java,在计算了关键点后,可以使用OpenCV中的Features2d类执行以下操作。

    // draw keypoints on image
    Mat outputImage = new Mat();
    // Your image, keypoints, and output image
    Features2d.drawKeypoints(image, keypoints, outputImage);
    String filename = "keypoints.jpg";
    System.out.println(String.format("Writing %s...", filename));
    Highgui.imwrite(filename, outputImage);