本篇介绍如何在Ros-kinetic环境下运用opencv2进行开发的配置,系统平台为64位Ubuntu16.04。

需要系统环境:

1.Ros kinetic版本,一般自带cv_bridge, 若没有可以通过apt下载

sudo apt-get install ros-kinetic-cv-bridge

2.OpenCV 2.4.9版本,一般来说cv_bridge依赖的OpenCV版本为2.4.8,亲测2.4.9可以用,安装可以参考https://blog.csdn.net/u013250416/article/details/78913126

  2.1  先下载OpenCV的源码http://opencv.org/downloads.html并解压到任意目录

  2.2 事先安装下列软件

  sudo apt-get install build-essential cmake libgtk2.-dev pkg-config python-dev python-numpy libavcodec-dev libavformat-dev libswscale-dev 

  2.3 进入cmake并编译

cd cmake
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..
sudo make install

  2.4 测试

  新建C++代码test.cpp:

 #include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main (int argc, char **argv)
{
Mat image, image_gray;
image = imread(argv[], CV_LOAD_IMAGE_COLOR );
if (argc != || !image.data) {
cout << "No image data\n";
return -;
} cvtColor(image, image_gray, CV_RGB2GRAY);
namedWindow("image", CV_WINDOW_AUTOSIZE);
namedWindow("image gray", CV_WINDOW_AUTOSIZE); imshow("image", image);
imshow("image gray", image_gray); waitKey();
return ;
}

  新建makefile文件:

CC = g++
# 可执行文件
TARGET = test
# C文件
SRCS = main.cpp
# 目标文件
OBJS = $(SRCS:.cpp=.o)
# 库文件
DLIBS = -lopencv_core -lopencv_imgproc -lopencv_highgui
# 链接为可执行文件
$(TARGET):$(OBJS)
$(CC) -o $@ $^ $(DLIBS)
clean:
rm -rf $(TARGET) $(OBJS)
# 编译规则 $@代表目标文件 $< 代表第一个依赖文件
%.o:%.cpp
$(CC) -o $@ -c $<

  make,产生了两个文件:test文件和test.o文件 ,并测试:

./test lena.bmp

注:程序运行的过程中,常见错误error while loading shared libraries: libopencv_highgui.so.2.4: cannot open,解决方法:

  1.用gedit打开/etc/ld.so.conf,注意要用sudo打开获得权限,不然无法修改,
如:sudo gedit /etc/ld.so.conf,在文件中加上一行 /usr/loacal/lib,/user/loacal是opencv安装路径 就是makefile中指定的安装路径
加了之后的变为

2.再运行sudo ldconfig,
修改bash.bashrc文件,sudo gedit /etc/bash.bashrc
在文件末尾加入:
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
加后的图:

3.

source /etc/bash.bashrc

然后就可以正常运行了!

Python环境配置:

python下由于ros一般自带cv_bridge,系统同样自带cv2,处理起来比较简单,当摄像机采出的图像以rostopic发布时,可以用以下代码进行测试:

 import rospy
from sensor_msgs.msg import Image
import cv2
from cv_bridge import CvBridge, CvBridgeError class Image_Receiver:
def __init__(self):
rospy.Subscriber('/camera/rgb/image_color', Image, callback=self.image_rgb_callback, queue_size=1000)
self.cv_bridge = CvBridge()
rospy.spin() def image_rgb_callback(self, data):
cv_image = self.cv_bridge.imgmsg_to_cv2(data, "bgr8")
(rows, cols, channnels) = cv_image.shape
if cols > 60 and rows > 60:
cv2.circle(cv_image, (50, 50), 10, 255)
cv2.imshow("Image Window", cv_image)
cv2.waitKey(3) if __name__ == '__main__':
rospy.init_node('rgb_image_get_node')
Image_Receiver()

C++ QT环境配置:

由于本人开发环境为qt,则需要在qmake执行.pro文件时同时加载ros和opencv2的环境,在.pro文件中添加以下依赖:

# ROS Depends
INCLUDEPATH += /opt/ros/kinetic/include \ DEPENDPATH += /opt/ros/kinetic/include \ LIBS += -L/opt/ros/kinetic/lib \
-L/usr/local/lib \
-lroscpp \
-lrospack \
-lpthread \
-lrosconsole \
-lrosconsole_log4cxx \
-lrosconsole_backend_interface \
-lxmlrpcpp \
-lroscpp_serialization \
-lrostime \
-lcpp_common \
-lroslib \
-ltf \
-lyaml-cpp \
-lkdl_conversions \
-lcv_bridge \
-lboost_system # OpenCV Depends
LIBS += -lopencv_core \
-lopencv_imgproc \
-lopencv_highgui

编写测试代码如下:

#include <ros/ros.h>
#include <sensor_msgs/Image.h>
#include <cv_bridge/cv_bridge.h>
class Image_Receiver
{
public:
Image_Receiver()
{
subsRgbImage = nh.subscribe<sensor_msgs::Image>("/camera/rgb/image_color", , &Image_Receiver::image_rgb_callback, this);
ros::spin();
}
~Image_Receiver()
{ }
void image_rgb_callback(const sensor_msgs::Image::ConstPtr& data)
{
cv_bridge::CvImagePtr cv_ptr;
try{
cv_ptr = cv_bridge::toCvCopy(data, sensor_msgs::image_encodings::BGR8);
} catch (cv_bridge::Exception& e) {
std::cout << e.what() << std::endl;
}
receiveFlag = true;
} private:
sensor_msgs::Image::ConstPtr m_data;
ros::NodeHandle nh;
ros::Subscriber subsRgbImage;
bool receiveFlag;
}; int main(int argc, char** argv)
{
ros::init(argc, argv, "image_receive_node");
Image_Receiver image_receiver_instance;
return ;
}

 

