【问题标题】:How to open Model file for OpenCV's structured edge detector in a DLL for LabVIEW?如何在 LabVIEW 的 DLL 中打开 OpenCV 结构化边缘检测器的模型文件?
【发布时间】:2019-10-03 17:29:59
【问题描述】:

我使用 OpenCV 为 LabVIEW 创建了 EdgeBoxes.cpp 示例 DLL。我试图在 DLL 中打开模型文件,但我得到的只是断言失败。我还为形态学、角点检测、霍夫变换创建了 VI,但从未收到任何类似的错误消息。

我试过了:

  • 每个路径组合都使用正斜杠或反斜杠。
  • 将每个文件放入同一个文件夹(也在C:\ 中)。 (LabVIEW VI、DLL、模型文件)
  • 首先在LabVIEW中使用“Open/Create/Replace.vi”打开它
  • 打开提取的model.yml文件而不是model.yml.gz
  • 将yml文件转成json、txt也不行

这就是我无能为力的地方:

string filename = "C:\model.yml.gz"
Ptr<StructuredEdgeDetection> pDollar; = createStructuredEdgeDetection(filename);

我收到的错误消息:

OpenCV(4.0.1-dev) 发生错误 -1002 C:\OpenCV\opencv_contrib-master\modules\ximgproc\src\structured_edge_detection.cpp:432: 错误:(-215:断言失败)函数中的modelFile.isOpened() 'cv::ximgproc::StructuredEdgeDetectionImpl::StructuredEdgeDetectionImpl'

如果没有收到此错误消息,我不知道如何打开此文件。甚至可以在 DLL 调用中访问文件。由于权限问题,我必须在LabVIEW VI中以某种方式打开它吗? 谢谢!

更新:1

现在我尝试使用 ifstream 读取文件,似乎我可以毫无问题地访问该文件(代码如下)。那么它不起作用的原因似乎与 OpenCV 相关?

std::ifstream is(filename, std::ifstream::binary);

is.seekg(0, is.end);
int length = is.tellg();
is.seekg(0, is.beg);

char * buffer = new char[length];

is.read(buffer, length);
is.close();
delete[] buffer;    // buffer contains the entire file

更新:2

现在我尝试在调用后像 OpenCV 一样打开文件:

createStructuredEdgeDetection(filename);

之后,OpenCV 尝试使用以下命令打开文件: 见第 431 行 https://github.com/opencv/opencv_contrib/blob/master/modules/ximgproc/src/structured_edge_detection.cpp

cv::FileStorage modelFile(filename, FileStorage::READ);
if (modelFile.isOpened()) 
{ return -1; }

为什么它适用于

ifstream::binary

我必须重新编译“structured_edge_detection.cpp”吗?

【问题讨论】:

  • 通过文件扩展名,您指定的文件似乎已压缩或包含在存档 (model.yml.gz) 中。该函数可能正在尝试直接加载文件,并且无法将内容检测为 yml 文件。将文件解压缩到同一个文件夹并将您的字符串分配更改为“string filename = 'C:\model.yml'”,看看是否有帮助。在这里找到了一个类似的问题 -> stackoverflow.com/questions/49734695/structured-edge-detection
  • 谢谢,但我也已经尝试过了。刚才忘记在上面说了。提取文件后,它只是一个 yml 文件 --> model.yml。它不适用于任何文件。

标签: c++ opencv dll visual-studio-2015 labview


【解决方案1】:

我解决了我的问题。如果您在 Visual Studio 中使用调试模式,您需要做的就是注意仅使用“d”链接库。我都在使用:

opencv_imgproc401d.lib, opencv_imgproc401.lib, opencv.ximg....

仅将附加链接器依赖项更改为调试库后

opencv_imgproc401d.lib;opencv_ximgproc401d.lib;opencv_core401d.lib;

对我来说一切都很好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-30
    • 2016-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-13
    相关资源
    最近更新 更多