Xcode切换工作路径

来源:互联网 发布:战地2飞机数据修改 编辑:程序博客网 时间:2024/06/16 15:30

Mac下配置OpenCV的过程可以参考Mac下OpenCV环境搭建。

最近在编写OpenCV程序时遇到了一个不大不小的问题,使用imread函数读取图片时相对路径不起作用,只能使用绝对路径,比如我在桌面上创建了一个test工程,其绝对路径为/Users/mac/Desktop/test,在该路径下创建一个images文件夹,里面存放用来处理的两张图片lena.jpg和ellipse.jpg,于是工程的文件结构如下:

structure

使用如下代码读取时,发现图片路径发生错误。

#include <opencv2/opencv.hpp>using namespace cv;int main(int argc, const char * argv[]) {    Mat image;    image = imread("./lena.jpg");    namedWindow("test", WINDOW_AUTOSIZE);    imshow("test", image);    waitKey(0);    return 0;}

当将其中的image = imread(“./lena.jpg”);改为image = imread(“/Users/mac/Desktop/test/images/lena.jpg”);发现读取图片成功,这说明读取绝对路径成功,但是相对路径有问题。

其实这是因为Xcode在新建每个C++工程时,默认给工程分配了工作路径,比如我创建的test工程的工作路径为/Users/mac/Library/Developer/Xcode/DerivedData/test-anopxdbrcwpmycdtmfelcsbyamnr/Build/Products/Debug/,在最后的Debug文件夹下存放着工程生成的可执行文件(类似于windows下的exe文件),在Debug文件下放两张测试图片lena.jpg和ellipse.jpg,如下图:

Debug

之后在Xcode中通过如下测试代码是可以正确显示图片的,这说明Xcode分配的工作路径确实跟猜想的一样。

#include <opencv2/opencv.hpp>using namespace cv;int main(int argc, const char * argv[]) {    Mat image;    image = imread("./lena.jpg");    namedWindow("test", WINDOW_AUTOSIZE);    imshow("test", image);    waitKey(0);    return 0;}

但是这种工作路径是不符合我们的习惯的,我们希望工作路径跟工程路径一致,即工作路径也是/Users/mac/Desktop/test,如下图在Xcode中点击工程名,选择Edit Scheme,之后在Use custom working directory前打钩,并将工作路径修改为/Users/mac/Desktop/test

scheme

这样通过相对路径读取图片的代码就可以运行通过了,代码如下,注意图片的相对路径为./images/lena.jpg

#include <opencv2/opencv.hpp>using namespace cv;int main(int argc, const char * argv[]) {    Mat image;    image = imread("./images/lena.jpg");    namedWindow("test", WINDOW_AUTOSIZE);    imshow("test", image);    waitKey(0);    return 0;}
0 0