ROS:OpenCV读取摄像头并发布话题

19 篇文章 1 订阅
10 篇文章 0 订阅

ROS:OpenCV读取本地照片发布到rviz中 

ROS读取摄像头视频数据发布到rviz中

#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中添加

find_package(OpenCV REQUIRED)
add_executable(cameraproc
  src/cameraproc.cpp
)
target_link_libraries(cameraproc
  ${catkin_LIBRARIES}
  ${OpenCV_LIBRARIES}
)

 

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值