opencv + python3 利用ros 的 cv_bridge 传送图像消息的一种替代方法

利用自定义的图像类型代替sensor_msgs/Image, python2可以使用cv_bridge,但是python3不可以使用cv_bridge,所以在python2节点使用cv_bridge,python3不使用cv_bridge, 利用自定义的消息类型在python2和python3节点传送图像数据。

1. 自定义图像消息类型 Image_Msg.msg

int32 height
int32 width
int32 channels
uint8[] data

python2节点:图像订阅相机图像消息后,利用自定义的图像消息类型将图像发送给另一个python3的节点

#!/usr/bin/env python
# -*- coding: utf-8 -*-from __future__ import print_function
import sys
import rospy
import numpy as np
import os
from std_msgs.msg import String
from sensor_msgs.msg import Image
from cv_bridge import CvBridge, CvBridgeError
from nn_vs.msg import Image_Msg
import cv2class image_listenner:def __init__(self): self.bridge = CvBridge()self.image_sub = rospy.Subscriber("/probot_anno/hand_camera/hand_image_raw",Image,self.image_sub_callback)self.image_pub = rospy.Publisher('/image_data', Image_Msg, queue_size=1)self.img = np.zeros((480, 640, 3), dtype=np.uint8)  # 初始图像def image_sub_callback(self, data):''' callback of image_sub '''try:self.img = self.bridge.imgmsg_to_cv2(data, "bgr8")size = self.img.shapeimage = Image_Msg()image.height = size[0] # 480image.width = size[1] # 640image.channels = size[2] # 3image.data = data.data # image_data# image.data = self.bridge.cv2_to_imgmsg(self.img, encoding="bgr8").dataself.image_pub.publish(image)cv2.imshow("Image window", self.img)cv2.waitKey(10)except CvBridgeError as e:print(e) if __name__ == '__main__':rospy.init_node('image_listenner', anonymous=True)image_listenning = image_listenner()try:rospy.spin()except KeyboardInterrupt:print("Shutting down")cv2.destroyAllWindows()

python3节点:

import sys
import rospy
import numpy as np
import os
from sensor_msgs.msg import Image
from nn_vs.msg import Image_Msg
import cv2class image_listenner:def __init__(self): self.image_sub = rospy.Subscriber("/image_data",Image_Msg,self.image_sub_callback)self.img = np.zeros((480, 640, 3), dtype=np.uint8)  # 初始图像def image_sub_callback(self, data):''' callback of image_sub '''image = np.ndarray(shape=(data.height, data.width, data.channels), dtype=np.uint8, buffer=data.data) # 将自定义图像消息转化为图像self.img[:,:,0],self.img[:,:,1],self.img[:,:,2] = image[:,:,2],image[:,:,1],image[:,:,0] # 将rgb 转化为opencv的bgr顺序cv2.imshow("Image ", self.img)cv2.waitKey(10)if __name__ == '__main__':rospy.init_node('image_listenner', anonymous=True)image_listenning = image_listenner()try:rospy.spin()except KeyboardInterrupt:print("Shutting down")cv2.destroyAllWindows()

