opencv的features2d包中提供了surf,sift和orb等特征点算法,用于图像查找图像对象,搜索对象,分析对象,识别对象,合成全景等场合。
研究这些算法的原理和实现,是图像识别基础,OPENCV库使用2.413
通过一些代码研究三种特征点算法,我有意把原始图像转为灰度并放置90与照处中人物比较,以研究三种算法对人脸识别的优点和局限。辅助使用了人脸查找获取待查找图像中人脸子矩阵。上代码。
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.MatOfDMatch;
import org.opencv.core.MatOfKeyPoint;
import org.opencv.core.MatOfRect;
import org.opencv.core.Size;
import org.opencv.features2d.DMatch;
import org.opencv.features2d.DescriptorExtractor;
import org.opencv.features2d.DescriptorMatcher;
import org.opencv.features2d.FeatureDetector;
import org.opencv.features2d.Features2d;
import org.opencv.highgui.Highgui;
import org.opencv.imgproc.Imgproc;
import org.opencv.objdetect.CascadeClassifier;
public class ExtractSIFT2 {
public static void main(String[] args) {
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
Mat src = Highgui.imread("E:/work/qqq/Y9.jpg");
Mat dst = Highgui.imread("E:/work/qqq/psb.jpg");
MatOfRect mr = getFace(dst);
Mat sub = dst.submat(mr.toArray()[0]);
Highgui.imwrite("E:/work/qqq/Y4.jpg", FeatureSurfBruteforce(src.t(), sub));
Highgui.imwrite("E:/work/qqq/Y5.jpg", FeatureSiftLannbased(src.t(), sub));
Highgui.imwrite("E:/work/qqq/Y6.jpg", FeatureOrbLannbased(src.t(), sub));
}
public static Ma