环境:
ubuntu20.04
opencv4.5.5
ros: noetic
参考链接:
在ROS中使用OpenCV进行简单的图像处理
ROS中使用opencv
第一个链接注释比较多,第二个链接是搞定的,成功的界面是这样的:
读取opencv的程序:
#include#include #include #include #include #include #include static const char WINDOW[] = "Image window"; static void help() { printf("nThis program demonstrates converting OpenCV Image to ROS Image messages n" ); } int main(int argc, char** argv) { help(); ros::init(argc, argv, "image_converter"); //Reading an image from the file cv::Mat cv_image = cv::imread("/home/qiao/1.png"); if(cv_image.empty() ) { ROS_ERROR("Read the picture failed!"); return -1; } //Convert OpenCV image to ROS message ros::NodeHandle node; image_transport::ImageTransport transport(node); image_transport::Publisher image_pub; image_pub=transport.advertise("OutImage", 1); ros::Time time=ros::Time::now(); cv_bridge::CvImage cvi; cvi.header.stamp = time; cvi.header.frame_id = "image"; cvi.encoding = "bgr8"; cvi.image = cv_image; sensor_msgs::Image im; cvi.toImageMsg(im); image_pub.publish(im); ROS_INFO("Converted Successfully!"); //Show the image cv::namedWindow(WINDOW); cv::imshow(WINDOW,cv_image); cv::waitKey(0); ros::spin(); return 0; }
后面还需要编译:
mkdir -p 工作区/src cd 工作区/src catkin_init_workspace catkin_create_pkg 工作区 sensor_msgs cv_bridge roscpp std_msgs image_transport find_package(OpenCV REQUIRED) include_directories(include ${OpenCV_INCLUDE_DIRS}) include_directories(include ${catkin_INCLUDE_DIRS}) add_executable(工作区_node src/工作区_node.cpp) target_link_libraries(工作区_node ${catkin_LIBRARIES} ${OpenCV_LIBRARIES}) add_dependencies(工作区_node 工作区_gencpp) cd 工作区 catkin_make
然后就是运行:
roscore source devel/setup.bash rosrun 工作区 cpp文件的名字
至此能正确显示图像,流程也是没有问题的。
不过有几个问题我没理清楚:
- opencv是我编译好的4.5.5么,还是ROS自带的?收端怎么收的?
等我整明白了来还愿!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)