一 背景

遥感图像一般像素深度比较高,基本的就是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] = at[t>b] = bout[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).DataTypeim_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->bgrcv2.imwrite(path+'\\'+i, out)print(num)

图像处理:图片像素深度unit16位转unit8位相关推荐

  1. 图像深度、像素深度和位深度

    图像深度.像素深度和位深度 图像深度 像素深度 位深 区别 小结 图像深度 数字化图像的每个像素是用一组二进制数进行描述,像素的色彩由RGB通道决定,其中包含表示图像颜色的位数称为图像深度.如灰度图像 ...

  2. 图片像素、尺寸、位深度、图像色深

    1.概念解释 图像像素:图像的分辨力,也就是图像的宽和高分别有多少个像素. 图像尺度(图像的输出尺寸):图像的物理单位,比如宽和高是多少英寸或者厘米. 位深度:存储图片一个像素需要消耗多少个bit位. ...

  3. 修改开机LOGO图片教程及注意事项/通过C++实现bmp图位深度从32位转换为8位

    修改开机LOGO图片教程及注意事项/通过C++实现bmp图位深度从32位转换为8位 文章目录 修改开机LOGO图片教程及注意事项/通过C++实现bmp图位深度从32位转换为8位 修改开机LOGO图片教 ...

  4. Android如何把图片转为深度为32位格式为.bmp的图片

    前几天公司的产品要求做个手机拍的照片转深度为32位,格式为.bmp格式的图片,仔细研究了下,通过调系统相机根据照片存的路径以及FileInputStream获得照片的bitmap,拿到这个bitmap ...

  5. 实验二(1)——8bit像素深度bmp图片与24bit像素深度bmp图片互转2021-03-20

    一.实验要求 编写8bit像素深度bmp图片与24bit像素深度bmp图片互相转换的程序,将给定的8bitbmp图片和24bitbmp图片分别转换为24bitbmp图片和8bitbmp图片,其中24b ...

  6. Android PNG图片像素检测及剪裁优化

    PNG图片是当前移动终端最主流的图片格式之一,由于android中大部分图片颜色数比较小而且尺寸也不大,所以在各类app软件中PNG图片几乎是首选的图片格式.在手Q中PNG图片大概有四五千张.如此众多 ...

  7. 一文搞懂图片像素、图片大小、图片存储类型等概念和计算

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.计算机存储的底层知识 二.图片 1.图片像素 2.图片存储类型(图片深度) 总结 前言 学习计算机视觉两年多了,发 ...

  8. 【python】查看图像位深度,以及改变图像位深度的简单小结

    every blog every motto: Just live your life cause we don't live twice. 0. 前言 关于图像位深度,色深的小结 说明: 有不对的地 ...

  9. 【深度学习】入门深度学习,看三位顶级大牛Yann LeCun、Yoshua Bengio和Geoffrey Hinton的综述

    [编者按]深度学习领域的三位大牛Yann LeCun.Yoshua Bengio和Geoffrey Hinton无人不知无人不晓.此前,为纪念人工智能提出60周年,Yann LeCun.Yoshua ...

最新文章

  1. asp.net mysql 创建变_[ASP.net教程]EF Core使用CodeFirst在MySql中创建新数据库以及已有的Mysql数据库如何使用DB First生成域模型...
  2. git设置单个仓库用户名以及密码
  3. C#线程安全的那些事
  4. lora终端连接云服务器_终端连接服务器主机
  5. 1189C. Candies
  6. 【转载】单片机应用系统断电时的数据保护方法
  7. 信息学奥赛一本通 1102:与指定数字相同的数的个数 | OpenJudge NOI 1.6 01
  8. 创建ros的程序包--3
  9. 修改element ui的table的某一列的样式
  10. AXURE母版事件(Raised-events)
  11. 遗传算法原理与matlab,有关路径优化遗传算法原理(结合matlab代码)
  12. qt中使用日志系统,自定义日志彩色输出,qt日志写入文件,自定义qt日志格式,同时提供Qt日志重定向功能(将qDebug信息输出到界面控件)
  13. 请你帮我一起转到全中国
  14. wps连接mysql odbc_如何在WPS中使用ADO连接数据库?
  15. 功能连接分析方法及其解释缺陷的综述
  16. MAC系统免驱显卡汇总
  17. 飞步科技 x 焱融 YRCloudFile:大幅提升训练效率,开启智驾新纪元
  18. 搭建服务器 运用阿里云DNS自己实现DDNS
  19. vscode 一键生成vue代码
  20. 过年为什么要贴门神?

热门文章

  1. [C++] memset函数用法理解
  2. 2018计算机保研夏令营情况介绍(清华,人大,北航,中科院计算所,中科院软件所,南大)
  3. 计算机无法识别加密u盘,bitlocker不能加密u盘安全模式
  4. 计算机软件测试方法及应用实践论文,刍议计算机软件测试方法及应用实践原稿(全文完整版)...
  5. 最强白嫖指南:免费高质量PPT宝藏网站,你居然还不知道?!
  6. 匿名函数的表达式可以有多个吗python_匿字的意思、匿的繁体字、匿的笔顺笔画、匿字部首和繁体字匿的意思...
  7. android 免root冻结,应用冻结器免root下载-应用冻结器 安卓版v0.10-pc6手机下载
  8. [无线] 让Android支持cmwap上网
  9. unity死循环,无限内存增长的调试方法
  10. 冲出好咖啡前,关键是先了解萃取