Ros Kinetic 配置 OpenCV2和CV_bridge (Python, C++)的更多相关文章

  1. ROS_Kinetic_02 ROS Kinetic 迁移指南及中文wiki指南(Migration guide)

    ROS_Kinetic_02 ROS Kinetic 迁移指南(Migration guide) 对于ROS Kinetic Kame有些功能包已经更新改变,提供关于这些包的迁移注意或教程.主要针对于 ...

  2. ROS_Kinetic_01 在ubuntu 16.04安装ROS Kinetic 2017.01更新

    ROS_Kinetic系列学习(一),在ubuntu 16.04安装ROS Kinetic. Celebrating 9 Years of ROS! ubuntu16.04已经发布半年多了,ROS的K ...

  3. SLAM+语音机器人DIY系列:(二)ROS入门——3.在ubuntu16.04中安装ROS kinetic

    摘要 ROS机器人操作系统在机器人应用领域很流行,依托代码开源和模块间协作等特性,给机器人开发者带来了很大的方便.我们的机器人“miiboo”中的大部分程序也采用ROS进行开发,所以本文就重点对ROS ...

  4. Ubuntu 16.04 ROS环境配置

    最近新入职一家公司,是搞智能无人驾驶的,用的操作系统是Ubuntu和ros,之前没接触过ros系统,既然公司用那就必须的学习啊,话不多说先装它一个ros玩玩... 1. Ubuntu 安装 ROS K ...

  5. 在ROS Kinetic和Gazebo 8中使用智能汽车仿真演示

    在ROS Kinetic和Gazebo 8中使用智能汽车仿真演示 智能车无人驾驶技术是目前人工智能和机器人技术的研究热点,有许多开源平台可以使我们零基础零成本入门无人驾驶技术.本文分享一下目前ROS官 ...

  6. Ubuntu 下 ROS Kinetic 的安装

    安装环境为 Ubuntu 16.04 配置 Ubuntu 软件仓库 打开“设置”中的“软件和更新” 把 “restricted”.“universe” 和 “multiverse” 这三项勾上 勾完后 ...

  7. Windows下Python2.7配置OpenCV2.4.10

    所需文件: 1 Python2.7.13 链接: https://www.python.org/downloads/release/python-2713/ 这里选Windows 64位的安装包. 2 ...

  8. ubuntu16.04安装Ros(kinetic版本)【亲测好用】

    准备 1.ubuntu16.04 64位桌面版 ps:关于系统的下载和安装这里不做介绍,请自行百度,不是介绍重点 2.更改源 图上的几个勾默认是选上的,如果没有选上,选成上图这样(如果修改过勾,点击关 ...

  9. Ubuntu 16.04安装ROS Kinetic详细教程 | Tutorial to Install and Configure ROS Kinetic on Ubuntu 16.04

    本文首发于个人博客https://kezunlin.me/post/e2780b93/,欢迎阅读! Tutorial to Install and Configure ROS Kinetic on U ...

随机推荐

  1. 编辑器之神---vim

    1. 不是在命令模式下时:yy   -----复制光标所在的这一行              p  ----粘贴      dd  -----剪切光标所在的行 D ---从当前的光标开始剪切,一直到行 ...

  2. Redis学习-hash数据类型

    hash 类型是string类型的field和value的映射表,或者说是一个string集合,适合存储对象,相比较而言,将一个对象类型存储在hash类型里要比存储在string类型里占用更少的内存空 ...

  3. Python 缓存服务

    缓存服务:mongodb.redis.memcache mongodb:早期的缓存系统,直接持久话,数据即存内存也同步到硬盘. redis:主流缓存系统,半持久化,默认存在内存,需要手动调用存在硬盘, ...

  4. Linux 管理服务启动工具

    工具:ntsysv(图形,可以关闭开启服务) 安装包:ntsysv-1.3.30.2-2.el5 工具:chkconfig –list(文字,开启关闭服务) 自定义加服务:执行脚本放入:/etc/in ...

  5. Linux TCP并发请求溺出 调优

    TCP并发请求溺出 调优:系统开启某个监听端口后,当多个TCP请求连接监听端后,会把多个请求交给backlog的默认监听队列由socket server一并处理,backlog有自己的队列长度默认12 ...

  6. robot framework---时间控件取值

    项目中遇到日期控件定位不了,网上各种找,并没有适合我的,目前通过Javascript已解决了,再次做个记录,方便自己日后查找,如有同样问题的同学也可以有个参考! 先说明,不同的定位方式是看开发同学如何 ...

  7. css技巧小计

    今天又学到两招,一招是把大框写相对定位,然后小框写绝对定位,运用top和left,想去哪里去哪里 另一招是边框渐变色,微信小程序,边框写渐变我没成功,然后大佬支招写一个大框,相对定位,然后设背景渐变色 ...

  8. apache kafka技术分享系列(目录索引)

    https://blog.csdn.net/lizhitao/article/details/39499283 https://blog.csdn.net/lizhitao

  9. xml.libxml2_添加带tagname的xml文本(xmlNewTextChild)

    1. 2.例子代码: int TgText::NodeNew_G2SVG(xmlNode* _pNodeCurrent_G, xmlNode* _pNodeParent_SVG, xmlNode** ...

  10. Rancher2.0中使用外置NFS存储部署Nginx实验

    目录: 1.环境准备工作 1.1 准备好Rancher2.0集群环境 1.2 准备好外部NFS服务器 2.Rancher2.0中使用NFS存储的方法 2.1 在集群中创建持久卷(PV) 2.2 在项目 ...