Java基于OpenCV的Surf特征检测与匹配
来源:互联网 发布:淘宝口令在线生成器 编辑:程序博客网 时间:2024/05/17 23:01
Mat srcImage = Highgui.imread("e:\\1.jpg");
Mat destImage = Highgui.imread("e:\\2.jpg");
if(srcImage.empty()||destImage.empty()){
System.out.println("图片读写失败");
return;
}
FeatureDetector dectorSurf = FeatureDetector.create(FeatureDetector.SURF);
MatOfKeyPoint srcKeyPoints=new MatOfKeyPoint();
MatOfKeyPoint destKeyPoints=new MatOfKeyPoint();
dectorSurf.detect(srcImage, srcKeyPoints);
dectorSurf.detect(destImage, destKeyPoints);
DescriptorExtractor extractor = DescriptorExtractor.create(DescriptorExtractor.SURF);
Mat srcDescriptor=new Mat();
Mat descDescriptor=new Mat();
extractor.compute(srcImage, srcKeyPoints, srcDescriptor);
extractor.compute(destImage, destKeyPoints, descDescriptor);
DescriptorMatcher descriptorMatcher = DescriptorMatcher.create(DescriptorMatcher.FLANNBASED);
MatOfDMatch matches=new MatOfDMatch();
descriptorMatcher.match(srcDescriptor, descDescriptor, matches);
double maxDistance=0; double minDistance=100;
for(int i=0; i<srcDescriptor.rows(); i++){
if(maxDistance<matches.toList().get(i).distance){
maxDistance = matches.toList().get(i).distance;
}
if(minDistance>matches.toList().get(i).distance){
minDistance = matches.toList().get(i).distance;
}
}
List<DMatch> goodMatchs = new ArrayList<DMatch>();
for(int i=0; i<srcDescriptor.rows(); i++){
if(matches.toList().get(i).distance<3*minDistance){
goodMatchs.add(matches.toList().get(i));
}
}
List<MatOfByte> matchesMask= new ArrayList<MatOfByte>();
Mat outMat = new Mat();
MatOfDMatch goodMatchsALl = new MatOfDMatch();
goodMatchsALl.fromList(goodMatchs);
List<MatOfDMatch> matchList = new ArrayList<MatOfDMatch>();
matchList.add(goodMatchsALl);
Features2d.drawMatches2(srcImage, srcKeyPoints, destImage, destKeyPoints, matchList, outMat, Scalar.all(-1), Scalar.all(-1), matchesMask, Features2d.NOT_DRAW_SINGLE_POINTS);
Highgui.imwrite("e:\\3.jpg", outMat);
Mat destImage = Highgui.imread("e:\\2.jpg");
if(srcImage.empty()||destImage.empty()){
System.out.println("图片读写失败");
return;
}
FeatureDetector dectorSurf = FeatureDetector.create(FeatureDetector.SURF);
MatOfKeyPoint srcKeyPoints=new MatOfKeyPoint();
MatOfKeyPoint destKeyPoints=new MatOfKeyPoint();
dectorSurf.detect(srcImage, srcKeyPoints);
dectorSurf.detect(destImage, destKeyPoints);
DescriptorExtractor extractor = DescriptorExtractor.create(DescriptorExtractor.SURF);
Mat srcDescriptor=new Mat();
Mat descDescriptor=new Mat();
extractor.compute(srcImage, srcKeyPoints, srcDescriptor);
extractor.compute(destImage, destKeyPoints, descDescriptor);
DescriptorMatcher descriptorMatcher = DescriptorMatcher.create(DescriptorMatcher.FLANNBASED);
MatOfDMatch matches=new MatOfDMatch();
descriptorMatcher.match(srcDescriptor, descDescriptor, matches);
double maxDistance=0; double minDistance=100;
for(int i=0; i<srcDescriptor.rows(); i++){
if(maxDistance<matches.toList().get(i).distance){
maxDistance = matches.toList().get(i).distance;
}
if(minDistance>matches.toList().get(i).distance){
minDistance = matches.toList().get(i).distance;
}
}
List<DMatch> goodMatchs = new ArrayList<DMatch>();
for(int i=0; i<srcDescriptor.rows(); i++){
if(matches.toList().get(i).distance<3*minDistance){
goodMatchs.add(matches.toList().get(i));
}
}
List<MatOfByte> matchesMask= new ArrayList<MatOfByte>();
Mat outMat = new Mat();
MatOfDMatch goodMatchsALl = new MatOfDMatch();
goodMatchsALl.fromList(goodMatchs);
List<MatOfDMatch> matchList = new ArrayList<MatOfDMatch>();
matchList.add(goodMatchsALl);
Features2d.drawMatches2(srcImage, srcKeyPoints, destImage, destKeyPoints, matchList, outMat, Scalar.all(-1), Scalar.all(-1), matchesMask, Features2d.NOT_DRAW_SINGLE_POINTS);
Highgui.imwrite("e:\\3.jpg", outMat);
0 0
- Java基于OpenCV的Surf特征检测与匹配
- Surf特征点检测与匹配
- Surf算法特征点检测与匹配
- Surf算法特征点检测与匹配
- OpenCV Surf特征匹配
- 【OpenCV学习笔记】三十八、特征检测与匹配(三)——SURF特征点检测与匹配
- OpenCV学习笔记__特征检测与匹配之 SURF算法
- 基于Harris的特征检测与匹配
- opencv特征检测与匹配
- OpenCV中feature2D学习——FAST特征点检测与SIFT/SURF/BRIEF特征提取与匹配
- OpenCV中的SURF特征匹配
- OpenCV检测图像SURF特征
- 重映射与SURF特征点检测与匹配
- Surf特征点检测与匹配代码分析
- Surf特征点检测与匹配代码分析
- Opencv Surf算子特征提取与最优匹配
- Opencv Surf算子特征提取与最优匹配
- OpenCV-Python sift/surf特征匹配与显示
- UIWebView显示本地图片的方法
- ubuntu下如何为普通用户赋予sudo权限
- L2---net_device---organization: net_device的组织
- web开发兼容性测试工具
- 记录
- Java基于OpenCV的Surf特征检测与匹配
- java规范
- GCC编译过程解析
- 自定义JSF Validator
- shell的字体颜色显示
- ios开发使用UIWebView显示多种文档
- ERP与易掌管MES在制造业生产管理中的联系
- Linux curl使用简单介绍
- 页面中时间范围的提醒。