前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >将图像转换为8位通道_imagej像素和毫米转换

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

作者头像
全栈程序员站长
发布2022-09-30 20:29:30
7850
发布2022-09-30 20:29:30
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

一 背景

遥感图像一般像素深度比较高,基本的就是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图片

代码语言:javascript
复制
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.cn/192504.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年9月17日 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一 背景
  • 二 分析
  • 三 代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档