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

本文内容环境Ubuntu20.04。

首先,我们需要安装openCV。

sudo apt-get install ros-noetic-vision-opencv libopencv-dev python3-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 格式的文档,请参见
    // https://go.microsoft.com/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

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

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

  • 2
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值