将图像转换为8位通道_imagej像素和毫米转换

将图像转换为8位通道_imagej像素和毫米转换一背景遥感图像一般像素深度比较高,基本的就是unit16了,但是如果想在OpenCV中正确使用,而且不丢失数据RGB三通道信息,就需要转为unit8才能进行其他分析。二分析unit16的图像最大值为216-1=65535,而OpenCV中的图像最大值为28-1=255,当大于255时会自动变为255,这样数据信息就丢失了。下面代码采用的方式是线性缩放,将0到65535的数值线性缩…


Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

一 背景

遥感图像一般像素深度比较高,基本的就是unit16了,但是如果想在OpenCV中正确使用,而且不丢失数据RGB三通道信息,就需要转为unit8才能进行其他分析。

二 分析

unit16的图像最大值为216-1 = 65535,而OpenCV中的图像最大值为28-1 = 255,当大于255时会自动变为255,这样数据信息就丢失了。下面代码采用的方式是线性缩放,将0到65535的数值线性缩放到0到255

三 代码

说明:代码使用了OpenCV和gdal函数包,gdal用来读取.tif文件unit16图片,OpenCV用来重新生成unit8图片


import os
import gdal
from cv2 import cv2
import numpy as np
import sys
#拉伸图像 #图片的16位转8位
def uint16to8(bands, lower_percent=0.001, higher_percent=99.999): 
    out = np.zeros_like(bands,dtype = np.uint8)
    n = bands.shape[0] 
    for i in range(n): 
        a = 0 # np.min(band) 
        b = 255 # np.max(band) 
        c = np.percentile(bands[i, :, :], lower_percent) 
        d = np.percentile(bands[i, :, :], higher_percent) 
        t = a + (bands[i, :, :] - c) * (b - a) / (d - c) 
        t[t<a] = a
        t[t>b] = b
        out[i, :, :] = t 
    return out 
    
path = sys.path[0] #获取当前代码路径
tif_list = [x for x in os.listdir(path) if x.endswith(".tif")]
for num, i in enumerate(tif_list):
    print(path+'\\'+i)
    dataset = gdal.Open(path+'\\'+i)
    width = dataset.RasterXSize                         # 获取数据宽度
    height = dataset.RasterYSize                        # 获取数据高度
    outbandsize = dataset.RasterCount                   # 获取数据波段数
    im_geotrans = dataset.GetGeoTransform()             # 获取仿射矩阵信息
    im_proj = dataset.GetProjection()                   # 获取投影信息
    datatype = dataset.GetRasterBand(1).DataType
    im_data = dataset.ReadAsArray()                     #获取数据 
    # print(im_data.shape)
    img3 = uint16to8(im_data)
    img2 = img3[0:3,:,:]
    img2 = np.transpose(img2,(1,2,0))
    out = img2[:,:,::-1] #rgb->bgr
    cv2.imwrite(path+'\\'+i, out)
    print(num)
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/192504.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • ORA-12514 解决方法

    ORA-12514 解决方法场景:修改oracle系统参数之后,数据库重启,客户端报ORA-12514错误,其实这只是表象,实际并非Listener的问题。SELECT*FROMV$RESOURCE_LIMIT根据

    2022年7月1日
  • RelativeLayout.LayoutParams学习与运用

    RelativeLayout.LayoutParams学习与运用1、了解LayoutParams其实LayoutParams就是代表一个布局属性,每一个ViewGroup对应一种LayoutParams。LinearLayout对应LinearLayout.LayoutParams,RelativeLayout对应RelativeLayout.LayoutParams。我们在XML中写的大多数属性,在代码中通过LayoutParams同样可以操作界面布局。下面以

    2022年7月17日
  • NFV SDN_sdn和nfv与云计算

    NFV SDN_sdn和nfv与云计算专业技术分析NFV与SDN的区别是什么?5条评论2013-06-1400:01   it168网站原创 作者:vivia/译 编辑: 闫志坤  【IT168技术】软件定义型网络(SDN)和网络功能虚拟化(NFV)都是热议的话题。他们之前显然是有关系的,但是它们有哪些地方类似呢?不同之处又在哪里?二者如何做到相互补充呢?  SDN——诞生于高校,成

    2022年9月9日
  • html中div加滚动条

    html中div加滚动条div加滚动条的两种方法:一、<divstyle=”overflow:scroll;width:400px;height:400px;”></div>记住宽和高一定要设置噢,否则不成的不过在不超出时,会有下面的滚动条,所以不是最好的选择二、<divstyle=”overflow-y:auto;overflow-x:auto;…

    2022年7月12日
  • 服务器资源监控工具—nmon

    服务器资源监控工具—nmon      在性能测试过程中,对服务端的各项资源使用情况进行监控是很重要的。对于监控服务器资源的工具nmon是最好不过了。      nmon不仅可以监控内存使用情况、磁盘适配器、文件系统中的可用空间、CPU使用率、页面空间和页面速度、异步I/O(仅适用于AIX)、网络文件系统(NFS)、磁盘I/O速度和读写比率、服务器详细信息和资源、内核统计信息、消耗资源进程、运行队列信息等。而且它资源…

    2022年5月12日
  • 遭遇mysql数据库表满错误

    遭遇mysql数据库表满错误

    2021年8月20日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号