OpenCV imread函数不能使用相对路径

3
正如标题所说。我已经尝试使用argv和绝对路径加载图像并成功了,但是使用相对路径则失败了。该图像与可执行文件在同一目录中。我正在使用Windows 7 64位上的Visual Studio 2013和OpenCV 2.4.10。我该如何解决?
编辑
以下是我的代码:
include <iostream>
#include <fstream>
#include "opencv2\highgui\highgui.hpp"
#include "opencv2\stitching\stitcher.hpp"
#include "opencv2\core\core.hpp"


using namespace cv;
using namespace std;


void main()
{
    vector< Mat > vImg;
    Mat rImg;

    vImg.push_back(imread("1.png"));
    vImg.push_back(imread("2.png"));
    vImg.push_back(imread("3.png"));


    Stitcher stitcher = Stitcher::createDefault(true);


    unsigned long AAtime = 0, BBtime = 0; //check processing time  
    AAtime = getTickCount(); //check processing time  

    stitcher.stitch(vImg, rImg);

    BBtime = getTickCount(); //check processing time   
    printf("%.2lf sec \n", (BBtime - AAtime)
    getTickFrequency());         //check processing time  

    namedWindow("Stitching Result");
    imshow("Stitching Result", rImg);

    waitKey(0);

}

我也尝试使用 "./" "/" "//" "\" 和 "\", 但仍然无法正常工作!

请提供一些代码。 - Luca Davanzo
请提供一个示例代码和您所讨论的目录内容。 - Ha Dang
我已经编辑了带有代码的帖子! - bjorn
我认为如果你真的想这样做的话,你的图像应该与sln文件在同一个文件夹中 :) - CTZStef
我将图像复制到了sln文件夹中,但它仍然无法工作 :/ - bjorn
你应该检查一下你的IDE设置的工作目录,如果必要的话,将你的图片复制到那里。更多细节请看下面我的回答。 - nils
3个回答

2
如CTZStef所说,图像不能放在sln文件夹中,而应放在带有VC++项目文件的文件夹中!

0

我可以提供以下方法来解决你的问题:

  1. 在你的IDE中,将应用程序运行或调试时执行的工作目录更改为数据目录的根目录。
  2. 打开命令提示符,并使用cd命令切换到数据目录的根目录。然后使用应用程序的绝对路径启动它。
  3. 添加一个编译定义,存储数据目录的绝对路径(在编译器标志中添加类似于/DDATA_DIR=C:\where\your\data\is的内容,并在代码中使用vImg.push_back(imread("DATA_DIR/1.png"));

通常情况下,如果可能的话,我会将源代码与数据分开,并不将其复制到解决方案文件夹中。


0
在我的情况下,我遇到了视频方面的问题,但我认为对你也适用。检查二进制文件的创建位置。这将成为您二进制文件的当前源目录。在我的情况下,我的文件结构如下:
项目目录-       -构建(编译二进制文件的位置)       -数据(视频所在位置)       -包含(头文件所在位置)
使用Cmake,在/bin中创建了我的二进制文件。因此,在cv :: VideoCapture cap(filepath)中提供了路径作为"../ data / video0.avi"(如果是 cv :: imread("../ whatever / path / your / file / is / in / image0.jpg")),对我有效。希望它也对您有用!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接