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