输入相同但输入方式不同的结果不同

时间:2016-02-02 16:28:32

标签: c opencv labview

我有一个来自opencv dll的外部函数cvCreateFileCapture,它应该将路径作为输入并返回一个结构。

CV_IMPL CvCapture * cvCreateFileCapture (const char * filename)

我创建了一个用于测试目的的vs2010项目,我使用有效的文件路径调用此函数,并获得我应该返回的结构。

当我从另一个程序调用此函数时(我正在使用labVIEW),我使用相同的输入跳转到相同的函数但返回0。

有没有人知道它为什么单向工作而不是另一种工作?

C来电是CvCapture* p = cvCreateFileCapture("C:/Users/goetz/Downloads/Disturbedloc.avi");

labview调用如下所示:

2 个答案:

答案 0 :(得分:4)

加载时间调试

如果图书馆通话在一个环境中工作而在另一个环境中工作,那么环境就会有所不同。主要有两种方法:

  1. 使用depends.exe确保opencv具有正确的链接。也许Visual Studio正在检查opencv其他库(like FFMPEG or GStreamer)和adding extra loader instructions是否在启动时获取这些二进制文件。另一方面,LabVIEW将执行pure dynamic load,如果库没有正确地宣传其依赖项,那么这些库将无法加载,您将获得{Modules window 1}}指针。
  2. 在VI首次调用NULL之前将Visual Studio连接到LabVIEW,然后观察dummy entry points以查看支持库是否驻留在内存中。与您正在运行的Visual Studio程序进行比较,将显示是否缺少任何内容。
  3. 强制加载缺失的库

    运行时链接在opencv中不起作用是他们项目中的错误。你应该向他们报告。

    您有两种解决方法:

    1. 修复错误,自己构建opencv,然后将其与应用程序一起重新分发。
    2. 在每个依赖项中调用Calling C/C++ DLLs from LabVIEW以提示LabVIEW将它们带入进程。然后开始调用opencv
    3. 一旦工作

      由于您的opencv dll返回指向结构的指针,因此您有两个选项:

      1. opencv库包装并调整到另一个C / C ++库中,以便输入/输出是更简单的数据类型,如数字。
      2. 使用群集和一些特定的调用库函数节点配置,以便LabVIEW可以理解opencv类型的内存布局。 NI有一些很好的文档描述了LabVIEW如何与外部库连接,但从这里开始:the Apple Developer site

答案 1 :(得分:1)

我刚试过,它对我有用。

这是前面板:

enter image description here

框图:

enter image description here

我正在使用Labview 2014和OpenCV 3.0。

我遇到了更复杂路径(包括空格等)的问题(即返回0)