-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathcolmap_import_features.cpp
More file actions
119 lines (83 loc) · 3.35 KB
/
colmap_import_features.cpp
File metadata and controls
119 lines (83 loc) · 3.35 KB
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#include <colmap.h>
#include <sys/stat.h>
using namespace colmap;
int main(int argc,char** argv)
{
std::cout << "colmap_import_features_main" << "\n";
colmap::InitializeGlog(argv);
std::string aIm1Name;
std::string aIm2Name;
std::string aHomName;
colmap::OptionManager options;
options.AddRequiredOption("homol", &aHomName);
options.AddRequiredOption("image1", &aIm1Name);
options.AddRequiredOption("image2", &aIm2Name);
options.AddDatabaseOptions();
options.Parse(argc, argv);
//read the database
Database database(*options.database_path);
Camera camera;
camera.InitializeWithName("SIMPLE_PINHOLE", 1.0, 1, 1);
camera.SetCameraId(database.WriteCamera(camera));
Image aIm1;
aIm1.SetName(aIm1Name);
//aIm1.SetImageId(0);
//Image aIm1 = database.ReadImageWithName(aIm1Name);
aIm1.SetCameraId(camera.CameraId());
aIm1.SetQvecPrior(Eigen::Vector4d(0.1, 0.2, 0.3, 0.4));
aIm1.SetTvecPrior(Eigen::Vector3d(0.1, 0.2, 0.3));
aIm1.SetImageId(database.WriteImage(aIm1));
Image aIm2;
aIm2.SetName(aIm2Name);
//aIm2.SetImageId(1);
//Image aIm2 = database.ReadImageWithName(aIm2Name);
aIm2.SetCameraId(camera.CameraId());
aIm2.SetQvecPrior(Eigen::Vector4d(0.1, 0.2, 0.3, 0.4));
aIm2.SetTvecPrior(Eigen::Vector3d(0.1, 0.2, 0.3));
aIm2.SetImageId(database.WriteImage(aIm2));
/* aIm1.SetCameraId(camera.CameraId());
aIm1.SetImageId(database.WriteImage(aIm1));
aIm2.SetCameraId(camera.CameraId());
aIm2.SetImageId(database.WriteImage(aIm2)); */
FeatureMatches aFeatMatches;
FeatureKeypoints aFeatKP1;
FeatureKeypoints aFeatKP2;
std::ifstream aFIn(aHomName.c_str(),std::ifstream::in);
int aKPId=0;
while (aFIn.good())
{
FeatureKeypoint aKP1;
FeatureKeypoint aKP2;
//double aPond;
//aFIn >> aKP1.x >> aKP1.y >> aKP2.x >> aKP2.y >> aPond ;
aFIn >> aKP1.x >> aKP1.y >> aKP2.x >> aKP2.y ;
std::cout << aKP1.x << " " << aKP1.y << " " << aKP2.x << " " << aKP2.y << "\n";
aFeatKP1.push_back(aKP1);
aFeatKP2.push_back(aKP2);
aFeatMatches.push_back( FeatureMatch(aKPId,aKPId) );
//FeatureMatch(const point2D_t point2D_idx1, const point2D_t point2D_idx2)
aKPId++;
std::cout << aKPId << " " << aIm1.ImageId() << " " << aIm2.ImageId() << " " << "\n";
}
std::cout << aKPId << " " << aIm1.ImageId() << " " << aIm2.ImageId() << " " << "\n";
database.WriteKeypoints(aIm1.ImageId() ,aFeatKP1);
database.WriteKeypoints(aIm2.ImageId() ,aFeatKP2);
database.WriteMatches(aIm1.ImageId() ,aIm2.ImageId() ,aFeatMatches);
database.Close();
aFIn.close();
/*
for all
*/
/*
// Write a new entry in the database. The user is responsible for making sure
// that the entry does not yet exist. For image pairs, the order of
// `image_id1` and `image_id2` does not matter.
void WriteKeypoints(const image_t image_id,
const FeatureKeypoints& keypoints) const;
void WriteDescriptors(const image_t image_id,
const FeatureDescriptors& descriptors) const;
void WriteMatches(const image_t image_id1, const image_t image_id2,
const FeatureMatches& matches) const;
*/
return EXIT_SUCCESS;
}