文章目录

  • 软件环境
  • 1.编译python3的cv_bridge
  • 2.创建基于python3的图像ROS节点
    • (1)初始化py3_test_ws工作空间
    • (2)创建功能包
    • (3)编写python3的图像发布和接收节点
      • 摄像头发布节点
      • 摄像头接收处理节点
  • 3.运行节点
    • (1)编译
    • (2)将工作空间添加进环境变量
    • (3)运行节点
      • 运行效果图
  • 4.与C++图像处理节点混合使用

网上所有的资料都是基于catkin工具进行的,而且在编译时会发现只支持opencv3,不支持opencv4,所以无法使用。博主这里使用catkin_make工具成功编译python3cv_bridge,这篇博客应该是全网唯一一个catkin_make工具编译cv_bridge而且最终运行成功的博客了,也希望能帮到各位小伙伴开发ROS python3+opencv4的项目!

软件环境

  • Ubuntu18.04

  • python3.6.9

  • ROS Melodic

Jetson系列基础环境配置:Jetson系列——Ubuntu18.04版本基础配置(换源、ROS、远程桌面、开机自连WIFi、SD卡备份)
树莓派环境配置:树莓派4B——Ubuntu 18.04.05安装和基础配置教程(包括WIFI和远程桌面配置、ROS和主从机控制)
虚拟机环境配置:Ubuntu——双系统Ubuntu18.04系统安装和基础配置并安装ROS

1.编译python3的cv_bridge

在ROS中想使用python3,最重要的就是需要重新编译基于python3cv_bridge,只有我们在编译完成后,才能基于python3cv_bridge完成图像相关节点的使用,所以编译cv_bridge便是最基础和最重要的一步,该博客详细介绍了完整的编译过程,按步骤进行操作即可成功。

  • ROS——基于Ubuntu18.04和ROS Melodic编译python3的cv_bridge

在编译好cv_bridge后,我们就可以进行测试基于python3的图像处理节点啦!

2.创建基于python3的图像ROS节点

(1)初始化py3_test_ws工作空间

mkdir py3_test_ws && cd py3_test_ws
mkdir src && cd src
catkin_init_workspace

(2)创建功能包

catkin_create_pkg py3_demo rospy rosmsg roscpp

(3)编写python3的图像发布和接收节点

cd py3_demo && mkdir scripts
cd scripts && touch camera.py img_process.py
chmod +x camera.py
chmod +x img_process.py

将以下两个节点代码分别粘进对应的文件中:

摄像头发布节点

camera.py

#!/usr/bin/env python3
# coding:utf-8import cv2
import numpy as np
import rospy
from std_msgs.msg import Header
from sensor_msgs.msg import Image
from cv_bridge import CvBridge , CvBridgeError
import timeif __name__=="__main__":import sys print(sys.version) # 查看python版本capture = cv2.VideoCapture(0) # 定义摄像头rospy.init_node('camera_node', anonymous=True) #定义节点image_pub=rospy.Publisher('/image_view/image_raw', Image, queue_size = 1) #定义话题header = Header(stamp = rospy.Time.now())header.frame_id = "Camera"ros_frame = Image()ros_frame.header=headerros_frame.width = 640ros_frame.height = 480ros_frame.encoding = "bgr8"# ros_frame.step = 1920while not rospy.is_shutdown():    # Ctrl C正常退出,如果异常退出会报错device busy!start = time.time()ret, frame = capture.read()if ret: # 如果有画面再执行# frame = cv2.flip(frame,0)   #垂直镜像操作frame = cv2.flip(frame,1)   #水平镜像操作   ros_frame.data = np.array(frame).tostring() #图片格式转换image_pub.publish(ros_frame) #发布消息end = time.time()  print("cost time:", end-start ) # 看一下每一帧的执行时间,从而确定合适的raterate = rospy.Rate(25) # 10hz capture.release()cv2.destroyAllWindows() print("quit successfully!")

摄像头接收处理节点

img_process.py

#!/usr/bin/env python3
# coding:utf-8import rospy
import numpy as np
from sensor_msgs.msg import Image
from cv_bridge import CvBridge, CvBridgeError
import cv2def callback(data):cv_img = bridge.imgmsg_to_cv2(data, "bgr8")cv2.imshow("frame" , cv_img)cv2.waitKey(1)if __name__ == '__main__':import sys print(sys.version) # 查看python版本rospy.init_node('img_process_node', anonymous=True)bridge = CvBridge()rospy.Subscriber('/image_view/image_raw', Image, callback)rospy.spin()

3.运行节点

(1)编译

cd ../../..
catkin_make -DPYTHON_EXECUTABLE=/usr/bin/python3

(2)将工作空间添加进环境变量

sudo vim ~/.bashrc
source /home/nano/workspace/py3_test_ws/devel/setup.bash

(3)运行节点

roscore
rosrun py3_demo camera.py
rosrun py3_demo img_process.py

运行效果图

可以看到,打印出的python版本为3.6.9

在这之后就可以使用python3进行图像处理、深度学习等任务节点的开发啦,如果你也成功跑通了该项目,给博主个三连支持下吧,嘻嘻~

4.与C++图像处理节点混合使用

  • ROS——C++与Python3的图像节点基于OpenCV相互发送和接收

