uzh-rpg / dslam_open

Public code for "Data-Efficient Decentralized Visual SLAM"
GNU General Public License v3.0
288 stars 73 forks source link

Problem about opencv #14

Closed conallwang closed 4 years ago

conallwang commented 4 years ago

Hi, I have followed the install instructions in README.md. But when I run catkin build, there is something wrong.

Starting  >>> dbow2 

Errors     << dbow2:make /home/johnson/workspace/dslam_ws/logs/dbow2/build.make.021.log
In file included from /home/johnson/workspace/dslam_ws/devel/include/DVision/DVision.h:42:0,
                 from /home/johnson/workspace/dslam_ws/src/DBoW2/src/FBrief.cpp:14:
/home/johnson/workspace/dslam_ws/devel/include/DVision/BRIEF256.h: In member function ‘void DVision::BRIEF_t<Bits>::compute(const cv::Mat&, const std::vector<cv::KeyPoint>&, std::vector<std::bitset<Bits> >&, bool) const’:
/home/johnson/workspace/dslam_ws/devel/include/DVision/BRIEF256.h:207:7: error: ‘cvtColor’ is not a member of ‘cv’
       cv::cvtColor(image, aux, cv::COLOR_RGB2GRAY);
       ^
/home/johnson/workspace/dslam_ws/devel/include/DVision/BRIEF256.h:207:32: error: ‘COLOR_RGB2GRAY’ is not a member of ‘cv’
       cv::cvtColor(image, aux, cv::COLOR_RGB2GRAY);
                                ^
/home/johnson/workspace/dslam_ws/devel/include/DVision/BRIEF256.h:214:5: error: ‘GaussianBlur’ is not a member of ‘cv’
     cv::GaussianBlur(aux, im, ksize, sigma, sigma);
     ^
/home/johnson/workspace/dslam_ws/devel/include/DVision/BRIEF256.h: In member function ‘void DVision::BRIEF_t<Bits>::generateTestPoints()’:
/home/johnson/workspace/dslam_ws/devel/include/DVision/BRIEF256.h:276:3: error: ‘DUtils’ has not been declared
   DUtils::Random::SeedRandOnce();
   ^
/home/johnson/workspace/dslam_ws/devel/include/DVision/BRIEF256.h:284:12: error: ‘DUtils’ has not been declared
       x1 = DUtils::Random::RandomGaussianValue(g_mean, g_sigma);
            ^
/home/johnson/workspace/dslam_ws/devel/include/DVision/BRIEF256.h:289:12: error: ‘DUtils’ has not been declared
       y1 = DUtils::Random::RandomGaussianValue(g_mean, g_sigma);
            ^
/home/johnson/workspace/dslam_ws/devel/include/DVision/BRIEF256.h:303:12: error: ‘DUtils’ has not been declared
       x2 = DUtils::Random::RandomGaussianValue(meanx, sigma2);
            ^
/home/johnson/workspace/dslam_ws/devel/include/DVision/BRIEF256.h:308:12: error: ‘DUtils’ has not been declared
       y2 = DUtils::Random::RandomGaussianValue(meany, sigma2);
            ^
In file included from /home/johnson/workspace/dslam_ws/devel/include/DVision/DVision.h:42:0,
                 from /home/johnson/workspace/dslam_ws/src/DBoW2/src/FORB.cpp:24:
/home/johnson/workspace/dslam_ws/devel/include/DVision/BRIEF256.h: In member function ‘void DVision::BRIEF_t<Bits>::compute(const cv::Mat&, const std::vector<cv::KeyPoint>&, std::vector<std::bitset<Bits> >&, bool) const’:
/home/johnson/workspace/dslam_ws/devel/include/DVision/BRIEF256.h:207:7: error: ‘cvtColor’ is not a member of ‘cv’
       cv::cvtColor(image, aux, cv::COLOR_RGB2GRAY);
       ^
/home/johnson/workspace/dslam_ws/devel/include/DVision/BRIEF256.h:207:32: error: ‘COLOR_RGB2GRAY’ is not a member of ‘cv’
       cv::cvtColor(image, aux, cv::COLOR_RGB2GRAY);
                                ^
/home/johnson/workspace/dslam_ws/devel/include/DVision/BRIEF256.h:214:5: error: ‘GaussianBlur’ is not a member of ‘cv’
     cv::GaussianBlur(aux, im, ksize, sigma, sigma);
     ^
