raw数据的读取有rawpy,numpy和逐元素读取等方法,一般在raw数据上进行深度学习神经网络的研究需要先将raw转换成数组方式才能输入到模型中进行训练。先介绍两种读取raw数据为数组并将之转为png图片的方法:

1、使用rawpy来读取raw数据

注意raw数据有很多种不同后缀名,如:.raw、.dng、.arw等。raw数据直接来源于sensor,不同公司的sensor是不一样的,他们的数据后缀名也就不一样了。下面以.dng为例,其他也一样的:

import numpy as np
import imageio
import rawpy
import sys
import os
import cv2def extract_bayer_channels(raw):ch_B  = raw[1::2, 1::2]ch_Gb = raw[0::2, 1::2]ch_R  = raw[0::2, 0::2]ch_Gr = raw[1::2, 0::2]return ch_R, ch_Gr, ch_B, ch_Gbif __name__ == "__main__":raw_file = "raw.dng"print("Converting file " + raw_file)if not os.path.isfile(raw_file):print("The file doesn't exist!")sys.exit()raw = rawpy.imread(raw_file)raw_image = raw.raw_imagedel raw"""# extract_bayer_channels将raw数据按4通道提取,至于为何是4通道这里就不介绍了raw_image = raw_image.astype(np.float32)print(np.max(raw_image))ch_R, ch_Gr, ch_B, ch_Gb = extract_bayer_channels(raw_image)# 拼合四通道一起out = np.stack((R, Gr, Gb, B))"""# raw数据一般是16位,有效位可能为16,14,12,10等。常见位12位png_image = raw_image.astype(np.uint16)new_name = raw_file.replace(".dng", ".png")imageio.imwrite(new_name, png_image)

numpy读取raw数据的方式是:numpy.fromfile('a.raw')

2、以二进制读raw数据然后逐元素取值

一般raw数据是12位有效的,不管是rawpy,还是numpy。它们读取raw数据都是将16位全部读进来,默认低四位位无效位且全部为0,可是这样会增大像素值的范围。有效位12位的话,那么像素值范围应该是0~4095,而不丢弃无效的4个0的话,像素值的范围就会变成0-65535了。以二进制读取则可以避免:

# -*- coding:utf8 -*-import numpy as np
import cv2
import os
import imageiodef oneimg2png(root_dir, out_path):filelist = os.listdir(root_dir)# filelist.sort(key=lambda x: int(x.split('_')[5]))for file in filelist:# shape为raw数据的分辨率乘积bayer = np.zeros(shape=2073600, dtype='uint16')file_path = os.path.join(root_dir, file)with open(file_path, "rb") as f:for i in range(0, len(f.read()), 2):f.seek(i)raw = f.read(2)a1 = int((raw[0] / 16) % 16)a2 = int(raw[0] % 16)a3 = int((raw[1] / 16) % 16)a4 = int(raw[1] % 16)# 两个字节对应一个像素点,我的数据有效位为12位,高低位顺序为a3 a4 a1 a2,# a2位低四位且是无效位全为0,所以抛掉不用value = a3 * 256 + a4 * 16 + a1 * 1# bayer[int(i / 2)] = value / 4096 * 1024bayer[int(i / 2)] = valuebayer = bayer.reshape(1080, 1920)print("bayer max:{} bayer min:{}".format(np.max(bayer), np.min(bayer)))new_name = file_path.replace(".raw", ".png")new_name = os.path.basename(new_name)imageio.imwrite(out_path + '/' + new_name, bayer)f.close()print("raw finished")if __name__ == '__main__':_ = oneimg2png(root_dir='放有raw数据的文件夹路径', out_path='输出png图片的文件夹路径')

