如何在 LabVIEW 的 DLL 中打开 OpenCV 结构化边缘检测器的模型文件?

How to open Model file for OpenCV's structured edge detector in a DLL for LabVIEW?

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

我试过:

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

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

我收到的错误消息:

Error -1002 occurred at OpenCV(4.0.1-dev) C:\OpenCV\opencv_contrib-master\modules\ximgproc\src\structured_edge_detection.cpp:432: error: (-215:Assertion failed) modelFile.isOpened() in function '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" 吗?

我解决了我的问题。如果您在 Visual Studio 中使用调试模式,您需要做的就是注意只链接带有 "d" 的库。我同时使用了:

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

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

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

对我来说一切都很好。