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