OpenCV学习实践(2) 获取当前工作空间目录

0.前言

        因为opencv涉及导入本地图片(cv::imread函数),又不想一直使用绝对路径,使用相对路径有一直出错,所以想先看看当前工作目录在哪.

        此外,这里还使用roslaunch启动程序,使当前工作目录更难找了.

        感谢tjf,ym两位师兄的帮助.

1.工作空间架构

mkdir -p opencv_ws/src
cd opencv_ws/src
catkin_create_pkg current_directory std_msgs roscpp rospy cv_bridge
cd current_directory/src
gedit current_directory_node.cpp

       在打开的current_directory_node.cpp文件中添加下述代码,下面cv::imread""中的为本地图片绝对路径,你也可以添加自己电脑上的图片的绝对路径:

#include <iostream>
#include <opencv2/core.hpp>
#include "opencv2/imgproc.hpp"
#include "opencv2/imgcodecs.hpp"
#include "opencv2/highgui.hpp"
#include "stdlib.h"
#include "unistd.h"

using namespace cv;

#define MAX_PATH 255

int main( int argc, char ** argv )
{   
    //一个正常的读取本地图片程序
    Mat src;
    char window_name[] = "current directory Demo";
    namedWindow( window_name, WINDOW_NORMAL );
    src = cv::imread("/home/meng/my_learning/opencv/opencv_ws1/src/smothing_images/src/summer_tea.jpg",1);    
    imshow( window_name, src );
    imwrite("2021_08010.jpg",src);//保存到当前工作目录,可用于查看程序运行结果

    //获取当前工作目录
    char * wd;
    char buffer[MAX_PATH];
    wd=getcwd(buffer,MAX_PATH);
    printf(wd);

    return 0;
}


        后退一步到current_directory文件夹下,修改CMakeLists.txt文件如下:

cmake_minimum_required(VERSION 3.0.2)
project(current_directory)

find_package(catkin REQUIRED COMPONENTS
  cv_bridge
  roscpp
  rospy
  std_msgs
)
find_package(OpenCV REQUIRED)
catkin_package()

include_directories(
  ${catkin_INCLUDE_DIRS} ${OpenCV_INCLUDE_DIRS}	)
add_executable(current_directory_node src/current_directory_node.cpp)
target_link_libraries(current_directory_node
  ${catkin_LIBRARIES} ${OpenCV_LIBS}	)

        回到opencv_ws文件夹下,创建ws.launch文件内容如下:

<launch>
    <node pkg="current_directory" type="current_directory_node" name="current_directory1" output="screen" />
</launch>

       终端输入命令tree(sudo apt-get install tree  可安装),得文件架构如下:

# meng @ meng in ~/my_learning/opencv_ws [0:31:45] 
$ tree                     
.
└── src
    └── current_directory
        ├── CMakeLists.txt
        ├── include
        │   └── current_directory
        ├── package.xml
        └── src
            └── current_directory_node.cpp

5 directories, 3 files

2.编译运行程序的当前工作目录

        终端到opencv_ws目录下,没有装zsh则source devel/setup.bash.

catkin_make
source devel/setup.zsh
roslaunch ws.launch

        结果如下所示,这里显示当前工作目录为:/home/meng/.ros

# meng @ meng in ~/my_learning/opencv_ws [0:40:43] 
$ roslaunch ws.launch
... logging to /home/meng/.ros/log/8ac42fb0-f930-11eb-9795-f8a2d6c541e3/roslaunch-meng-3807.log
Checking log directory for disk usage. This may take awhile.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.

started roslaunch server http://meng:40201/

SUMMARY
========

PARAMETERS
 * /rosdistro: kinetic
 * /rosversion: 1.12.17

NODES
  /
    current_directory1 (current_directory/current_directory_node)

auto-starting new master
process[master]: started with pid [3817]
ROS_MASTER_URI=http://localhost:11311

setting /run_id to 8ac42fb0-f930-11eb-9795-f8a2d6c541e3
process[rosout-1]: started with pid [3830]
started core service [/rosout]
process[current_directory1-2]: started with pid [3834]
/home/meng/.ros[current_directory1-2] process has finished cleanly
log file: /home/meng/.ros/log/8ac42fb0-f930-11eb-9795-f8a2d6c541e3/current_directory1-2*.log

        去/home/meng/.ros看看,果真有2021_08010.jpg文件,如下(倒数第四个)

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值