opencv + python3 利用ros 的 cv_bridge 传送图像消息的一种替代方法相关推荐

  1. Anaconda虚拟环境中,让Python3使用ROS的cv_bridge

    本文借鉴文章,但是该文存在致命性问题,所以博主另开一版,来讲述如何在ubuntu16.04中安装cv_bridge. 使用ROS的时候只用了C++,没有发现cv_bridge这个坑,最近增加了一个使用 ...

  2. OpenCV下利用傅里叶变换和逆变换实现图像卷积算法,并附自己对于卷积核/模板核算子的理解

    图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 学过信号与系统的人都知道,卷积运算一般是转化成频 ...

  3. 关于图像模式识别的几种分类方法概述

    1.基于概率统计的Bayes分类器 因为在实际分类中由于考虑的侧重点不同或者关心的点不一样导致不能使用同一决策去解决所有的事件的分类,所以需要根据不同的准测函数选择不同的分类决策(基于最小错误率的Ba ...

  4. OpenCV - 均衡直方图、Log变换、伽马变换3种图像增强方法

    所谓图像增强就是把对比度低,看不清楚的图片处理成为对比度高,比较清楚的图片. 下面有三种增强方式,其中log和gamma变换是要自己实现的,效果的好与坏是需要自己调整参数的!!!! 1.均衡直方图 上 ...

  5. 基于“FFD形变+梯度下降优化”图像配准的一种加速方法

    前文我们讲过FFD形变与梯度下降优化算法的原理: 梯度下降法详解 图像配准系列之基于B样条的FFD自由变换原理与C++实现 图像配准系列之基于FFD形变与梯度下降法的图像配准 1. "FFD ...

  6. MATLAB转移矩阵法仿真,利用转移矩阵和MATLAB求解一维薛定谔方程的一种简捷方法...

    引言在半导体量子器件的分析和设计中,需要计算薛定谔方程,转移矩阵方法是常见的求解途径之一[1,2].转移矩阵方法是较为基于抽象的矩阵迭代计算,处理比较琐杂.由于转移矩阵方法的实质仍是求解线性方程组,因 ...

  7. 用计算机描点法画方程函数图像,函数的三种表示方法及用描点法画函数图像.——青夏教育精英家教网——...

    函数是数学中的重要概念之一,它使我们从研究不变的量,转化为研究变量之间的相依关系.函数不仅是一个重要的概念,也是一种很重要的数学思想方法.通过函数概念和图象的学习可以用几何图形来解析代数问题,使代数问 ...

  8. 在OpenCV中利用卷积进行图像滤波

    简 介: 本文首先讨论了卷积核的概念,以及如何用于对图像进行滤波.然后通过他们对图像进行数学运算来实现特定的效果,比如平和和锐化.展示了如何在OpenCV中实现2D滤波. 在等同卷积卷积核之后,我们创 ...

  9. OpenCV中利用cvConvertScale()对图像数据作线性变换

    图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 在OpenCV的IplImage结构体char ...

最新文章

  1. Scrapy 学习笔记(-)
  2. C#对象数组排序方法
  3. 直播回放 | 科技赋能零售金融业务转型
  4. 动态链接库、静态库区别与VS2005项目相关设置
  5. 计算机主机主要构成,台式电脑主机的硬件组成部分简介
  6. 读取xml文件转成ListT对象的两种方法(附源码)
  7. 安装 Alibaba Cloud Toolkit
  8. php文章远程图片,php实现异步将远程链接上内容(图片或内容)写到本地的方法
  9. Sentinel服务熔断Ribbon环境预说_客户自定义限流处理_削峰填谷_流量控制_速率控制_服务熔断_服务降级---微服务升级_SpringCloud Alibaba工作笔记0048
  10. Lua笔记3 函数和数组
  11. 微信支付 SDK 惊爆漏洞:黑客可 0 元购买任意商品
  12. javascript ~~canvas url blob转换
  13. django mysql windows_Django+MySQL配置:Windows+Centos
  14. ubuntu18.04 下安装搜狗输入法
  15. VSC/SMC(二)——基于趋近律的滑模鲁棒控制(白嫖程序模型)
  16. PCB板设计流程有哪些?
  17. 计算机网络---网卡,交换机和路由器|CSDN创作打卡
  18. 5G商用牌照发放,“以竞争促落地”,日常5G服务可期
  19. 数字改造有色金属产业链,发挥产业优势效能
  20. sqoop导数到各个数据库,可以套用

热门文章

  1. 倒计时3天!华为畅想未来智能车大赛报名即将截止,已报名选手请提交参赛PPT!
  2. 2021年春季学期-信号与系统-第五次作业参考答案-第五小题
  3. 2020年智能车竞赛暑期工作计划一览表各
  4. 无中生有 : 对称方波中的二次谐波
  5. MySQL查询本年的数据的sql语句
  6. 扩展欧几里得算法_扩展欧几里得递推算法
  7. pdf压缩工具_PDF文件过大如何缩小,几步教你完成压缩
  8. 实现费用管理 mysql_移动电费房租管理系统的设计与实现(IDEA,MySQL)
  9. python怎么后退_使python迭代器向后退?
  10. python tkinter 实现一个秒表 从0开始_Writeathon:从0开始实现的一个side project