In file included from /home/johnson/workspace/dslam_ws/src/DBoW2/src/FBrief.cpp:15:0:
/home/johnson/workspace/dslam_ws/src/DBoW2/include/DBoW2/FBrief.h: At global scope:
/home/johnson/workspace/dslam_ws/src/DBoW2/include/DBoW2/FBrief.h:27:20: error: ‘BRIEF’ in namespace ‘DVision’ does not name a type
   typedef DVision::BRIEF::bitset TDescriptor;
                    ^
In file included from /home/johnson/workspace/dslam_ws/src/DBoW2/include/DBoW2/FBrief.h:17:0,
                 from /home/johnson/workspace/dslam_ws/src/DBoW2/src/FBrief.cpp:15:
/home/johnson/workspace/dslam_ws/src/DBoW2/include/DBoW2/FClass.h:27:9: error: ‘class DBoW2::FClass::TDescriptor’ is private
   class TDescriptor;
         ^
In file included from /home/johnson/workspace/dslam_ws/src/DBoW2/src/FBrief.cpp:15:0:
/home/johnson/workspace/dslam_ws/src/DBoW2/include/DBoW2/FBrief.h:28:17: error: within this context
   typedef const TDescriptor *pDescriptor;
                 ^
In file included from /home/johnson/workspace/dslam_ws/src/DBoW2/include/DBoW2/FBrief.h:17:0,
                 from /home/johnson/workspace/dslam_ws/src/DBoW2/src/FBrief.cpp:15:
/home/johnson/workspace/dslam_ws/src/DBoW2/include/DBoW2/FClass.h:27:9: error: ‘class DBoW2::FClass::TDescriptor’ is private
   class TDescriptor;
         ^
In file included from /home/johnson/workspace/dslam_ws/src/DBoW2/src/FBrief.cpp:15:0:
/home/johnson/workspace/dslam_ws/src/DBoW2/include/DBoW2/FBrief.h:36:5: error: within this context
     TDescriptor &mean);
     ^
In file included from /home/johnson/workspace/dslam_ws/src/DBoW2/include/DBoW2/FBrief.h:17:0,
                 from /home/johnson/workspace/dslam_ws/src/DBoW2/src/FBrief.cpp:15:
/home/johnson/workspace/dslam_ws/src/DBoW2/include/DBoW2/FClass.h:27:9: error: ‘class DBoW2::FClass::TDescriptor’ is private
   class TDescriptor;
         ^
In file included from /home/johnson/workspace/dslam_ws/src/DBoW2/src/FBrief.cpp:15:0:
/home/johnson/workspace/dslam_ws/src/DBoW2/include/DBoW2/FBrief.h:44:32: error: within this context
   static double distance(const TDescriptor &a, const TDescriptor &b);
                                ^
In file included from /home/johnson/workspace/dslam_ws/src/DBoW2/include/DBoW2/FBrief.h:17:0,
                 from /home/johnson/workspace/dslam_ws/src/DBoW2/src/FBrief.cpp:15:
/home/johnson/workspace/dslam_ws/src/DBoW2/include/DBoW2/FClass.h:27:9: error: ‘class DBoW2::FClass::TDescriptor’ is private
   class TDescriptor;
         ^
In file included from /home/johnson/workspace/dslam_ws/src/DBoW2/src/FBrief.cpp:15:0:
/home/johnson/workspace/dslam_ws/src/DBoW2/include/DBoW2/FBrief.h:44:54: error: within this context
   static double distance(const TDescriptor &a, const TDescriptor &b);
                                                      ^
In file included from /home/johnson/workspace/dslam_ws/src/DBoW2/include/DBoW2/FBrief.h:17:0,
                 from /home/johnson/workspace/dslam_ws/src/DBoW2/src/FBrief.cpp:15:
/home/johnson/workspace/dslam_ws/src/DBoW2/include/DBoW2/FClass.h:27:9: error: ‘class DBoW2::FClass::TDescriptor’ is private
   class TDescriptor;
         ^
In file included from /home/johnson/workspace/dslam_ws/src/DBoW2/src/FBrief.cpp:15:0:
/home/johnson/workspace/dslam_ws/src/DBoW2/include/DBoW2/FBrief.h:51:37: error: within this context
   static std::string toString(const TDescriptor &a);
                                     ^
