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文件,如下(倒数第四个)