我使用的是OpenCV 3,它有一个Java包装器,但我不能在Java中使用SURF和SIFT以及其他一些算法。我尝试了很多方法,在谷歌上搜索了很长时间,但我找不到解决这个问题的任何方法。在某个地方,我甚至看到一些人说现在有办法了。不仅如此,在Java包装器中,我也找不到VideoWriter
类和BOWTrainer
类等等。现在我的问题是,为什么OpenCV有一个不完整的Java包装器,如果有很多问题,比如我提到的,那么就没有必要为另一种语言发布不完整的包装器,这对用户来说是不可用的。在OpenCV 3之前,我可以写视频,但现在不行。我等了很长时间,OpenCV 3将是一个好版本,并将解决以前版本的所有问题,但现在它比以前版本有更多的问题(不是Eclispe的好文档…等等)。如果有人理解我的问题,也有办法解决这个问题,请告诉我该怎么办。谢谢!
我手动修复了OpenCV包装器,它对我有效。请参阅SURF和SIFT算法的答案;t在OpenCV 3.0 Java 中工作
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);
}
}