In file included from /home/johnson/workspace/dslam_ws/src/DBoW2/include/DBoW2/FBrief.h:17:0,
                 from /home/johnson/workspace/dslam_ws/src/DBoW2/src/FBrief.cpp:15:
/home/johnson/workspace/dslam_ws/src/DBoW2/include/DBoW2/FClass.h:27:9: error: ‘class DBoW2::FClass::TDescriptor’ is private
   class TDescriptor;
         ^
In file included from /home/johnson/workspace/dslam_ws/src/DBoW2/src/FBrief.cpp:15:0:
/home/johnson/workspace/dslam_ws/src/DBoW2/include/DBoW2/FBrief.h:58:26: error: within this context
   static void fromString(TDescriptor &a, const std::string &s);
                          ^
In file included from /home/johnson/workspace/dslam_ws/src/DBoW2/include/DBoW2/FBrief.h:17:0,
                 from /home/johnson/workspace/dslam_ws/src/DBoW2/src/FBrief.cpp:15:
/home/johnson/workspace/dslam_ws/src/DBoW2/include/DBoW2/FClass.h:27:9: error: ‘class DBoW2::FClass::TDescriptor’ is private
   class TDescriptor;
         ^
In file included from /home/johnson/workspace/dslam_ws/src/DBoW2/src/FBrief.cpp:15:0:
/home/johnson/workspace/dslam_ws/src/DBoW2/include/DBoW2/FBrief.h:65:35: error: within this context
   static void toMat32F(const std::vector<TDescriptor> &descriptors, 
                                   ^
/home/johnson/workspace/dslam_ws/src/DBoW2/include/DBoW2/FBrief.h:35:15: error: ‘static void DBoW2::FBrief::meanValue(const std::vector<const DBoW2::FClass::TDescriptor*>&, DBoW2::FClass::TDescriptor&)’ cannot be declared
   static void meanValue(const std::vector<pDescriptor> &descriptors, 
               ^
In file included from /home/johnson/workspace/dslam_ws/src/DBoW2/include/DBoW2/FBrief.h:17:0,
                 from /home/johnson/workspace/dslam_ws/src/DBoW2/src/FBrief.cpp:15:
/home/johnson/workspace/dslam_ws/src/DBoW2/include/DBoW2/FClass.h:35:16: error:   since ‘virtual void DBoW2::FClass::meanValue(const std::vector<const DBoW2::FClass::TDescriptor*>&, DBoW2::FClass::TDescriptor&)’ declared in base class
   virtual void meanValue(const std::vector<pDescriptor> &descriptors, 
                ^
/home/johnson/workspace/dslam_ws/src/DBoW2/include/DBoW2/FClass.h: In static member function ‘static void DBoW2::FBrief::meanValue(const std::vector<const DBoW2::FClass::TDescriptor*>&, DBoW2::FClass::TDescriptor&)’:
/home/johnson/workspace/dslam_ws/src/DBoW2/include/DBoW2/FClass.h:27:9: error: ‘class DBoW2::FClass::TDescriptor’ is private
   class TDescriptor;
         ^
/home/johnson/workspace/dslam_ws/src/DBoW2/src/FBrief.cpp:24:11: error: within this context
   FBrief::TDescriptor &mean)
           ^
/home/johnson/workspace/dslam_ws/src/DBoW2/src/FBrief.cpp:26:7: error: invalid use of incomplete type ‘class DBoW2::FClass::TDescriptor’
   mean.reset();
       ^
In file included from /home/johnson/workspace/dslam_ws/src/DBoW2/include/DBoW2/FBrief.h:17:0,
                 from /home/johnson/workspace/dslam_ws/src/DBoW2/src/FBrief.cpp:15:
/home/johnson/workspace/dslam_ws/src/DBoW2/include/DBoW2/FClass.h:27:9: note: forward declaration of ‘class DBoW2::FClass::TDescriptor’
   class TDescriptor;
         ^
/home/johnson/workspace/dslam_ws/src/DBoW2/src/FBrief.cpp:31:31: error: invalid use of incomplete type ‘const class DBoW2::FClass::TDescriptor’
   const int L = descriptors[0]->size();
                               ^
In file included from /home/johnson/workspace/dslam_ws/src/DBoW2/include/DBoW2/FBrief.h:17:0,
                 from /home/johnson/workspace/dslam_ws/src/DBoW2/src/FBrief.cpp:15:
/home/johnson/workspace/dslam_ws/src/DBoW2/include/DBoW2/FClass.h:27:9: note: forward declaration of ‘class DBoW2::FClass::TDescriptor’
   class TDescriptor;
         ^
/home/johnson/workspace/dslam_ws/src/DBoW2/include/DBoW2/FClass.h:27:9: error: ‘class DBoW2::FClass::TDescriptor’ is private
/home/johnson/workspace/dslam_ws/src/DBoW2/src/FBrief.cpp:38:19: error: within this context
     const FBrief::TDescriptor &desc = **it;
                   ^
/home/johnson/workspace/dslam_ws/src/DBoW2/src/FBrief.cpp:41:14: error: no match for ‘operator[]’ (operand types are ‘const DBoW2::FClass::TDescriptor’ and ‘int’)
       if(desc[i]) counters[i]++;
              ^
/home/johnson/workspace/dslam_ws/src/DBoW2/src/FBrief.cpp:47:30: error: invalid use of incomplete type ‘class DBoW2::FClass::TDescriptor’
     if(counters[i] > N2) mean.set(i);
                              ^
In file included from /home/johnson/workspace/dslam_ws/src/DBoW2/include/DBoW2/FBrief.h:17:0,
                 from /home/johnson/workspace/dslam_ws/src/DBoW2/src/FBrief.cpp:15:
/home/johnson/workspace/dslam_ws/src/DBoW2/include/DBoW2/FClass.h:27:9: note: forward declaration of ‘class DBoW2::FClass::TDescriptor’
   class TDescriptor;
         ^
/home/johnson/workspace/dslam_ws/src/DBoW2/include/DBoW2/FClass.h: In static member function ‘static double DBoW2::FBrief::distance(const DBoW2::FClass::TDescriptor&, const DBoW2::FClass::TDescriptor&)’:
/home/johnson/workspace/dslam_ws/src/DBoW2/include/DBoW2/FClass.h:27:9: error: ‘class DBoW2::FClass::TDescriptor’ is private
/home/johnson/workspace/dslam_ws/src/DBoW2/src/FBrief.cpp:54:39: error: within this context
 double FBrief::distance(const FBrief::TDescriptor &a, 
                                       ^
/home/johnson/workspace/dslam_ws/src/DBoW2/src/FBrief.cpp:57:27: error: ‘DVision::BRIEF’ has not been declared
   return (double)DVision::BRIEF::distance(a, b);
                           ^
In file included from /home/johnson/workspace/dslam_ws/src/DBoW2/include/DBoW2/FBrief.h:17:0,
                 from /home/johnson/workspace/dslam_ws/src/DBoW2/src/FBrief.cpp:15:
/home/johnson/workspace/dslam_ws/src/DBoW2/include/DBoW2/FClass.h: In static member function ‘static std::__cxx11::string DBoW2::FBrief::toString(const DBoW2::FClass::TDescriptor&)’:
/home/johnson/workspace/dslam_ws/src/DBoW2/include/DBoW2/FClass.h:27:9: error: ‘class DBoW2::FClass::TDescriptor’ is private
   class TDescriptor;
         ^
/home/johnson/workspace/dslam_ws/src/DBoW2/src/FBrief.cpp:62:44: error: within this context
 std::string FBrief::toString(const FBrief::TDescriptor &a)
                                            ^
/home/johnson/workspace/dslam_ws/src/DBoW2/src/FBrief.cpp:66:17: error: no matching function for call to ‘to_string(const DBoW2::FClass::TDescriptor&, std::__cxx11::string&)’
   to_string(a, s); // reversed 

It's too long. So I just paste part of that.

Firstly I think It might be some wrong with OpenCV. But I tried to comile the origin DBow2 ( https://github.com/dorian3d/DBoW2.git ) and It works. So it seems that the configuration of OpenCV is correct. The version of OpenCV is opencv-3.3.1-dev which is installed by ros-kinetic.

Then I don't know how to fix it. Any help would be welcomed

conallwang commented 4 years ago

I'd like to close this issue because I have solved the problem.

That is due to missing some header files. So I download the origin DLib code ( https://github.com/dorian3d/DLib ) and create a new repository ( https://github.com/AndroidStudio2017/DLib ). I added some necessary header files to fix the problem and gladly it works. Of course I need to change the 12 line of 'CMakeLists.txt' in dlib_catkin. I need to change that to my repository address.

If someone has the same problem as me, I think my repository might be useful to you.