ROS——基于python3实现opencv图像处理任务
文章目录
- 软件环境
- 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
工具成功编译python3
的cv_bridge
,这篇博客应该是全网唯一一个用catkin_make
工具编译cv_bridge
而且最终运行成功的博客了,也希望能帮到各位小伙伴开发ROSpython3+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
,最重要的就是需要重新编译基于python3
的cv_bridge
,只有我们在编译完成后,才能基于python3
的cv_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图像处理任务相关推荐
- 基于python3的Opencv图像处理教程(从零到实践)(贾志刚)pdf笔记、代码
课件+网上找的相关知识讲解+代码+代码注释 百度网盘 链接:https://pan.baidu.com/s/1Vg4Ir53u4OriNiwFjE9ucQ 提取码:nbyl 链接若失效请评论!!!
- 树莓派运行python import os未找到命令_通过pip指令在树莓派上基于Python3安装OpenCV...
前言 Python是现如今在人工智能领域较为热门的编程语言,因其简洁的语言风格.丰富的类库支持以及具有活跃的交流社区,受到广大开发者的喜爱.起初,python是一门辅助科学研究的一门语言,但因其在当今 ...
- 基于python3的Opencv(一)-打开摄像头显示图像
基于Python3的Opencv学习: import cv2 as cv def video_demo(): #0是代表摄像头编号,只有一个的话默认为0capture=cv.VideoCapture( ...
- cv2 python 获取斑马线_基于python的opencv图像处理实现对斑马线的检测示例
基本思路 斑马线检测通过opencv图像处理来进行灰度值转换.高斯滤波去噪.阈值处理.腐蚀和膨胀后对图像进行轮廓检测,通过判断车辆和行人的位置,以及他们之间的距离信息,当车速到超过一定阈值时并且与行人 ...
- 基于python的opencv图像处理实现对斑马线的检测(最简单的方法!!!几十行代码搞定!!!)
基本思路 斑马线检测通过opencv图像处理来进行灰度值转换.高斯滤波去噪.阈值处理.腐蚀和膨胀后对图像进行轮廓检测,通过判断车辆和行人的位置,以及他们之间的距离信息,当车速到超过一定阈值时并且与行人 ...
- 树莓派安装python3替换python2_在树莓派上安装基于python3的OpenCV
书接上文Sebastian Zhou:从零开始在树莓派上安装系统(无显示器和网线)zhuanlan.zhihu.com关于树莓派上安装OpenCV的教程也有很多,但似乎都陷入了一个怪圈,一定要在树莓 ...
- 在pycharm2021.2中学习opencv图像处理,基于python3.9.7、pycharm完成配置
在pycharm中学习opencv图像处理 安装python 下载python安装包 开始安装 安装pycharm社区版 下载pycharm安装包 开始安装 启动pycharm创建第一个项目 创建第一 ...
- 【OpenCV图像处理入门学习教程六】基于Python的网络爬虫与OpenCV扩展库中的人脸识别算法比较
OpenCV图像处理入门学习教程系列,上一篇第五篇:基于背景差分法的视频目标运动侦测 一.网络爬虫简介(Python3) 网络爬虫,大家应该不陌生了.接下来援引一些Jack-Cui在专栏<Pyt ...
- windows平台下基于QT和OpenCV搭建图像处理平台
在之前的博客中,已经分别比较详细地阐述了"windows平台下基于VS和OpenCV"以及"Linux平台下基于QT和OpenCV"搭建图像处理框架,并 ...
- OpenCV图像处理专栏九 | 基于直方图的快速中值滤波算法
转载自:https://zhuanlan.zhihu.com/p/98092747 侵删 前言 这是OpenCV图像处理专栏的第9篇文章,主要介绍一个基于直方图的快速中值滤波算法,希望对大家有帮助. ...
最新文章
- 学习《Linux设备模型浅析之驱动篇》笔记(一)
- [转载] 晓说——第18期:古代科举考试那些事——招生
- java 可控异常_java异常处理,重新认识java异常,java7异常处理的新特性!
- dedecms 会员网站UID注册名转MID
- gprof 使用例程(转)
- anaconda的执行路径
- JavaScript随笔一篇
- python,进程和线程
- 机器人教练走进驾校_机器人教练走进中通驾校
- 用计算机模拟高空救援的过程是人工智能在,本科-人工智能复习题
- 【瑞芯微RK3188 VS 全志A31】性能向多项目对比评测
- 申请微信公众号平台流程
- 正定矩阵、二次型与椭圆椭球
- 牛刀:中国未来房价基本走势…
- php话费充值接口,手机话费充值接口
- 笨方法学python 习题26
- Linux下实现苹果AirPlay音频服务器
- STM32F407的USB_HID 基础配置STM32CubeMX
- 【Interview###】华为、中兴嵌入式(C)笔试题
- HTTPSConnectionPool(host=‘files.pythonhosted.org‘, port=443): Read timed out.