Python raw格式图像转png格式
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格式相关推荐
- python输出jpg_利用python实现.dcm格式图像转为.jpg格式
如下所示: import pydicom import matplotlib.pyplot as plt import scipy.misc import pandas as pd import nu ...
- python bmp转jpg_利用python实现.dcm格式图像转为.jpg格式
如下所示: import pydicom import matplotlib.pyplot as plt import scipy.misc import pandas as pd import nu ...
- python图片保存jpg、show变成bmp_利用python实现.dcm格式图像转为.jpg格式
如下所示: import pydicom import matplotlib.pyplot as plt import scipy.misc import pandas as pd import nu ...
- 用python将.dcm格式图像转为.jpg格式
用python将.dcm格式图像转为.jpg格式 import pydicom import matplotlib.pyplot as plt import scipy.misc import pan ...
- 使用C++实现YUV格式图像与RGB格式图像之间相互转换
使用C++实现YUV格式图像与RGB格式图像之间相互转换 一.RGB与YUV转换公式 1.RGB转YUV 1)RGB转换亮度与色差信号公试: 2)归一化为YUV的转化公试为: 2.YUV转RGB 二. ...
- RAW格式图像转为BMP格式
首先先介绍C++中图像数据分配内存方法. 在计算机中图像是一个二维的数字点阵. 比较容易想到的是申请一个二维矩阵来存储图像 如: BYTE image[512][512]; 可以存储一幅512*512 ...
- FFmpeg开发实战(五):bmp转换为jpeg格式图像
文章目录 1. bmp结构 2. bgr24转yuv420p 3. yuv420转jpeg 4. 下载 本文介绍了将bmp格式图像转换为jpeg格式图像的方法,附有详细的代码和图像示例. 1. bmp ...
- Tiled软件怎么将png格式转换成csprite格式文件
Tiled 软件可以将 png 格式图像转换为 csprite 格式文件.下面是具体的步骤: 打开 Tiled 软件,并点击「文件」菜单中的「导入」选项. 在弹出的对话框中,选择要转换的 png 格式 ...
- RAW图像详解及使用Python读取raw格式图像并显示
一.RAW图像详解 1.1 什么是raw格式图像? RAW在英文中的解释是未处理的.自然状态的,这也就是RAW文件的真谛.RAW图像就是CMOS或者CCD图像感应器将捕捉到 的光源信号转化为数字信号的 ...
最新文章
- [单刷APUE系列]第八章——进程控制[1]
- Oracle 创建数据表以及对数据表、字段、主外键、约束的操作
- Codeblocks更改编译器为VC++6.0
- extent static const
- Linux字符驱动程序的基本结构与函数
- Openfire使用上的一些技巧
- 开机自启动脚本_使用xtu降低笔记本(游戏本)cpu电压及功耗·游戏本延时(以及试着解决开机自启动的问题)...
- 用promise封装ajax_ES6-promise封装AJAX请求
- .net导出为powerpoint的一些参考代码
- 促促促,如何确保系统扛得住 | 《尽在双11》抢鲜预览
- 《Python学习手册》——使用入门
- python直方图规定化_OpenCV python 彩色图像的直方图规定化
- 解决leetcode题目乱码问题
- 苹果CMS 改造四合一聚合影视+聚合直播+在线小说+短视频+在线音乐+电视直播
- 小程序分类图标提取_微信全国垃圾分类小程序上线,一键搜索轻松分类垃圾
- sql 脚本 昨天的日期获取,今天的前一天的数据获取, 前两个月的今天
- openlayer4加载arcgis rest服务(遥感影像切片)
- 读书笔记:“Python Programming: An Introduction to Computer Science”
- boto3使用教程用法
- macOS Big Sur 11.7.5 (20G1225) 正式版 ISO、PKG、DMG、IPSW 下载
热门文章
- 老年祝福火爆短视频微信小程序源码下载支持流量主
- iphone自定义闹钟铃声
- Visual Studio 2017 Enterprise 发布 15.3.3 版,附离线安装包百度网盘下载。
- 视频伪原创批量处理工具 md5视频 修改器
- 近年央行历次利率及准备金率调整对股市影响一览
- 神经网络训练时如何选取batch size的大小
- pyinstaller库属于python语言的标准库_Day6----Python的pyinstall库的使用
- 虹科方案 | 视频和广播专业人士的存储和存档解决方案
- Oracle数据库---JDBC连接
- Vue源码系列4:模拟实现vue3.x中的计算属性