uint16数据的读取以及转换为uint8数据显示

这篇具有很好参考价值的文章主要介绍了uint16数据的读取以及转换为uint8数据显示。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  Kinect相机产生的深度数据为uint16数据,16位无符号整型,图片显示一般为uint8数据,本文介绍如何正确读取Kinect深度数据以及将其转化为uint8数据进行显示。
读取uint16位数据

import cv2
path = 'uint16_img.png'
img = cv2.imread(path, cv2.IMREAD_UNCHANGED)
print(img.dtype)
print(img)

>>>
uint16
[[2369 2368 2368 ... 1469 1466 1464]
 [2373 2372 2370 ... 1469 1467 1464]
 [2376 2375 2374 ... 1469 1466 1463]
 ...
 [1610 1612 1614 ... 1816 1813 1810]
 [1609 1611 1613 ... 1816 1813 1810]
 [1607 1610 1613 ... 1816 1813 1810]]

将uint16位数据转化为uint8数据的灰度图
1、直接使用np.uint8()进行转换。

import cv2
import numpy as np
path = 'uint16_img.png'
uint16_img = cv2.imread(path, cv2.IMREAD_UNCHANGED)
uint8_img = np.uint8(uint16_img)

2、把图片等比例缩放到0-255之间再转换为uint8数据。

import cv2
import numpy as np
path = 'uint16_img.png'
uint16_img = cv2.imread(path, cv2.IMREAD_UNCHANGED)
uint16_img -= uint16_img.min()
uint16_img = uint16_img / (uint16_img.max()-uint16_img.min())
uint16_img *= 255
uint8_img = np.uint8(uint16_img)

  第一种直接转换为uint8数据的方法会对数据造成一定的影响。np.uint8()会强制将大于255的数据转化为0-255之间,本来就在0-255之间的数据则如实保存。转换方法为减去256或256的倍数,得到一个在0-255范围内的结果。第二种方法由于先对数据进行了合理的缩放,因此不存在数据信息会被影响的问题。下面举一个实例:

import cv2
import numpy as np
a = np.array([[200, 300, 400],
   	 		 [120, 230, 360],
    		 [240, 310, 120]])
a1 = np.uint8(a)
a2 = a.copy()
a2 -= a2.min()
a2 = a2 / (a2.max()-a2.min())
a2 *= 255
a2 = np.uint8(a2)
print(a1)
print(a1.dtype)
print(a2)
print(a2.dtype)

>>>
[[200  44 144]
 [120 230 104]
 [240  54 120]]
uint8
[[ 72 163 255]
 [  0 100 218]
 [109 173   0]]
uint8

将uint16位数据保存为图片
  正常使用imwrite()函数保存即可,得到的图片中的数据仍然为uint16数据类型。文章来源地址https://www.toymoban.com/news/detail-626998.html

import cv2
cv2.imwrite('uint16_img', uint16_img)

到了这里,关于uint16数据的读取以及转换为uint8数据显示的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • typedef uint8_t u8;(stm32数据类型)

    在stm32单片机的库文件里有这么一段u8和u16的定义 typedef uint8_t  u8; typedef uint16_t u16; 而uint8_t和uint16_t的定义是这样的 typedef unsigned          char uint8_t; typedef unsigned short     int uint16_t; 意味着u8就是就是指代的unsigned char 意味着u16就是就是指代的unsigned short int C语言之数据类型

    2024年02月04日
    浏览(53)
  • 【C语言】函数入参写 uint8_t *data 和 uint8_t data[]有什么区别

    在 C 语言中,函数参数 uint8_t *data 和 uint8_t data[] 实际上是等价的。它们都表示一个指向 uint8_t 类型的指针,指向数组的第一个元素。C 语言中 数组在传递给函数时会退化为指针 ,因此这两种表示方法在实际使用中没有区别。 以下是两种参数表示法的示例: 在这个例子中,

    2024年02月13日
    浏览(38)
  • javascript(js)语法 将blob转arrayBuffer、arrayBuffer转Uint8Array、Uint8Array转String的方法

    1. blob转arrayBuffer的函数 2. arrayBuffer转Uint8Array的函数 3. Uint8Array转String的函数 测试上面三种方法

    2024年02月06日
    浏览(36)
  • Flutter Dart FFI Pointer<Uint8>类型如何转成数组或String

    继上一次发布的 Flutter 直接调用so动态库,或调用C/C++源文件内函数 内容,最终我选择了第二种方式, 直接把整个 Native C++ 的项目源代码放进了 Flutter 工程里编译 (放在iOS的目录是因为它不支持自定义源码路径,Android是可以的)。这样的好处是 Android 和 iOS 两个平台都不需要

    2024年02月04日
    浏览(47)
  • python读取.stl文件(以及转换为obj方法)

    代码如下 该代码可以直接将stl文件中对点直接都输出 改进版本 把输出的点转换为npy并且保存 .stl文件格式如下图所示: 那么读取该文件就需要知道stl的构成 stl是一种表示三角网格的文件格式 STL只能用来表示封闭的面或者体,stl文件有两种:一种是ASCII明码格式,另一种是二

    2024年02月05日
    浏览(35)
  • python读取点云文件(.stl文件、.obj文件)(以及转换为obj方法)

    代码如下 该代码可以直接将stl文件中对点直接都输出 改进版本 把输出的点转换为npy并且保存 .stl文件格式如下图所示: 那么读取该文件就需要知道stl的构成 stl是一种表示三角网格的文件格式 STL只能用来表示封闭的面或者体,stl文件有两种:一种是ASCII明码格式,另一种是二

    2024年02月08日
    浏览(36)
  • UE4将读取的PNG图片数据转换为UTexture2D并显示

    从硬盘中读取压缩过的图片文件到二进制数组,获取已压缩的数据; 将已压缩的数据借助ImageWrapper中的GetRaw函数转换为原始RGB数据; 填充原始RGB数据到UTexture2D中。 处理图片类型需要使用UE提供的ImageWrapper模块,首先在project.Build.cs中加入ImageWrapper模块。 ImageWrapper是所有图片

    2024年02月15日
    浏览(37)
  • Kinect系列1:(Windows环境配置)Python3+Pykinect2+KinectV2相机读取彩色图与深度图

    前言: Kinect是微软在2009年公布的XBOX360体感周边外设。它是一种3D体感摄影机,同时它导入了即时动态捕捉、影像辨识、麦克风输入、语音辨识、社群互动等功能。而相比Kinect V1,Kinect V2具有较大的红外传感器尺寸,并且(相对于其他深度相机)具有较宽阔的视场角,生成的

    2024年04月14日
    浏览(88)
  • python读取并显示3d点云数据

    首先给出代码,很简单,如下所示: 在运行之前需要安装open3d库,安装过程如下: 点击图中的cmd,这个安装anaconda就会有。直接在cmd中输入pip install open3d -i https://pypi.tuna.tsinghua.edu.cn/simple 这是通过镜像下载,速度很快。 下载成功后,就可以运行了。运行之前,请将路径更改

    2024年02月12日
    浏览(37)
  • python中图片读取和保存以及plt.imshow()与cv2.imshow()显示图像颜色错误解决方案

    最近调试程序的时候,发现要保存的图片颜色与原图片有色差(显示图像变蓝),郁闷良久,终于发现问题,望诸君避坑。 🧸在用plt.imshow和cv2.imshow显示同一幅图时可能会出现颜色差别很大的现象。 🎯原因:opencv的接口使用BGR,而matplotlib.pyplot 则是RGB模式。 单独使用图像是

    2024年02月11日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包