rawファイルの上位24行を削除しようとしているので、元のrawファイル(raw1.rawと呼びましょう)を開いてnparrayに変換し、新しい配列を初期化して上位24行を削除しましたが、新しい配列を新しいバイナリ ファイル (raw2.raw) に追加すると、元のファイル raw1.raw が 30.6mb のようであるのに対し、raw2 は 15.2mb のみであることがわかりました。私のコードは次のとおりです。
import numpy as np
import imageio
import rawpy
import cv2
def ave():
fd = open('raw1.raw', 'rb')
rows = 3000 #around 3000, not the real rows
cols = 5100 #around 5100, not the real cols
f = np.fromfile(fd, dtype=np.uint8,count=rows*cols)
I_array = f.reshape((rows, cols)) #notice row, column format
#print(I_array)
fd.close()
im = np.zeros((rows - 24 , cols))
for i in range (len(I_array) - 24):
for j in range(len(I_array[i])):
im[i][j] = I_array[i + 24][j]
#print(im)
newFile = open("raw2.raw", "wb")
im.astype('uint8').tofile(newFile)
newFile.close()
if __name__ == "__main__":
ave()
バイナリファイルへの書き込みに im.astype('uint16') を使用しようとしましたが、uint16 を使用すると値が正しくありません。