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檔案,如下(倒數第四個)

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/293267.html
標籤:其他
上一篇:opencv學習實踐(3) cv::waitKey()的使用
下一篇:Opencv常見資料型別(二)
