gpt4 book ai didi

python - 交换原始文件的颜色 channel (BGGR -> RGGB)

转载 作者:太空宇宙 更新时间:2023-11-03 14:48:37 26 4
gpt4 key购买 nike

我知道有一个rawpy python库可以打开raw文件,但是为了修改像素数据,需要对raw中的原始数据进行去马赛克。谁能提供一种解决方案来交换编码为 BGGR 的 raw 文件的颜色 channel ?谢谢!

Edit1:我现在有一个 python(2.7) 脚本可以完成这项工作,但将其保存为 tiff 格式而不是 raw 格式。

import rawpy
import imageio

path = 'xxxx.raw'
raw = rawpy.imread(path)
rgb = raw.postprocess()
for x in rgb:
for y in x:
temp = y[0]
y[0] = y[2]
y[2] = temp
raw.raw_image
imageio.imsave('default.tiff', rgb)

基本上,问题是如何将图像存储回原始格式?从 tiff 到 raw 的转换是否有损?

此外,有什么方法可以不对原始文件进行去马赛克并交换字节(SBGGR8 到 SRGGB8)?这种方式似乎没有数据丢失的问题。

Edit2:这是我的原始元数据处理 MATLAB 代码,可以无损地交换 channel 。但MATLAB不是免费软件,我正在寻找python版本。由于我不是 python 文件处理专家,有人可以帮助我处理我的脚本吗?

row = 640;  col = 480;
fin = fopen('original.raw','r');
input = fread(fin,row*col,'uint8=>uint8');
output = reshape(input,row,col);
for y = 1:2:639
for x = 1:2:479
temp = output(y,x);
output(y,x) = output(y+1, x+1);
output(y+1, x+1) = temp;
end
end
fout = fopen('swapped.raw', 'w');
fwrite(fout,output);
fclose(fin);
fclose(fout);

最佳答案

这是使用 Python 2.7 交换 B 和 R channel 的无损方式。

#!/usr/bin/python2.7
import numpy as np
row = 480
col = 640
fin = open('example.raw','r')
inp = np.fromfile(fin,np.dtype(np.uint8),row*col)
output = np.reshape(inp,(row,col))

def my_range(start, end, step):
while start <= end:
yield start
start += step

for y in my_range(0, row-2, 2):
for x in my_range(0, col-2, 2):
temp = output[y][x]
output[y][x] = output[y+1][x+1]
output[y+1][x+1] = temp

fout = open('output.raw','w')
fout.writelines(output)
fin.close()
fout.close()

关于python - 交换原始文件的颜色 channel (BGGR -> RGGB),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46063000/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com