Dex-Net的GQCNN模型需要的 .npy文件以及通过工具得到的.png格式深度图和 .npy文件的转换

1. npy文件

npy文件是numpy可打开、处理的一种文件格式,数据类型就是普通的numpy数组,可通过如下代码进行测试。

import numpy as np
a = np.array([[1,2], [3,4]])
np.save('test.npy', a)

b = np.load('test.npy')
print(type(b))
print(b)

2. RGB-D相机的深度图显示及保存

首先RGB-D相机厂商会提供相应的驱动,然后我们通过驱动调用接口,从而得到深度图。而我这边主要通过ROS来订阅深度相机的Topic--“/xtion/depth_registered/image_raw”。ROS提供了rqt_image_view图形工具用于订阅Topic显示图像信息,指令以及订阅话题后的深度图像如下所示。

rosrun rqt_image_view rqt_image_view

Dex-Net的GQCNN模型需要的 .npy文件以及通过工具得到的.png格式深度图和 .npy文件的转换_第1张图片

然后使用python的opencv模块cv2使用深度图模式加载深度图像并除以1000.0转换为以米为单位的数据替换掉GQCNN原先读取读取的数据,最终图像具有层次波浪的情况,代码和图像如下。

import cv2
import numpy as np

tmp = cv2.imread("test.png", cv2.IMREAD_ANYDEPTH)
depth_init = tmp[:, :, np.newaxis]
depth_data = depth_init / 1000.0

Dex-Net的GQCNN模型需要的 .npy文件以及通过工具得到的.png格式深度图和 .npy文件的转换_第2张图片

 Dex-Net的GQCNN模型需要的 .npy文件以及通过工具得到的.png格式深度图和 .npy文件的转换_第3张图片 Dex-Net的GQCNN模型需要的 .npy文件以及通过工具得到的.png格式深度图和 .npy文件的转换_第4张图片

3. 使用ROS的CvBridge模块订阅topic保存深度图

代码和最终运行效果如下。

#!/usr/bin/env python
from __future__ import print_function
import sys
import rospy
import cv2
import numpy as np

from PIL import Image as PImage
from perception import image
from matplotlib import pyplot as plt
from visualization import Visualizer2D as vis

from std_msgs.msg import String
from sensor_msgs.msg import Image
from cv_bridge import CvBridge, CvBridgeError
import sensor_msgs.point_cloud2 as pc2
bridge = CvBridge()




def get_RGB(image_topic1):
    rgb = rospy.wait_for_message(image_topic1, Image)
    cv2_img1 = bridge.imgmsg_to_cv2(rgb, "bgr8")
    print(cv2_img1.shape)
    cv2.imwrite('rgb.png', cv2_img1)


def get_depth(image_topic2):
    depth = rospy.wait_for_message(image_topic2,Image)
    cv2_img2 = bridge.imgmsg_to_cv2(depth, "16UC1")
    print(cv2_img2.shape)
    cv2.imwrite('depth.png', cv2_img2)


def main():
    rospy.init_node('image_listener')
    image_topic1="/xtion/rgb/image_raw"
    image_topic2="/xtion/depth/image_raw"
    get_RGB(image_topic1)
    get_depth(image_topic2)


if __name__ == '__main__':
      main( )


'''
def show_depth():

	depth_image = cv2.imread("/home/lhj/Documents/2.png",cv2.IMREAD_ANYDEPTH)
	D3_image = depth_image[:,:,np.newaxis]
	npy_image = D3_image/1000.0
	np.save('depth_6.npy',npy_image)
	npy_image = image.DepthImage.open("/home/lhj/Documents/imagej.npy")
	inpaint_image = npy_image.inpaint()
	vis.imshow(inpaint_image)
	vis.show()


	color_image = cv2.imread("/home/lhj/Documents/1.png")
	gqcnn_color_image = image.ColorImage(color_image)
	binaryimg = gqcnn_color_image.foreground_mask(100)

	data_array = np.zeros((480,640),dtype = np.uint8)
	for i in range(480):
   		for j in range(640):
       			data_array[i,j] = binaryimg[i,j,0]

	jim = PImage.fromarray(data_array.astype(np.uint8))
	jim.show()
	jim.save('segmask_6.png')

'''

Dex-Net的GQCNN模型需要的 .npy文件以及通过工具得到的.png格式深度图和 .npy文件的转换_第5张图片Dex-Net的GQCNN模型需要的 .npy文件以及通过工具得到的.png格式深度图和 .npy文件的转换_第6张图片

 深度图太黑不容易看出来,找个比较暗的地方看。

你可能感兴趣的:(ROS,机器人,GQCNN,.npy文件格式,png格式的深度图和npy格式)