Xcode切换工作路径

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;
}
  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值