ROS:OpenCV读取本地照片发布到rviz中
ROS读取摄像头视频数据发布到rviz中
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52#include <ros/ros.h> #include <image_transport/image_transport.h> #include <opencv2/highgui/highgui.hpp> #include <cv_bridge/cv_bridge.h> #include <vector> //#include <netinet/in.h> //#include <sys/socket.h> //#include <arpa/inet.h> //#include <stdio.h> //#include <stdlib.h> //#include <unistd.h> //#include <pthread.h> //#include "opencv2/opencv.hpp" using namespace std; #include <stdio.h> cv::Mat img0,img1; int main(int argc, char** argv) { ros::init(argc, argv, "image_publisher"); ros::NodeHandle nh; image_transport::ImageTransport it(nh); image_transport::Publisher pub = it.advertise("camera/image", 1); cv::VideoCapture capture(0); while (nh.ok()) { // cv::VideoCapture capture(0); //img0为3通道 capture >> img0; //cout << ":img0.channels()" << img0.channels() << endl; //转换为灰度图 ,灰度图为单通道 cv::cvtColor(img0, img1, CV_RGB2GRAY); //cout << ":img1.channels()" << img1.channels() << endl; //灰度单通道转化为三通道 cv::Mat three_channel = cv::Mat::zeros(img0.rows,img0.cols,CV_8UC3); vector<cv::Mat > channels; for (int i=0;i<3;i++) { channels.push_back(img1); } merge(channels,three_channel); //cout << ":three_channel.channels()" << three_channel.channels() << endl; sensor_msgs::ImagePtr msg = cv_bridge::CvImage(std_msgs::Header(), "bgr8", three_channel).toImageMsg(); pub.publish(msg); //ros::spinOnce(); //loop_rate.sleep(); } }
在CMakeLists.txt中添加
复制代码
1
2find_package(OpenCV REQUIRED)
复制代码
1
2
3
4
5
6
7
8add_executable(cameraproc src/cameraproc.cpp ) target_link_libraries(cameraproc ${catkin_LIBRARIES} ${OpenCV_LIBRARIES} )
最后
以上就是幽默豆芽最近收集整理的关于ROS:OpenCV读取摄像头并发布话题的全部内容,更多相关ROS内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复