0.本文为测试cv::waitKey()的触发条件

1.程序准备

mkdir -p opencv_test/src
cv opencv_test/src
catkin_create_pkg commandlineparse std_msgs rospy roscpp cv_bridge
# meng @ meng in ~/my_learning/opencv_test [16:13:15] 
$ tree
.
└── src
    ├── CMakeLists.txt -> /opt/ros/kinetic/share/catkin/cmake/toplevel.cmake
    └── commandlineparse
        ├── CMakeLists.txt
        ├── include
        │   └── commandlineparse
        ├── package.xml
        └── src
            ├── commandlineparse_node.cpp
            └── tulip.jpg
 
5 directories, 5 files

   如上所述,添加文件commandlineparse_node.cpp(上面倒数第三行),修改CMakeLists.txt(上面commandlineparse文件夹内的)

        commandlineparse_node.cpp,main函数内第二行为本地图片的绝对路径

#include "opencv2/imgproc.hpp"
#include "opencv2/highgui.hpp"
#include "opencv2/core.hpp"
#include "opencv2/imgcodecs.hpp"
#include "iostream"
#include "ros/ros.h"
 
using namespace cv;
using namespace std;
 
int main(int argc,char** argv){
    Mat src;
    src=imread("/home/meng/my_learning/opencv/opencv_ws1/src/commandLineParse/src/tulip.jpg",1);
    namedWindow("my_window",WINDOW_NORMAL);
    imshow("my_window",src);
    waitKey(0);
    return 0;
}

       CMakeLists.txt     

cmake_minimum_required(VERSION 3.0.2)
project(commandlineparse)
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(commandlineparse_node src/commandlineparse_node.cpp)
target_link_libraries(commandlineparse_node
  ${catkin_LIBRARIES}  ${OpenCV_LIBS} )

2.程序运行

        回到opencv_test目录下,打开终端,运行效果如下图所示

catkin_make
source devel/setup.zsh
######或source devel/setup.bash
rosrun commandlineparse commandlineparse_node

     此时将鼠标放置于打开的窗口图片上,点击鼠标左键,按下键盘上的"ESC"键即可触发"cv::waitKey()"函数,使程序结束

附图片,来源与网络,仅供学习使用啦