ROS——基于python3实现opencv图像处理任务相关推荐

  1. 基于python3的Opencv图像处理教程(从零到实践)(贾志刚)pdf笔记、代码

    课件+网上找的相关知识讲解+代码+代码注释 百度网盘 链接:https://pan.baidu.com/s/1Vg4Ir53u4OriNiwFjE9ucQ 提取码:nbyl 链接若失效请评论!!!

  2. 树莓派运行python import os未找到命令_通过pip指令在树莓派上基于Python3安装OpenCV...

    前言 Python是现如今在人工智能领域较为热门的编程语言,因其简洁的语言风格.丰富的类库支持以及具有活跃的交流社区,受到广大开发者的喜爱.起初,python是一门辅助科学研究的一门语言,但因其在当今 ...

  3. 基于python3的Opencv(一)-打开摄像头显示图像

    基于Python3的Opencv学习: import cv2 as cv def video_demo(): #0是代表摄像头编号,只有一个的话默认为0capture=cv.VideoCapture( ...

  4. cv2 python 获取斑马线_基于python的opencv图像处理实现对斑马线的检测示例

    基本思路 斑马线检测通过opencv图像处理来进行灰度值转换.高斯滤波去噪.阈值处理.腐蚀和膨胀后对图像进行轮廓检测,通过判断车辆和行人的位置,以及他们之间的距离信息,当车速到超过一定阈值时并且与行人 ...

  5. 基于python的opencv图像处理实现对斑马线的检测(最简单的方法!!!几十行代码搞定!!!)

    基本思路 斑马线检测通过opencv图像处理来进行灰度值转换.高斯滤波去噪.阈值处理.腐蚀和膨胀后对图像进行轮廓检测,通过判断车辆和行人的位置,以及他们之间的距离信息,当车速到超过一定阈值时并且与行人 ...

  6. 树莓派安装python3替换python2_在树莓派上安装基于python3的OpenCV

    书接上文Sebastian Zhou:从零开始在树莓派上安装系统(无显示器和网线)​zhuanlan.zhihu.com关于树莓派上安装OpenCV的教程也有很多,但似乎都陷入了一个怪圈,一定要在树莓 ...

  7. 在pycharm2021.2中学习opencv图像处理,基于python3.9.7、pycharm完成配置

    在pycharm中学习opencv图像处理 安装python 下载python安装包 开始安装 安装pycharm社区版 下载pycharm安装包 开始安装 启动pycharm创建第一个项目 创建第一 ...

  8. 【OpenCV图像处理入门学习教程六】基于Python的网络爬虫与OpenCV扩展库中的人脸识别算法比较

    OpenCV图像处理入门学习教程系列,上一篇第五篇:基于背景差分法的视频目标运动侦测 一.网络爬虫简介(Python3) 网络爬虫,大家应该不陌生了.接下来援引一些Jack-Cui在专栏<Pyt ...

  9. windows平台下基于QT和OpenCV搭建图像处理平台

        在之前的博客中,已经分别比较详细地阐述了"windows平台下基于VS和OpenCV"以及"Linux平台下基于QT和OpenCV"搭建图像处理框架,并 ...

  10. OpenCV图像处理专栏九 | 基于直方图的快速中值滤波算法

    转载自:https://zhuanlan.zhihu.com/p/98092747  侵删 前言 这是OpenCV图像处理专栏的第9篇文章,主要介绍一个基于直方图的快速中值滤波算法,希望对大家有帮助. ...

最新文章

  1. 学习《Linux设备模型浅析之驱动篇》笔记(一)
  2. [转载] 晓说——第18期:古代科举考试那些事——招生
  3. java 可控异常_java异常处理,重新认识java异常,java7异常处理的新特性!
  4. dedecms 会员网站UID注册名转MID
  5. gprof 使用例程(转)
  6. anaconda的执行路径
  7. JavaScript随笔一篇
  8. python,进程和线程
  9. 机器人教练走进驾校_机器人教练走进中通驾校
  10. 用计算机模拟高空救援的过程是人工智能在,本科-人工智能复习题
  11. 【瑞芯微RK3188 VS 全志A31】性能向多项目对比评测
  12. 申请微信公众号平台流程
  13. 正定矩阵、二次型与椭圆椭球
  14. 牛刀:中国未来房价基本走势…
  15. php话费充值接口,手机话费充值接口
  16. 笨方法学python 习题26
  17. Linux下实现苹果AirPlay音频服务器
  18. STM32F407的USB_HID 基础配置STM32CubeMX
  19. 【Interview###】华为、中兴嵌入式(C)笔试题
  20. HTTPSConnectionPool(host=‘files.pythonhosted.org‘, port=443): Read timed out.

热门文章

  1. MFC之对于文档类的DeleteContents和OnNewDocument说明29
  2. Python的exec
  3. CSS利用PS切图+学成在线综合案例
  4. Kaggle Tweet Sentiment Extraction竞赛
  5. 联想拯救者Y9000P唤醒修复
  6. 中文转换为拼音插件guiHz2Py
  7. 应用市场首发,APP推广如何应对
  8. 一文读懂海姆达尔Heimdallr经济模型,解析链游明星的价值优势
  9. python出现Unknown label type: 'continuous'问题
  10. python高德地图api调用实例_Python玩转高德地图API(二)