ROS和Opencv的融合,感觉还是各自干各自的活,只不过中间通过cv_bridge进行链接转换下。图片(视频流)的读取,既可以采用ROS的方式,也可以采用 opencv直接读取。方便了和ROS其他包的扩展,也就不用考虑程序结构的实现了,确实是“不用重复造轮子”了。
程序代码如下:
#include <ros/ros.h>
#include <cv_bridge/cv_bridge.h>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
int main(int argc,char** argv)
{
ros::init(argc,argv,"image_test");
cv::Mat image;
cv::VideoCapture capture(0);
if(!capture.isOpened()){
ROS_ERROR("failed to open camera");
ros::shutdown();
}
image = cv::imread("/home/chasing/Templates/ros_tmp/src/opencvtest/src/ubuntu.png");
ROS_INFO_STREAM("opencv"<<image.cols<<"\t"<<image.rows);
cv::imshow("image",image);
cv::waitKey(0);
ros::NodeHandle nh;
ros::Publisher image_pub= nh.advertise<sensor_msgs::Image>("myopencv/image_raw",10);
cv::Mat edges;
ros::Rate rate(10);
while(ros::ok())
{
capture>>edges;
cv::