微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何避免在我的标题中包含 OpenCV?

如何解决如何避免在我的标题中包含 OpenCV?

希望你们一切都好。刚好有一个菜鸟级的C++编码问题,希望能收集一些思路。我正在编写一个图像处理模型,该模型将被包装到基于 C 的 DLL API。

/* myModel.h */

#include "opencv2/imgproc.hpp"
#include "opencv2/objdetect.hpp"
#include "nlohmann/json.hpp"
#include <variant>

class myModel
{
   public:

      myModel();

      loadCascadeClassifier( std::string fpath );

      struct DetectedResults
        {
            bool is_detected,cv::Rect bounding_Box;
            cv::Point center;
        };

      myModel::DetectedResults detect( cv::Mat& input_image );

   private:

      std::vector< cv::Rect > Box_stack;

      cv::CascadeClassifier Classifier;

      nlohmann::json json_params;

      // some other members...
}


/* myModel.cpp */

// Implementations...

代码可以正常工作,但是在其他项目中包含 myModel.h 变得麻烦。我意识到在 myModel.h 中包含资源可能不是一个好习惯,因为:

  1. 使用 myModel.cpp /.h 的其他项目需要具有相同的包含/库和链接器。
  2. 一旦 myModel.h 更改,重新编译需要时间
  3. 我不知道,但是使用包含的对象作为输入参数好不好?

因此我研究了一些像this.这样的文章,这表明避免包含在标题中:

前向声明

不适用于我的情况。根据 this discussion

的说法,我似乎无法为 OpenCV 对象预先声明不完整类型的类

私有实现

我应该试试这个吗?试图弄清楚如何应用它。

这不是寻求错误解决方案,因此欢迎您以任何形式提出任何想法。我很乐意了解 C++ 专业人士如何解决此类问题。提前致谢!

TL;DR:如何避免在头文件 myModel.h 中包含资源?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。