Opencv imread 不适用于相对路径
Opencv imread does not work with relative path
正如标题所说。我尝试使用 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);
}
我也尝试过使用“./”“/”“//”“\”和“\”,但还是不行!
正如CTZStef所说,图片不能在sln文件夹中,而是在VC++项目文件所在的文件夹中!
我可以为您提供以下方法来解决您的问题:
- 在您的 IDE 中更改 运行 或调试应用程序时执行应用程序的工作目录。将其更改为数据目录的根目录。
- 启动命令提示符并
cd
到数据目录的根目录。然后使用它的绝对路径启动您的应用程序。
- 添加一个编译定义来存储数据目录的绝对路径(将类似
/DDATA_DIR=C:\where\your\data\is
的内容添加到您的编译器标志中,并在您的代码中使用 vImg.push_back(imread("DATA_DIR/1.png"));
)
一般来说,如果可能的话,我会将您的源代码与您的数据分开,而不是将其复制到您的解决方案文件的文件夹中。
正如标题所说。我尝试使用 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);
}
我也尝试过使用“./”“/”“//”“\”和“\”,但还是不行!
正如CTZStef所说,图片不能在sln文件夹中,而是在VC++项目文件所在的文件夹中!
我可以为您提供以下方法来解决您的问题:
- 在您的 IDE 中更改 运行 或调试应用程序时执行应用程序的工作目录。将其更改为数据目录的根目录。
- 启动命令提示符并
cd
到数据目录的根目录。然后使用它的绝对路径启动您的应用程序。 - 添加一个编译定义来存储数据目录的绝对路径(将类似
/DDATA_DIR=C:\where\your\data\is
的内容添加到您的编译器标志中,并在您的代码中使用vImg.push_back(imread("DATA_DIR/1.png"));
)
一般来说,如果可能的话,我会将您的源代码与您的数据分开,而不是将其复制到您的解决方案文件的文件夹中。