200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > ROS+openCV图像处理方法及案例

ROS+openCV图像处理方法及案例

时间:2021-01-29 00:10:19

相关推荐

ROS+openCV图像处理方法及案例

本文内容环境Ubuntu20.04。

首先,我们需要安装openCV。

sudo apt-get install ros-noetic-vision-opencvlibopencv-devpython3-opencv

然后需要安装我们的三个功能包来启动。

首先创建工作空间在终端运行

~$ mkdir -p democv01_ws/src~$ cd democv01_ws/~/democv01_ws$ catkin_make

然后再src目录下,放置我们的三个功能包。

我们可以在vscode里面打开,在democv01_ws目录下,启动命令code .

此时我们发现有报错

可能是Python最新版本标准不一样,我们在报错的地方均加上括号就可以了。

然后要修改一下编译配置,启动ctrl+shift+B选择catkin_make.build修改tasks.json文件

{

// 有关 tasks.json 格式的文档,请参见

// /fwlink/?LinkId=733558

"version": "2.0.0",

"tasks": [

{

"label": "catkin_make:debug", //代表提示的描述性信息

"type": "shell", //可以选择shell或者process,如果是shell代码是在shell里面运行一个命令,如果是process代表作为一个进程来运行

"command": "catkin_make",//这个是我们需要运行的命令

"args": [],//如果需要在命令后面加一些后缀,可以写在这里,比如-DCATKIN_WHITELIST_PACKAGES=“pac1;pac2”

"group": {"kind":"build","isDefault":true},

"presentation": {

"reveal": "always"//可选always或者silence,代表是否输出信息

},

"problemMatcher": "$msCompile"

}

]

}

然后ctrl+shift+B编译一下。

之后我们在工作空间下运行

~/democv01_ws$ source ./devel/setup.bash

~/democv01_ws$ roslaunch robot_vision usb_cam.launch

切换终端窗口再运行

rosrun robot_vision cv_bridge_test.py

如果报错可能是没有加可执行权限,chmod +x *.py

此时可以出现窗口,还可以运行

rqt_image_view进行查看

之后就可以看到我们的人脸图像了。

我们可以看一下在程序中是如何实现的。打开cv_bridge_test.py

我们需要了解两个函数

imgmsg_to_cv2():将ROS图像消息装换位openCV图像消息。

cv2_to_imsmsg():将openCV图像格式的消息转换成ROS图像消息。

主要内容在我们的上面的发布者和订阅者,

发布者是通过openCV处理后的图像返回给ROS的数据。

订阅者是ROS订阅摄像头驱动起来的最原始的数据,一旦有数据进来后,就会调用我们的回调函数,这是关键。

try:cv_image = self.bridge.imgmsg_to_cv2(data, "bgr8")except CvBridgeError as e:print (e)

这里我们将ROS中的图像数据转换成OpenCV的图像格式,这里的data是消息,bgr8是消息的编码格式,此时cv_image就拿到了OpenCV的图像,接下来就是用OpenCV进行图像处理了,和ros就无关了。最后我们再将图像数据变回去ROS的图像数据。

# 再将opencv格式额数据转换成ros image格式的数据发布try:self.image_pub.publish(self.bridge.cv2_to_imgmsg(cv_image, "bgr8"))except CvBridgeError as e:print (e)

所以我们如果要使用OpenCV,就只需要更改中间的OpenCV的代码即可。ROS在这里就是做刚开始的图像驱动和后期的图像显示以及中间的桥接。

启动我们的人脸识别案例。

~/democv01_ws$ roslaunch robot_vision usb_cam.launch

~/democv01_ws$ roslaunch robot_vision face_detector.launch

rqt_image_view

此时我们便可以显示我们的人脸进行识别啦!

这里的代码我就不做解释了。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。