【问题标题】:Why does OpenCV reject cvLoadImage("string.ext"), but accept cvLoadImage(argv[1])?为什么 OpenCV 拒绝 cvLoadImage("string.ext"),但接受 cvLoadImage(argv[1])?
【发布时间】:2010-10-01 12:16:52
【问题描述】:
#include "cv.h"
#include "highgui.h"
#include <stdio.h>


int main(int argc, char* argv[]){
    cvNamedWindow("Window1", CV_WINDOW_AUTOSIZE);
    IplImage* image = 0;
    ->->image = cvLoadImage(argv[1]);<-<-
    if(!image) printf("Unable to load image!");
    cvShowImage("Window1", image);
    char c = cvWaitKey(0);
    cvReleaseImage(&image);
    cvDestroyWindow("Window1");
    return 0;
}

如果我用cvLoadImage("247.png") 替换指示的行,我会得到一个空白窗口并且图像仍然为零

如果我运行 exe 并将其 247.png 作为参数,那就太花哨了。如果我将“247.png”直接放入代码中并在 Visual Studio 2008 中构建并运行它,它就会失败。如果我从命令提示符构建并运行,它可以工作。

这是为什么?我有点厌倦了继续前进而不放下它。

【问题讨论】:

  • 您是否尝试打印出 argv[1] 的值以查看实际传递的内容?

标签: c++ c visual-studio opencv


【解决方案1】:

当您硬编码名称时,您确定“247.png”在当前工作目录中吗?

Process Monitor 之类的名称下运行程序以查看真正打开的文件(或可能存在哪些文件 I/O 错误)。

在您编辑后向问题添加更多信息(从 VS2008 运行时会出现问题),这几乎肯定是您的问题。 VS启动程序的当前目录不是“247.png”文件所在的目录。

【讨论】:

    【解决方案2】:

    在项目->属性->配置属性->调试下有一个字段“工作目录”。将其设置为您要在其中执行的目录,这应该可以解决问题。

    【讨论】:

      【解决方案3】:

      你能看看你的cwd是什么吗?

      您可以#include &lt;direct.h&gt; 并使用_getcwd 函数来查看它是什么。这可能会让你找到罪魁祸首。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-18
        • 2011-01-08
        • 2010-10-28
        • 1970-01-01
        • 2018-09-25
        相关资源
        最近更新 更多