ROS通过一个叫CvBridge的功能包,将获取的图像数据转换成OpenCV的格式,OpenCV处理之后,传回给ROS进行图像显示(应用)

在这里插入图片描述

from cv_bridge import CvBridge
bridge = CvBridge()

使用imgmsg_to_cv2可将图像从ROS信息格式转换成cv格式;

使用cv2_to_imgmsg 将数据转成ROS信息格式;
参考:https://blog.csdn.net/qq_33328642/article/details/123380984

将ROS图像消息转换为OpenCV图像

要将ROS图像消息转换为cv :: Mat,模块cv_bridge.CvBridge提供以下功能:

cv_image = bridge.imgmsg_to_cv2(image_message, desired_encoding="passthrough")

第一个参数为输入的图像;

第二个参数为转换后的图像格式

如果给出默认值“passthrough”,则目标图像编码将与图像消息编码相同。

图像编码可以是以下任何一种OpenCV图像编码:

8UC[1-4]、 8SC[1-4]、 16UC[1-4]、 16SC[1-4]、32SC[1-4]、 32FC[1-4]、  64FC[1-4]

对于流行的图像编码,CvBridge将根据需要选择进行颜色或像素深度转换。 要使用此功能,请指定编码为以下字符串之一:

  • mono8: CV_8UC1, grayscale image

  • mono16: CV_16UC1, 16-bit grayscale image

  • bgr8: CV_8UC3, color image with blue-green-red color order

  • rgb8: CV_8UC3, color image with red-green-blue color order

  • bgra8: CV_8UC4, BGR color image with an alpha channel

  • rgba8: CV_8UC4, RGB color image with an alpha channel

请注意,mono8和bgr8是大多数OpenCV函数预期的两种图像编码。

S–代表—signed int—有符号整形

U–代表 –unsigned int–无符号整形

F–代表  –float 单精度浮点型

C–代表  –一张图片的通道数

参考:http://wiki.ros.org/cv_bridge/Tutorials/ConvertingBetweenROSImagesAndOpenCVImagesPython

转换后图片输出

retval = cv2.imwrite(filename, img [, paras])

cv2.imwrite() 将 OpenCV 图像保存到指定的文件。
cv2.imwrite() 基于保存文件的扩展名选择保存图像的格式。
cv2.imwrite() 只能保存 BGR 3通道图像,或 8 位单通道图像、或 PNG/JPEG/TIFF 16位无符号单通道图像

filename:要保存的文件的路径和名称,包括文件扩展名 

img:要保存的 OpenCV 图像,nparray 多维数组

paras:不同编码格式的参数,可选项

cv2.CV_IMWRITE_JPEG_QUALITY:设置 .jpeg/.jpg 格式的图片质量,取值为 0-100(默认值 95),数值越大则图片质量越高;
cv2.CV_IMWRITE_WEBP_QUALITY:设置 .webp 格式的图片质量,取值为 0-100;
cv2.CV_IMWRITE_PNG_COMPRESSION:设置 .png 格式图片的压缩比,取值为 0-9(默认值 3),数值越大则压缩比越大。
retval:返回值,保存成功返回 True,否则返回 False。
原文链接:https://blog.csdn.net/youcans/article/details/121169014

Tip:

 for a, b, c in rs 定义了a,b,c三个参数

一般这是由于rs是个元组,rs=[(1,2,3),(4,5,6),(7,8,9)],那么a,b,c返回1,2,3、4,5,6、7,8,9


版权声明:本文为peng_258原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/peng_258/article/details/127432861