有没有办法在OpenCV 3 Java中使用SURF和SIFT?

时间:2015-06-29 08:34:31

标签: java opencv

我正在使用OpenCV 3,它有一个Java包装器,但我无法在Java中使用SURF和SIFT以及其他一些算法。我已经尝试了很多方法并且用Google搜索了很长时间,但我找不到任何方法解决这个问题。在某些地方我甚至看到有些人说现在有办法。不仅如此,在Java包装器中我也找不到VideoWriter类和BOWTrainer类等等。现在我的问题是为什么OpenCV有一个不完整的Java包装器,如果有很多问题,比如我上面提到的一些问题,那么就不需要为另一种语言发布一个不完整的包装器,这对于用户来说是不可用的。在OpenCV 3之前我可以写视频,但现在没有。我等了很长时间,OpenCV 3将是一个很好的版本,并将处理以前版本的所有问题,但现在它有更多的问题,然后以前的版本(不是Eclispe等的良好文档)。如果有人理解我的问题并且还有这种方式,请告诉我该怎么做。谢谢!

2 个答案:

答案 0 :(得分:1)

我手动修复了OpenCV包装器,它对我有用。请参阅我在SURF and SIFT algorithms doesn't work in OpenCV 3.0 Java

的回答

答案 1 :(得分:0)

U can implement sift in opencv3.
Here is the code...


package com.SR.view;

import static java.awt.Color.gray;
import java.awt.List;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import java.util.ArrayList;
import javax.imageio.ImageIO;
import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.core.MatOfKeyPoint;
import org.opencv.core.MatOfPoint;
import org.opencv.core.Scalar;
import org.opencv.core.Size;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
import org.opencv.features2d.FeatureDetector;
import org.opencv.features2d.Features2d;


public class sift_opencv {
    public static void main(String[] args) throws IOException {
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
        Mat blurredImage = new Mat();
        Mat hsvImage = new Mat();
        Mat mask = new Mat();
        Mat morphOutput = new Mat();
        Mat img;
        Mat maskedImage;
        //BufferedImage img;
        //img=ImageIO.read(new File("C:\\Users\\softroniics\\Documents\\NetBeansProjects\\SceneRecogintion\\src\\com\\SR\\view\\Penguins.png"));
        //File f= new File("C:\\Users\\softroniics\\Documents\\NetBeansProjects\\SceneRecogintion\\src\\com\\SR\\view\\Penguins.png");

        img=Imgcodecs.imread("C:\\Users\\softroniics\\Documents\\NetBeansProjects\\SceneRecogintion\\src\\com\\SR\\view\\burj.png");
        System.out.println(img);
        // remove some noise
        Imgcodecs.imwrite("out.png", img);
        Imgproc.blur(img, blurredImage, new Size(7, 7));

        // convert the frame to HSV
        Imgproc.cvtColor(blurredImage, hsvImage, Imgproc.COLOR_BGR2HSV);


        //convert to gray
        //Mat mat = new Mat(img.width(), img.height(), CvType.CV_8U, new Scalar(4));
        Mat gray = new Mat(img.width(), img.height(), CvType.CV_8U, new Scalar(4));
        Imgproc.cvtColor(img, gray, Imgproc.COLOR_BGR2GRAY);


        FeatureDetector fd = FeatureDetector.create(FeatureDetector.FAST);  
        MatOfKeyPoint regions = new MatOfKeyPoint();
        fd.detect(gray, regions);

        Mat output=new Mat();
        //int r=regions.rows();
        //System.out.println("REGIONS ARE: " + regions);
        Features2d.drawKeypoints(gray, regions,output );
        Imgcodecs.imwrite("out.png", output);

    }


}