功能整合
至此基本的功能部件已经撰写的差不多了,接下来就是将这些基本功能封装到类中。
District类
1
2
3
4
5
6
7
8
9
10
11
12
13
14public class District {
public double Left;
public double Right;
public double Top;
public double Bottom;
District(double left,double right,double top,double bottom){
this.Left = left;
this.Right = right;
this.Top = top;
this.Bottom = bottom;
}
}区域的结构体类。
四个成员变量分别代表了矩形的边框位置信息。
通过四个位置来构造district类。
AreaSearch类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49public class AreaSearch {
//创建区域
public List<District> Creat_District(){
List<District> district_list = new ArrayList<District>();
District district_1 = new District(116.35609462605613,116.35809070137164 ,
40.006850750760485,40.00527143350979);
District district_2 = new District(116.35805850227803,116.3610959501106 ,
40.00690797043768,40.00488486861002);
District district_3 = new District(116.3561155131877,116.3580581918368 ,
40.00517270621107,40.00429274172892);
District district_4 = new District(116.35813332305531,116.36226554007133 ,
40.00481085303074,40.00314959336152);
District district_5 = new District(116.35472021913039,116.35821918730497 ,
40.004169381315634,40.002565675659014);
District district_6 = new District(116.35477499180625,116.35830615907452 ,
40.00245168494597,40.00131673013192);
District district_7 = new District(116.3582954260433,116.3613650729695 ,
40.00300270692919,40.00159635843175);
district_list.add(district_1);
district_list.add(district_2);
district_list.add(district_3);
district_list.add(district_4);
district_list.add(district_5);
district_list.add(district_6);
district_list.add(district_7);
return district_list;
}
//当前坐标是否在区域中
private boolean in_District(LatLng latlng, District district){
if(latlng.longitude>=district.Left && latlng.longitude<=district.Right){
if(latlng.latitude>=district.Bottom && latlng.latitude<=district.Top){
return true;
}
return false;
}
else
return false;
}
//返回当前坐标所属的区号
public int getDistrict(LatLng latlng,List<District>district_list){
int district_id = 0;//要返回的区号
for(int i=1;i<district_list.size();i++){
if(in_District(latlng,district_list.get(i-1))){
district_id =i;
}
}
return district_id;
}
}区域查找类。
Creat_District():创建一个district的数组,包含了地图中所有区域的信息。(区域信息是提前写死的)
in_District(LatLng latlng, District district):判断一个坐标是否在区域中。
getDistrict(LatLng latlng,List<District>district_list):返回当前坐标所属的区号
FeatureMatch类
1 | public class FeatureMatch { |
图像特征匹配类
Score(Bitmap src_bitmap1, Bitmap src_bitmap2):返回传入两张图片的匹配得分(distance)
Ransac_aver(List<DMatch> matches):计算RANSAC提纯后的distance平均值
Mat drawMatchs(Mat img1,MatOfKeyPoint key1,Mat img2,MatOfKeyPoint key2,MatOfDMatch matches,boolean imageOnly):绘制两张图片对比图,返回类型为矩阵。imageOnly参数:是否画出匹配线条。
最后还有一点小坑
1 | OpenCVLoader.initDebug(); |
新创建的activity一定要记得加载Opencv,不然一些API函数会报错无法使用。