Python raw格式图像转png格式相关推荐

  1. python输出jpg_利用python实现.dcm格式图像转为.jpg格式

    如下所示: import pydicom import matplotlib.pyplot as plt import scipy.misc import pandas as pd import nu ...

  2. python bmp转jpg_利用python实现.dcm格式图像转为.jpg格式

    如下所示: import pydicom import matplotlib.pyplot as plt import scipy.misc import pandas as pd import nu ...

  3. python图片保存jpg、show变成bmp_利用python实现.dcm格式图像转为.jpg格式

    如下所示: import pydicom import matplotlib.pyplot as plt import scipy.misc import pandas as pd import nu ...

  4. 用python将.dcm格式图像转为.jpg格式

    用python将.dcm格式图像转为.jpg格式 import pydicom import matplotlib.pyplot as plt import scipy.misc import pan ...

  5. 使用C++实现YUV格式图像与RGB格式图像之间相互转换

    使用C++实现YUV格式图像与RGB格式图像之间相互转换 一.RGB与YUV转换公式 1.RGB转YUV 1)RGB转换亮度与色差信号公试: 2)归一化为YUV的转化公试为: 2.YUV转RGB 二. ...

  6. RAW格式图像转为BMP格式

    首先先介绍C++中图像数据分配内存方法. 在计算机中图像是一个二维的数字点阵. 比较容易想到的是申请一个二维矩阵来存储图像 如: BYTE image[512][512]; 可以存储一幅512*512 ...

  7. FFmpeg开发实战(五):bmp转换为jpeg格式图像

    文章目录 1. bmp结构 2. bgr24转yuv420p 3. yuv420转jpeg 4. 下载 本文介绍了将bmp格式图像转换为jpeg格式图像的方法,附有详细的代码和图像示例. 1. bmp ...

  8. Tiled软件怎么将png格式转换成csprite格式文件

    Tiled 软件可以将 png 格式图像转换为 csprite 格式文件.下面是具体的步骤: 打开 Tiled 软件,并点击「文件」菜单中的「导入」选项. 在弹出的对话框中,选择要转换的 png 格式 ...

  9. RAW图像详解及使用Python读取raw格式图像并显示

    一.RAW图像详解 1.1 什么是raw格式图像? RAW在英文中的解释是未处理的.自然状态的,这也就是RAW文件的真谛.RAW图像就是CMOS或者CCD图像感应器将捕捉到 的光源信号转化为数字信号的 ...

最新文章

  1. [单刷APUE系列]第八章——进程控制[1]
  2. Oracle 创建数据表以及对数据表、字段、主外键、约束的操作
  3. Codeblocks更改编译器为VC++6.0
  4. extent static const
  5. Linux字符驱动程序的基本结构与函数
  6. Openfire使用上的一些技巧
  7. 开机自启动脚本_使用xtu降低笔记本(游戏本)cpu电压及功耗·游戏本延时(以及试着解决开机自启动的问题)...
  8. 用promise封装ajax_ES6-promise封装AJAX请求
  9. .net导出为powerpoint的一些参考代码
  10. 促促促,如何确保系统扛得住 | 《尽在双11》抢鲜预览
  11. 《Python学习手册》——使用入门
  12. python直方图规定化_OpenCV python 彩色图像的直方图规定化
  13. 解决leetcode题目乱码问题
  14. 苹果CMS 改造四合一聚合影视+聚合直播+在线小说+短视频+在线音乐+电视直播
  15. 小程序分类图标提取_微信全国垃圾分类小程序上线,一键搜索轻松分类垃圾
  16. sql 脚本 昨天的日期获取,今天的前一天的数据获取, 前两个月的今天
  17. openlayer4加载arcgis rest服务(遥感影像切片)
  18. 读书笔记:“Python Programming: An Introduction to Computer Science”
  19. boto3使用教程用法
  20. macOS Big Sur 11.7.5 (20G1225) 正式版 ISO、PKG、DMG、IPSW 下载

热门文章

  1. 老年祝福火爆短视频微信小程序源码下载支持流量主
  2. iphone自定义闹钟铃声
  3. Visual Studio 2017 Enterprise 发布 15.3.3 版,附离线安装包百度网盘下载。
  4. 视频伪原创批量处理工具 md5视频 修改器
  5. 近年央行历次利率及准备金率调整对股市影响一览
  6. 神经网络训练时如何选取batch size的大小
  7. pyinstaller库属于python语言的标准库_Day6----Python的pyinstall库的使用
  8. 虹科方案 | 视频和广播专业人士的存储和存档解决方案
  9. Oracle数据库---JDBC连接
  10. Vue源码系列4:模拟实现vue3.x中的计算属性