OpenCV 符号未在此范围内声明

Posted

技术标签:

【中文标题】OpenCV 符号未在此范围内声明【英文标题】:OpenCV symbol was not declared in this scope 【发布时间】:2015-03-10 03:41:47 【问题描述】:

我正在尝试编译另一个人的源代码。它是 C++ 中的 OpenCV。

我创建了一个新的 64 位 Ubuntu 虚拟机并安装了这个数据包:

sudo apt-get install -y subversion build-essential git cmake libopencv-legacy-dev

git clone https://github.com/Itseez/opencv.git

cd ~/opencv_tmp/opencv

mkdir release

cd release

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..

make -j8

sudo make install

然后我尝试编译

cd project

mkdir build

cd build

cmake ..

make

然后这返回了这个错误:

12%] Building CXX object CMakeFiles/Project.dir/main.o
In file included from xx,
                 from xx:
/usr/include/opencv2/legacy/legacy.hpp:1750:53: error: ‘cv::EM’ has not been declared
     CvEMParams( int nclusters, int cov_mat_type=cv::EM::COV_MAT_DIAGONAL,
                                                     ^
/usr/include/opencv2/legacy/legacy.hpp:1751:36: error: ‘cv::EM’ has not been declared
                 int start_step=cv::EM::START_AUTO_STEP,
                                    ^
/usr/include/opencv2/legacy/legacy.hpp:1767:1: error: expected class-name before ‘’ token
 
 ^

(...)


          ^
                                                                   ^

                                                                   ^
/usr/include/opencv2/legacy/legacy.hpp:2600:73: error: expected ‘,’ or ‘...’ before ‘<’ token
     void InitializeObjectDescriptors(IplImage* train_image, const vector<KeyPoint>& features,
                                                                         ^
/usr/include/opencv2/legacy/legacy.hpp:2609:5: error: ‘vector’ does not name a type
     vector<KeyPoint> m_train_features; // train features
     ^
/usr/include/opencv2/legacy/legacy.hpp:2572:63: error: ‘string’ was not declared in this scope
                            const string &train_path = string (), const string &images_list = string (),
                                                               ^
/usr/include/opencv2/legacy/legacy.hpp:2572:63: note: suggested alternative:
In file included from /usr/include/c++/4.8/string:39:0,
                 from /usr/local/include/opencv2/core/cvstd.hpp:58,
                 from /usr/local/include/opencv2/core/base.hpp:55,
                 from /usr/local/include/opencv2/core.hpp:52,
                 from /usr/local/include/opencv2/highgui.hpp:46,
                 from /usr/local/include/opencv2/highgui/highgui.hpp:48,
                 from xx,
                 from xx:
/usr/include/c++/4.8/bits/stringfwd.h:62:33: note:   ‘std::string’
   typedef basic_string<char>    string;
                                 ^
In file included from xx,
                 from xx:
/usr/include/opencv2/legacy/legacy.hpp:2572:102: error: ‘string’ was not declared in this scope
                            const string &train_path = string (), const string &images_list = string (),
                                                                                                      ^
/usr/include/opencv2/legacy/legacy.hpp:2572:102: note: suggested alternative:
In file included from /usr/include/c++/4.8/string:39:0,
                 from /usr/local/include/opencv2/core/cvstd.hpp:58,
                 from /usr/local/include/opencv2/core/base.hpp:55,
                 from /usr/local/include/opencv2/core.hpp:52,
                 from /usr/local/include/opencv2/highgui.hpp:46,
                 from /usr/local/include/opencv2/highgui/highgui.hpp:48,
                 from xx,
                 from xx:
/usr/include/c++/4.8/bits/stringfwd.h:62:33: note:   ‘std::string’
   typedef basic_string<char>    string;
                                 ^
In file included from xx,
                 from xx:
/usr/include/opencv2/legacy/legacy.hpp: In member function ‘void cv::OneWayDescriptorObject::SetLabeledFeatures(int)’:
/usr/include/opencv2/legacy/legacy.hpp:2584:64: error: ‘m_train_features’ was not declared in this scope
     void SetLabeledFeatures(const vector<KeyPoint>& features) m_train_features = features;;
                                                                ^
/usr/include/opencv2/legacy/legacy.hpp:2584:83: error: ‘features’ was not declared in this scope
     void SetLabeledFeatures(const vector<KeyPoint>& features) m_train_features = features;;
                                                                                   ^
/usr/include/opencv2/legacy/legacy.hpp: At global scope:
/usr/include/opencv2/legacy/legacy.hpp:2622:1: error: expected class-name before ‘’ token
 
 ^
/usr/include/opencv2/legacy/legacy.hpp:2636:16: error: ‘string’ has not been declared
                string pcaFilename = string(),
                ^
/usr/include/opencv2/legacy/legacy.hpp:2637:16: error: ‘string’ has not been declared
                string trainPath = string(), string trainImagesList = string(),
                ^
/usr/include/opencv2/legacy/legacy.hpp:2637:45: error: ‘string’ has not been declared
                string trainPath = string(), string trainImagesList = string(),
                                             ^
/usr/include/opencv2/legacy/legacy.hpp:2643:9: error: ‘string’ does not name a type
         string pcaFilename;
         ^
/usr/include/opencv2/legacy/legacy.hpp:2644:9: error: ‘string’ does not name a type
         string trainPath;
         ^
/usr/include/opencv2/legacy/legacy.hpp:2645:9: error: ‘string’ does not name a type
         string trainImagesList;
         ^
/usr/include/opencv2/legacy/legacy.hpp:2667:17: error: ‘GenericDescriptorMatcher’ was not declared in this scope
     virtual Ptr<GenericDescriptorMatcher> clone( bool emptyTrainData=false ) const;
                 ^
/usr/include/opencv2/legacy/legacy.hpp:2667:41: error: template argument 1 is invalid
     virtual Ptr<GenericDescriptorMatcher> clone( bool emptyTrainData=false ) const;
                                         ^
/usr/include/opencv2/legacy/legacy.hpp:2676:55: error: ‘vector’ has not been declared
     virtual void knnMatchImpl( const Mat& queryImage, vector<KeyPoint>& queryKeypoints,
                                                       ^
/usr/include/opencv2/legacy/legacy.hpp:2676:61: error: expected ‘,’ or ‘...’ before ‘<’ token
     virtual void knnMatchImpl( const Mat& queryImage, vector<KeyPoint>& queryKeypoints,
                                                             ^
/usr/include/opencv2/legacy/legacy.hpp:2679:58: error: ‘vector’ has not been declared
     virtual void radiusMatchImpl( const Mat& queryImage, vector<KeyPoint>& queryKeypoints,
                                                          ^
/usr/include/opencv2/legacy/legacy.hpp:2679:64: error: expected ‘,’ or ‘...’ before ‘<’ token
     virtual void radiusMatchImpl( const Mat& queryImage, vector<KeyPoint>& queryKeypoints,
                                                                ^
/usr/include/opencv2/legacy/legacy.hpp:2636:44: error: ‘string’ was not declared in this scope
                string pcaFilename = string(),
                                            ^
/usr/include/opencv2/legacy/legacy.hpp:2636:44: note: suggested alternative:
In file included from /usr/include/c++/4.8/string:39:0,
                 from /usr/local/include/opencv2/core/cvstd.hpp:58,
                 from /usr/local/include/opencv2/core/base.hpp:55,
                 from /usr/local/include/opencv2/core.hpp:52,
                 from /usr/local/include/opencv2/highgui.hpp:46,
                 from /usr/local/include/opencv2/highgui/highgui.hpp:48,
                 from xx,
                 from xx:
/usr/include/c++/4.8/bits/stringfwd.h:62:33: note:   ‘std::string’
   typedef basic_string<char>    string;
                                 ^
In file included from xx,
                 from xx:
/usr/include/opencv2/legacy/legacy.hpp:2637:42: error: ‘string’ was not declared in this scope
                string trainPath = string(), string trainImagesList = string(),
                                          ^
/usr/include/opencv2/legacy/legacy.hpp:2637:42: note: suggested alternative:
In file included from /usr/include/c++/4.8/string:39:0,
                 from /usr/local/include/opencv2/core/cvstd.hpp:58,
                 from /usr/local/include/opencv2/core/base.hpp:55,
                 from /usr/local/include/opencv2/core.hpp:52,
                 from /usr/local/include/opencv2/highgui.hpp:46,
                 from /usr/local/include/opencv2/highgui/highgui.hpp:48,
                 from xx,
                 from xx:
/usr/include/c++/4.8/bits/stringfwd.h:62:33: note:   ‘std::string’
   typedef basic_string<char>    string;
                                 ^
In file included from xx,
                 from xx:
/usr/include/opencv2/legacy/legacy.hpp:2637:77: error: ‘string’ was not declared in this scope
                string trainPath = string(), string trainImagesList = string(),
                                                                             ^
/usr/include/opencv2/legacy/legacy.hpp:2637:77: note: suggested alternative:
In file included from /usr/include/c++/4.8/string:39:0,
                 from /usr/local/include/opencv2/core/cvstd.hpp:58,
                 from /usr/local/include/opencv2/core/base.hpp:55,
                 from /usr/local/include/opencv2/core.hpp:52,
                 from /usr/local/include/opencv2/highgui.hpp:46,
                 from /usr/local/include/opencv2/highgui/highgui.hpp:48,
                 from xxxx,
                 from xxxx:
/usr/include/c++/4.8/bits/stringfwd.h:62:33: note:   ‘std::string’
   typedef basic_string<char>    string;
                                 ^
In file included from xxx,
                 from xxxx:
/usr/include/opencv2/legacy/legacy.hpp:2650:58: error: call to ‘cv::OneWayDescriptorMatcher::Params::Params(int, cv::Size, int, int, int, float, float, float)’ uses the default argument for parameter 3, which is not yet defined
     OneWayDescriptorMatcher( const Params& params=Params() );
                                                          ^
/usr/include/opencv2/legacy/legacy.hpp:2650:58: error: call to ‘cv::OneWayDescriptorMatcher::Params::Params(int, cv::Size, int, int, int, float, float, float)’ uses the default argument for parameter 4, which is not yet defined
/usr/include/opencv2/legacy/legacy.hpp:2650:58: error: call to ‘cv::OneWayDescriptorMatcher::Params::Params(int, cv::Size, int, int, int, float, float, float)’ uses the default argument for parameter 5, which is not yet defined
/usr/include/opencv2/legacy/legacy.hpp:2695:1: error: expected class-name before ‘’ token
 
 ^
/usr/include/opencv2/legacy/legacy.hpp:2709:23: error: ‘string’ does not name a type
         Params( const string& filename );
                       ^
/usr/include/opencv2/legacy/legacy.hpp:2720:9: error: ‘string’ does not name a type
         string filename;
         ^
/usr/include/opencv2/legacy/legacy.hpp:2736:17: error: ‘GenericDescriptorMatcher’ was not declared in this scope
     virtual Ptr<GenericDescriptorMatcher> clone( bool emptyTrainData=false ) const;
                 ^
/usr/include/opencv2/legacy/legacy.hpp:2736:41: error: template argument 1 is invalid
     virtual Ptr<GenericDescriptorMatcher> clone( bool emptyTrainData=false ) const;
                                         ^
/usr/include/opencv2/legacy/legacy.hpp:2739:55: error: ‘vector’ has not been declared
     virtual void knnMatchImpl( const Mat& queryImage, vector<KeyPoint>& queryKeypoints,
                                                       ^
/usr/include/opencv2/legacy/legacy.hpp:2739:61: error: expected ‘,’ or ‘...’ before ‘<’ token
     virtual void knnMatchImpl( const Mat& queryImage, vector<KeyPoint>& queryKeypoints,
                                                             ^
/usr/include/opencv2/legacy/legacy.hpp:2742:58: error: ‘vector’ has not been declared
     virtual void radiusMatchImpl( const Mat& queryImage, vector<KeyPoint>& queryKeypoints,
                                                          ^
/usr/include/opencv2/legacy/legacy.hpp:2742:64: error: expected ‘,’ or ‘...’ before ‘<’ token
     virtual void radiusMatchImpl( const Mat& queryImage, vector<KeyPoint>& queryKeypoints,
                                                                ^
/usr/include/opencv2/legacy/legacy.hpp:2748:70: error: ‘vector’ has not been declared
                                  float& bestProb, int& bestMatchIdx, vector<float>& signature );
                                                                      ^
/usr/include/opencv2/legacy/legacy.hpp:2748:76: error: expected ‘,’ or ‘...’ before ‘<’ token
                                  float& bestProb, int& bestMatchIdx, vector<float>& signature );
                                                                            ^
/usr/include/opencv2/legacy/legacy.hpp:2762:40: error: ‘string’ does not name a type
     CalonderDescriptorExtractor( const string& classifierFile );
                                        ^
/usr/include/opencv2/legacy/legacy.hpp:2773:49: error: ‘vector’ has not been declared
     virtual void computeImpl( const Mat& image, vector<KeyPoint>& keypoints, Mat& descriptors ) const;
                                                 ^
/usr/include/opencv2/legacy/legacy.hpp:2773:55: error: expected ‘,’ or ‘...’ before ‘<’ token
     virtual void computeImpl( const Mat& image, vector<KeyPoint>& keypoints, Mat& descriptors ) const;
                                                       ^
/usr/include/opencv2/legacy/legacy.hpp:2780:1: error: prototype for ‘cv::CalonderDescriptorExtractor<T>::CalonderDescriptorExtractor(const string&)’ does not match any in class ‘cv::CalonderDescriptorExtractor<T>’
 CalonderDescriptorExtractor<T>::CalonderDescriptorExtractor(const std::string& classifier_file)
 ^
/usr/include/opencv2/legacy/legacy.hpp:2762:5: error: candidate is: cv::CalonderDescriptorExtractor<T>::CalonderDescriptorExtractor(const int&)
     CalonderDescriptorExtractor( const string& classifierFile );
     ^
/usr/include/opencv2/legacy/legacy.hpp:2787:50: error: ‘vector’ has not been declared
                                                  vector<KeyPoint>& keypoints,
                                                  ^
/usr/include/opencv2/legacy/legacy.hpp:2787:56: error: expected ‘,’ or ‘...’ before ‘<’ token
                                                  vector<KeyPoint>& keypoints,
                                                        ^
/usr/include/opencv2/legacy/legacy.hpp: In member function ‘virtual void cv::CalonderDescriptorExtractor<T>::computeImpl(const cv::Mat&, int) const’:
/usr/include/opencv2/legacy/legacy.hpp:2791:39: error: ‘keypoints’ was not declared in this scope
     KeyPointsFilter::runByImageBorder(keypoints, image.size(), BORDER_SIZE);
                                       ^
/usr/include/opencv2/legacy/legacy.hpp:2794:5: error: ‘descriptors’ was not declared in this scope
     descriptors.create((int)keypoints.size(), classifier_.classes(), cv::DataType<T>::type);
     ^
/usr/include/opencv2/legacy/legacy.hpp:2802:58: error: expected primary-expression before ‘>’ token
         classifier_.getSignature( &ipl, descriptors.ptr<T>((int)i));
                                                          ^
/usr/include/opencv2/legacy/legacy.hpp: In member function ‘virtual bool cv::CalonderDescriptorExtractor<T>::empty() const’:
/usr/include/opencv2/legacy/legacy.hpp:2817:24: error: ‘const class cv::RTreeClassifier’ has no member named ‘trees_’
     return classifier_.trees_.empty();
                        ^
/usr/include/opencv2/legacy/legacy.hpp: At global scope:
/usr/include/opencv2/legacy/legacy.hpp:2841:32: error: ‘vector’ does not name a type
     PlanarObjectDetector(const vector<Mat>& pyr, int _npoints=300,
                                ^
/usr/include/opencv2/legacy/legacy.hpp:2841:38: error: expected ‘,’ or ‘...’ before ‘<’ token
     PlanarObjectDetector(const vector<Mat>& pyr, int _npoints=300,
                                      ^
/usr/include/opencv2/legacy/legacy.hpp:2849:30: error: ‘vector’ does not name a type
     virtual void train(const vector<Mat>& pyr, int _npoints=300,
                              ^
/usr/include/opencv2/legacy/legacy.hpp:2849:36: error: expected ‘,’ or ‘...’ before ‘<’ token
     virtual void train(const vector<Mat>& pyr, int _npoints=300,
                                    ^
/usr/include/opencv2/legacy/legacy.hpp:2856:30: error: ‘vector’ does not name a type
     virtual void train(const vector<Mat>& pyr, const vector<KeyPoint>& keypoints,
                              ^
/usr/include/opencv2/legacy/legacy.hpp:2856:36: error: expected ‘,’ or ‘...’ before ‘<’ token
     virtual void train(const vector<Mat>& pyr, const vector<KeyPoint>& keypoints,
                                    ^
/usr/include/opencv2/legacy/legacy.hpp:2856:18: error: ‘virtual void cv::PlanarObjectDetector::train(int)’ cannot be overloaded
     virtual void train(const vector<Mat>& pyr, const vector<KeyPoint>& keypoints,
                  ^
/usr/include/opencv2/legacy/legacy.hpp:2849:18: error: with ‘virtual void cv::PlanarObjectDetector::train(int)’
     virtual void train(const vector<Mat>& pyr, int _npoints=300,
                  ^
/usr/include/opencv2/legacy/legacy.hpp:2864:5: error: ‘vector’ does not name a type
     vector<KeyPoint> getModelPoints() const;
     ^
/usr/include/opencv2/legacy/legacy.hpp:2871:61: error: ‘vector’ has not been declared
     bool operator()(const Mat& image, CV_OUT Mat& H, CV_OUT vector<Point2f>& corners) const;
                                                             ^
/usr/include/opencv2/legacy/legacy.hpp:2871:67: error: expected ‘,’ or ‘...’ before ‘<’ token
     bool operator()(const Mat& image, CV_OUT Mat& H, CV_OUT vector<Point2f>& corners) const;
                                                                   ^
/usr/include/opencv2/legacy/legacy.hpp:2872:27: error: ‘vector’ does not name a type
     bool operator()(const vector<Mat>& pyr, const vector<KeyPoint>& keypoints,
                           ^
/usr/include/opencv2/legacy/legacy.hpp:2872:33: error: expected ‘,’ or ‘...’ before ‘<’ token
     bool operator()(const vector<Mat>& pyr, const vector<KeyPoint>& keypoints,
                                 ^
/usr/include/opencv2/legacy/legacy.hpp:2879:5: error: ‘vector’ does not name a type
     vector<KeyPoint> modelPoints;
     ^
/usr/include/opencv2/legacy/legacy.hpp:2927:38: error: variable or field ‘cvInitSubdivDelaunay2D’ declared void
 CVAPI(void)  cvInitSubdivDelaunay2D( CvSubdiv2D* subdiv, CvRect rect );
                                      ^
/usr/include/opencv2/legacy/legacy.hpp:2927:38: error: ‘CvSubdiv2D’ was not declared in this scope
/usr/include/opencv2/legacy/legacy.hpp:2927:50: error: ‘subdiv’ was not declared in this scope
 CVAPI(void)  cvInitSubdivDelaunay2D( CvSubdiv2D* subdiv, CvRect rect );
                                                  ^
/usr/include/opencv2/legacy/legacy.hpp:2927:65: error: expected primary-expression before ‘rect’
 CVAPI(void)  cvInitSubdivDelaunay2D( CvSubdiv2D* subdiv, CvRect rect );
                                                                 ^
In file included from /usr/local/include/opencv2/core/core_c.h:48:0,
                 from /usr/local/include/opencv2/core/utility.hpp:765,
                 from /usr/local/include/opencv2/core.hpp:2960,
                 from /usr/local/include/opencv2/highgui.hpp:46,
                 from /usr/local/include/opencv2/highgui/highgui.hpp:48,
                 from /home/xxxxxxxx,
                 from /homxxxxxxxxxxxxrc/main.cpp:2:
/usr/include/opencv2/legacy/legacy.hpp:2930:1: error: ‘CvSubdiv2D’ does not name a type
 CVAPI(CvSubdiv2D*)  cvCreateSubdiv2D( int subdiv_type, int header_size,
 ^
In file included from xx,
                 from xxxx:
/usr/include/opencv2/legacy/legacy.hpp:2937:12: error: ‘CvSubdiv2D’ does not name a type
 CV_INLINE  CvSubdiv2D* cvCreateSubdivDelaunay2D( CvRect rect, CvMemStorage* storage )
            ^
In file included from /usr/local/include/opencv2/core/core_c.h:48:0,
                 from /usr/local/include/opencv2/core/utility.hpp:765,
                 from /usr/local/include/opencv2/core.hpp:2960,
                 from /usr/local/include/opencv2/highgui.hpp:46,
                 from /usr/local/include/opencv2/highgui/highgui.hpp:48,
                 from xx,
                 from xx:
/usr/include/opencv2/legacy/legacy.hpp:2948:1: error: ‘CvSubdiv2DPoint’ does not name a type
 CVAPI(CvSubdiv2DPoint*)  cvSubdivDelaunay2DInsert( CvSubdiv2D* subdiv, CvPoint2D32f pt);
 ^
/usr/include/opencv2/legacy/legacy.hpp:2953:1: error: ‘CvSubdiv2DPointLocation’ does not name a type
 CVAPI(CvSubdiv2DPointLocation)  cvSubdiv2DLocate(
 ^
In file included from xxxxxx,
                 from xxxxxxx:
/usr/include/opencv2/legacy/legacy.hpp:2959:37: error: variable or field ‘cvCalcSubdivVoronoi2D’ declared void
 CVAPI(void)  cvCalcSubdivVoronoi2D( CvSubdiv2D* subdiv );
                                     ^
/usr/include/opencv2/legacy/legacy.hpp:2959:37: error: ‘CvSubdiv2D’ was not declared in this scope
/usr/include/opencv2/legacy/legacy.hpp:2959:49: error: ‘subdiv’ was not declared in this scope
 CVAPI(void)  cvCalcSubdivVoronoi2D( CvSubdiv2D* subdiv );
                                                 ^
/usr/include/opencv2/legacy/legacy.hpp:2963:38: error: variable or field ‘cvClearSubdivVoronoi2D’ declared void
 CVAPI(void)  cvClearSubdivVoronoi2D( CvSubdiv2D* subdiv );
                                      ^
/usr/include/opencv2/legacy/legacy.hpp:2963:38: error: ‘CvSubdiv2D’ was not declared in this scope
/usr/include/opencv2/legacy/legacy.hpp:2963:50: error: ‘subdiv’ was not declared in this scope
 CVAPI(void)  cvClearSubdivVoronoi2D( CvSubdiv2D* subdiv );
                                                  ^
In file included from /usr/local/include/opencv2/core/core_c.h:48:0,
                 from /usr/local/include/opencv2/core/utility.hpp:765,
                 from /usr/local/include/opencv2/core.hpp:2960,
                 from /usr/local/include/opencv2/highgui.hpp:46,
                 from /usr/local/include/opencv2/highgui/highgui.hpp:48,
                 from xxxxxxxxxxx,
                 from xxxxxxxxxxx:
/usr/include/opencv2/legacy/legacy.hpp:2967:1: error: ‘CvSubdiv2DPoint’ does not name a type
 CVAPI(CvSubdiv2DPoint*) cvFindNearestPoint2D( CvSubdiv2D* subdiv, CvPoint2D32f pt );
 ^
In file included from xxxxxxxxxxxxxxx
/usr/include/opencv2/legacy/legacy.hpp:2972:12: error: ‘CvSubdiv2DEdge’ does not name a type
 CV_INLINE  CvSubdiv2DEdge  cvSubdiv2DNextEdge( CvSubdiv2DEdge edge )
            ^
/usr/include/opencv2/legacy/legacy.hpp:2978:12: error: ‘CvSubdiv2DEdge’ does not name a type
 CV_INLINE  CvSubdiv2DEdge  cvSubdiv2DRotateEdge( CvSubdiv2DEdge edge, int rotate )
            ^
/usr/include/opencv2/legacy/legacy.hpp:2983:12: error: ‘CvSubdiv2DEdge’ does not name a type
 CV_INLINE  CvSubdiv2DEdge  cvSubdiv2DSymEdge( CvSubdiv2DEdge edge )
            ^
/usr/include/opencv2/legacy/legacy.hpp:2988:12: error: ‘CvSubdiv2DEdge’ does not name a type
 CV_INLINE  CvSubdiv2DEdge  cvSubdiv2DGetEdge( CvSubdiv2DEdge edge, CvNextEdgeType type )
            ^
/usr/include/opencv2/legacy/legacy.hpp:2996:12: error: ‘CvSubdiv2DPoint’ does not name a type
 CV_INLINE  CvSubdiv2DPoint*  cvSubdiv2DEdgeOrg( CvSubdiv2DEdge edge )
            ^
/usr/include/opencv2/legacy/legacy.hpp:3003:12: error: ‘CvSubdiv2DPoint’ does not name a type
 CV_INLINE  CvSubdiv2DPoint*  cvSubdiv2DEdgeDst( CvSubdiv2DEdge edge )
            ^
/usr/include/opencv2/legacy/legacy.hpp:3014:29: error: variable or field ‘icvDrawMosaic’ declared void
 CVAPI(void)  icvDrawMosaic( CvSubdiv2D* subdiv, IplImage* src, IplImage* dst );
                             ^
/usr/include/opencv2/legacy/legacy.hpp:3014:29: error: ‘CvSubdiv2D’ was not declared in this scope
/usr/include/opencv2/legacy/legacy.hpp:3014:41: error: ‘subdiv’ was not declared in this scope
 CVAPI(void)  icvDrawMosaic( CvSubdiv2D* subdiv, IplImage* src, IplImage* dst );
                                         ^
/usr/include/opencv2/legacy/legacy.hpp:3014:57: error: expected primary-expression before ‘*’ token
 CVAPI(void)  icvDrawMosaic( CvSubdiv2D* subdiv, IplImage* src, IplImage* dst );
                                                         ^
/usr/include/opencv2/legacy/legacy.hpp:3014:59: error: ‘src’ was not declared in this scope
 CVAPI(void)  icvDrawMosaic( CvSubdiv2D* subdiv, IplImage* src, IplImage* dst );
                                                           ^
/usr/include/opencv2/legacy/legacy.hpp:3014:72: error: expected primary-expression before ‘*’ token
 CVAPI(void)  icvDrawMosaic( CvSubdiv2D* subdiv, IplImage* src, IplImage* dst );
                                                                        ^
/usr/include/opencv2/legacy/legacy.hpp:3014:74: error: ‘dst’ was not declared in this scope
 CVAPI(void)  icvDrawMosaic( CvSubdiv2D* subdiv, IplImage* src, IplImage* dst );
                                                                          ^
/usr/include/opencv2/legacy/legacy.hpp:3018:32: error: ‘CvSubdiv2D’ was not declared in this scope
 CVAPI(int)   icvSubdiv2DCheck( CvSubdiv2D* subdiv );
                                ^
/usr/include/opencv2/legacy/legacy.hpp:3018:44: error: ‘subdiv’ was not declared in this scope
 CVAPI(int)   icvSubdiv2DCheck( CvSubdiv2D* subdiv );
                                            ^
make[2]: *** [CMakeFiles/Project.dir/main.o] Error 1
make[1]: *** [CMakeFiles/Project.dir/all] Error 2
make: *** [all] Error 2

【问题讨论】:

很难说。看起来像缺少标题/包含。 CMake 输出告诉您关于未找到的包的哪些信息? 你能把你项目的CMakeList.txt的内容贴出来吗? CMakeList.txt: aux_source_directory(. SRC_LIST) add_executable($PROJECT_NAME $SRC_LIST) file(GLOB HEADERS *.h) file(GLOB SOURCES *.cpp) target_link_libraries($PROJECT_NAME $OpenCV_LIBS $TBB_LIBRARIES $GSTREAMER_LIBRARIES $GSTBASE_LIBRARIES $GSTNET_LIBRARIES -lgstapp-0.10 $OPENGL_LIBRARIES $GLUT_LIBRARIES) set(CMAKE_BUILD_TYPE Release) 谢谢 天啊,你为什么不使用 CMakeLists.txt 更新你的问题!尝试在 CMakeLists.txt 的开头添加这些行: find_package( OpenCV REQUIRED ) include_directories( $OpenCV_INCLUDE_DIRS ) 一个很好的用于 opencv 项目的 CMakeLists.txt 示例是 here 【参考方案1】:

如果您可以切换到 OpenCv v 3.3.0,则 EM 类的命名空间会简单地命名为 cv::ml::EM

【讨论】:

以上是关于OpenCV 符号未在此范围内声明的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV4 错误:“CV_CAP_PROP_FRAME_WIDTH”未在此范围内声明

imread 未在范围内声明(opencv-eclipse)

错误:“getRotationMatrix2D”未在此范围内声明

Open-CV - 未正确加载

错误:未在此范围内声明“对象”

qrand 未在此范围内声明