opencv 存储像素值为浮点数的图像 (.tiff)

文章讲述了在处理深度图像时遇到的问题,如32CF1格式存储不正确、jpg乱码和png自动转整数。作者推荐使用tiff格式并通过Pillow和OpenCV库在Python中,以及C++的opencv处理,介绍了具体步骤和代码实例。
摘要由CSDN通过智能技术生成

在存储32CF1格式的深度图像时,怎么也存储不对

  • 存储成jpg格式的,会乱码。be like 13.6的数据存储之后再读取变成…e-30
  • 存储成png格式时,会自动把浮点数转换成整数。13.6的数据读取之后就变成14了
  • 直接把深度图片存储成.npy格式python处理很简单,但是需要c++来处理后续数据,c++弄numpy需要第三方库很麻烦
  • 查阅资料才发现可以通过tiff来存储像素值为浮点数的图片,.tiff/.tifpythonc++的opencv库中都能实现

python存储并读取tiff图片

pip install Pillow
 #为了防止和rosmsg的Image重复
from PIL import Image as PILImage

# 存储
depth_image = bridge.imgmsg_to_cv2(data, "32FC1") 
depth_name = "depth.tiff"
depth_tiff = PILImage.fromarray(depth_image)
depth_tiff.save(depth_name)

#读取
 with PILImage.open("depth.tiff") as img:
        print(img.getpixel((20,20)))

c++存储并读取tiff图片

//存储

// 读取
string depth_path1 = "/home/tju/catkin_ws_multi_vins/scripts/data/pic_vins_pose/iris_0/images/1713792937.82_depth.tiff";
Mat depth1 = imread ( depth_path1, IMREAD_UNCHANGED );
cout << "depth_size " << depth1.cols << " " << depth1.rows <<endl;
float depth_value = depth1.at<float>(20, 20);
cout << "depth value " << depth_value << endl; 
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值