关于深度图/视差图转为伪彩色的方法

        今天实验跑完后生成了深度图,但是深度图很难看清,所以需要伪彩色增强,搞了半天最后是搞出来了。首先得到深度图后要看位深度是16还是8。一般灰度图位深度是8,但是有一些是16。在转换的时候有可能会出现错误,在做伪色彩增强的时候如果将16位转成8位图像,再用转换来的八位图像做增强的话会出现错误,转换出来的效果就是红色图所示。

        而在代码中16位变成8位再增强的话就会得到正确结果,如蓝色图所示。最后分别附上8位图像和16位图像转换的代码

8位图像增强:

import cv2
import os.path
import glob
import numpy as np
from PIL import Image

def convertPNG(pngfile, outdir):
	# 读取灰度图
	im_depth = cv2.imread(pngfile)
	# 转换成伪彩色(之前必须是8位图片)
	# 这里有个alpha值,深度图转换伪彩色图的scale可以通过alpha的数值调整,我设置为1,感觉对比度大一些
	im_color = cv2.applyColorMap(cv2.convertScaleAbs(im_depth, alpha=1), cv2.COLORMAP_JET)
	# 转成png
	im = Image.fromarray(im_color)
	# 保存图片
	im.save(os.path.join(outdir, os.path.basename(pngfile)))


for pngfile in glob.glob("F:/GASDA-master/results/original_02/*.png"):
	convertPNG(pngfile, "F:/GASDA-master/results/original_02_result")

 16位图像增强:

import cv2
import os.path
import glob
import numpy as np
from PIL import Image

PNG_FILE = 'F:/GASDA-master/results/original_02/*.png'
TARGET_FILE = 'F:/GASDA-master/results/original_02_result'
def convertPNG(pngfile,outdir):
    #读取16位深度图(像素范围0~65535),并将其转化为8位(像素范围0~255)
    uint16_img = cv2.imread(pngfile, -1)    #在cv2.imread参数中加入-1,表示不改变读取图像的类型直接读取,否则默认的读取类型为8位。
    uint16_img -= uint16_img.min()
    uint16_img = uint16_img / (uint16_img.max() - uint16_img.min())
    uint16_img *= 255
    #使得越近的地方深度值越大,越远的地方深度值越小,以达到伪彩色图近蓝远红的目的。
    uint16_img = 255 - uint16_img

    # cv2 中的色度图有十几种,其中最常用的是 cv2.COLORMAP_JET,蓝色表示较高的深度值,红色表示较低的深度值。
    # cv.convertScaleAbs() 函数中的 alpha 的大小与深度图中的有效距离有关,如果像我一样默认深度图中的所有深度值都在有效距离内,并已经手动将16位深度转化为了8位深度,则 alpha 可以设为1。
    im_color=cv2.applyColorMap(cv2.convertScaleAbs(uint16_img,alpha=1),cv2.COLORMAP_JET)
    #convert to mat png
    im=Image.fromarray(im_color)
    #save image
    im.save(os.path.join(outdir,os.path.basename(pngfile)))
    print(os.path.basename(pngfile))

for pngfile in glob.glob(PNG_FILE):#C:/Users/BAMBOO/Desktop/source pics/rgbd_6/depth/*.png
    convertPNG(pngfile, TARGET_FILE)#C:/Users/BAMBOO/Desktop/source pics/rgbd_6/color

最后做完增强之后就能看的比较清晰了

  • 8
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值