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

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

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

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)
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(2)


相关推荐

  • redis scan命令_redis 查询命令

    redis scan命令_redis 查询命令我们可能会遇到需要运行的某些命令在godis中不存在的情况,这个时候我们可以使用其原生的方式运行命令,为了方便使用,封装了一个方法,用于简化这个过程。需要注意的是,执行命令的返回结果返回的是interface{},需要对其进行解析成可读的实体结构。传递的参数logger是用来打印日志的://RunRedisCmd运行redis命令funcRunRedisCmd(redis*godis.Redis,logger*log.Logger,cmdstring,args…string)

  • JS中promise是什么?

    JS中promise是什么?Promise是异步编程的一中解决方案,最早是由社区提出的,es6中正式的将其纳入,他是一个对象,可以获取到异步的操作,他相比传统的回调函数,更加的强大和合理,避免了回调地狱。所谓的Promise,简单的来说就是一个可以存放未来才能结束的任务或者事件。1.Promise实列有三个状态:-pending(进行中)-resolved(成功)-rejected(失败)当要处理某个任务的时候,promise的状态是pending,任务完成是状态就变成了resolved,任务失败状

  • c++入门教程–-21C++类访问修饰符

    c++入门教程–-21C++类访问修饰符

  • 卸载的软件怎么恢复_mac怎么强制卸载软件

    卸载的软件怎么恢复_mac怎么强制卸载软件http://hi.hiing.net/2011/06/use-homebrew-package-management.htmlMacPorts和Homebrew都是MacOSX上的软件包管理工具(via Wikipedia),且它们之间是不兼容的.个中好处就不介绍了,这里要说的是删除MacPorts并安装Homebrew.准备条件:Mac是自带Ruby程式的,如

  • 泰克|安捷伦|普源|PICO示波器程控软件二次开发NS-Scope

    泰克|安捷伦|普源|PICO示波器程控软件二次开发NS-Scope*主要功能:硬件连接;参数配置;运行参数;数据查询。*程控对象:示波器。*程控接口:兼容市面上所有具有GPIB、USB、RS232、LAN、RS485、TTL任意一种程控接口的示波器。*仪器兼容性:泰克Tektronix、是德科技Keysight、普源Rigol、力科、罗德与施瓦茨R&S等品牌示波器。1.软件概述>>为了解决示波器测试操作流程繁琐、参数配置复杂等问题,Namisoft开发的NS-Scope示波器自动化测试程控软件,通过对示波器的程序控制,…

    2022年10月12日
  • sqlserver数据库置疑_sqlserver2008数据库可疑

    sqlserver数据库置疑_sqlserver2008数据库可疑一、数据库异常我们平时在使用SQLServer时,可能会遇到以下情况:1、数据库变为置疑状态2、使用数据库文件恢复数据库时,附加的数据库显示为置疑状态3、无法附加数据库数据库置疑的原因:SQLServer所在分区空间是否够?数据库文件大小是否达到最大文件限制?FAT的格式只支持四G以内的文件  2、数据库文件损坏或被非正常删除时出现这种情况  3、病毒防火墙的扫…

发表回复

您的电子邮箱地址不会被公开。

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