首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenCV createsamples.cpp调试

OpenCV createsamples.cpp调试
EN

Stack Overflow用户
提问于 2021-11-06 06:37:11
回答 1查看 59关注 0票数 0

最新版本的OpenCV(4)没有提供用于创建HAAR级联文件的createsamples功能。简直让人难以置信。要实现这个特性,有两种解决方案: 1)在不同的机器上下载一个旧版本,或者2)编译createsamples.cpp我选择了第二项,因为任何人都可以在任何时候使用kluge。第二项包含许多错误,如下所示:

代码语言:javascript
复制
 harry@harry-usedmachine:/usr/include/opencv4$ sudo g++ createsamples.cpp 
[sudo] password for harry:        
In file included from createsamples.cpp:48:
/usr/include/opencv4/opencv2/core.hpp:2523:16: error: ‘FileStorage’ has not been declared
 2523 |     void write(FileStorage& fs) const;
      |                ^~~~~~~~~~~
/usr/include/opencv4/opencv2/core.hpp:2573:15: error: ‘FileStorage’ has not been declared
 2573 |     void save(FileStorage& fs) const;
      |               ^~~~~~~~~~~
/usr/include/opencv4/opencv2/core.hpp:2577:21: error: ‘FileStorage’ does not name a type
 2577 |     void load(const FileStorage& node);
      |                     ^~~~~~~~~~~
/usr/include/opencv4/opencv2/core.hpp:3088:24: error: ‘FileStorage’ has not been declared
 3088 |     virtual void write(FileStorage& fs) const { CV_UNUSED(fs); }
      |                        ^~~~~~~~~~~
/usr/include/opencv4/opencv2/core.hpp:3093:34: error: ‘FileStorage’ was not declared in this scope
 3093 |     CV_WRAP void write(const Ptr<FileStorage>& fs, const String& name = String()) const;
      |                                  ^~~~~~~~~~~
/usr/include/opencv4/opencv2/core.hpp:3093:45: error: template argument 1 is invalid
 3093 |     CV_WRAP void write(const Ptr<FileStorage>& fs, const String& name = String()) const;
      |                                             ^
/usr/include/opencv4/opencv2/core.hpp:3172:22: error: ‘FileStorage’ has not been declared
 3172 |     void writeFormat(FileStorage& fs) const;
      |                      ^~~~~~~~~~~
/usr/include/opencv4/opencv2/core.hpp: In static member function ‘static cv::Ptr<_Tp> cv::Algorithm::load(const String&, const String&)’:
/usr/include/opencv4/opencv2/core.hpp:3135:9: error: ‘FileStorage’ was not declared in this scope
 3135 |         FileStorage fs(filename, FileStorage::READ);
      |         ^~~~~~~~~~~
In file included from /usr/include/opencv4/opencv2/core.hpp:55,
                 from createsamples.cpp:48:
/usr/include/opencv4/opencv2/core.hpp:3136:19: error: ‘fs’ was not declared in this scope; did you mean ‘ffs’?
 3136 |         CV_Assert(fs.isOpened());
      |                   ^~
/usr/include/opencv4/opencv2/core/base.hpp:342:38: note: in definition of macro ‘CV_Assert’
  342 | #define CV_Assert( expr ) do { if(!!(expr)) ; else cv::error( cv::Error::StsAssert, #expr, CV_Func, __FILE__, __LINE__ ); } while(0)
      |                                      ^~~~
In file included from createsamples.cpp:48:
/usr/include/opencv4/opencv2/core.hpp:3137:41: error: ‘fs’ was not declared in this scope; did you mean ‘ffs’?
 3137 |         FileNode fn = objname.empty() ? fs.getFirstTopLevelNode() : fs[objname];
      |                                         ^~
      |                                         ffs
/usr/include/opencv4/opencv2/core.hpp:3137:18: error: ‘fn’ has incomplete type
 3137 |         FileNode fn = objname.empty() ? fs.getFirstTopLevelNode() : fs[objname];
      |                  ^~
In file included from /usr/include/opencv4/opencv2/core/base.hpp:58,
                 from /usr/include/opencv4/opencv2/core.hpp:55,
                 from createsamples.cpp:48:
/usr/include/opencv4/opencv2/core/cvstd.hpp:150:18: note: forward declaration of ‘class cv::FileNode’
  150 | class CV_EXPORTS FileNode; //for string constructor from FileNode
      |                  ^~~~~~~~
In file included from createsamples.cpp:48:
/usr/include/opencv4/opencv2/core.hpp: In static member function ‘static cv::Ptr<_Tp> cv::Algorithm::loadFromString(const String&, const String&)’:
/usr/include/opencv4/opencv2/core.hpp:3156:9: error: ‘FileStorage’ was not declared in this scope
 3156 |         FileStorage fs(strModel, FileStorage::READ + FileStorage::MEMORY);
      |         ^~~~~~~~~~~
/usr/include/opencv4/opencv2/core.hpp:3157:41: error: ‘fs’ was not declared in this scope; did you mean ‘ffs’?
 3157 |         FileNode fn = objname.empty() ? fs.getFirstTopLevelNode() : fs[objname];
      |                                         ^~
      |                                         ffs

许多错误来自core.hpp和createsample.cpp。createsample.cpp在这里:https://github.com/opencv/opencv/blob/master/apps/createsamples/createsamples.cpp

core.hpp在这里:https://github.com/opencv/opencv/blob/master/modules/core/include/opencv2/core.hpp

将非常感谢任何关于修复这些错误的见解。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-09 15:08:58

最简单的方法似乎是下载一个较旧的opencv版本的源代码,如https://github.com/opencv/opencv/archive/2.4.13.6.zip,并将其解压到任何位置。在执行文件夹中

代码语言:javascript
复制
mkdir build
cd build
cmake ..
make
cd bin

在那里你可以找到opencv_createsamplesopencv_traincascade等的二进制文件。

不需要安装旧版本(如果使用“make install”就会发生这种情况),只需将当前安装任何版本的opencv内部版本用于所有任务,如果需要创建示例或训练级联,请在将其复制到的目录中使用此内部版本。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69861959

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档