Как открыть бинарное изображение, Python
Есть бинарный файл прямиком с матрицы. Попытки открыть его через Pillow, NumPy и еще парочки безымянных библиотек не удались. Получаются шумы в чистом виде. То есть как я понимаю, изображение считывается не в том порядке.
with open('D:\\dev\\6141\\frame_3.bin') as file:
im_data = np.fromfile(file, dtype = 'B')
image = Image.frombytes('RGB', (1920, 1080), im_data)
image.show()
знаю, что с файлом все в порядке, так как есть скрипт MatLab, который умеет его открывать.
clear all
line_length = fix(1920*10/8/4);
line_stride = line_length + fix(1920*3/4);
fid=fopen('frame_5_znak.bin','r');
% % отображение 32-битного числа
native_f=fread(fid,line_stride*1081,'ubit32');
fclose(fid);
ff=zeros(line_length*1080,1);
for i=1:1:1080
for j=1:1:line_length
ff(j+(i-1)*line_length)=native_f(line_stride + j + (i-1)*line_stride);
end
end
B=zeros(line_length*1080,1);
j=1;
n=1;
while j<=size(ff,1)-4
B(n)=bitand(bitshift(ff(j,1),-22),1023);
B(n+1)=bitand(bitshift(ff(j,1),-12),1023);
B(n+2)=bitand(bitshift(ff(j,1),-2),1023);
B(n+3)=bitand(bitor(bitshift(bitand(ff(j,1),1023),8,'uint32'),bitshift(ff(j+1,1),-24)),1023);
B(n+4)=bitand(bitshift(ff(j+1,1),-14),1023);
B(n+5)=bitand(bitshift(ff(j+1,1),-4),1023);
B(n+6)=bitand(bitor(bitshift(bitand(ff(j+1,1),1023),6,'uint32'),bitshift(ff(j+2,1),-26)),1023);
B(n+7)=bitand(bitshift(ff(j+2,1),-16),1023);
B(n+8)=bitand(bitshift(ff(j+2,1),-6),1023);
B(n+9)=bitand(bitor(bitshift(bitand(ff(j+2,1),1023),4,'uint32'),bitshift(ff(j+3,1),-28)),1023);
B(n+10)=bitand(bitshift(ff(j+3,1),-18),1023);
B(n+11)=bitand(bitshift(ff(j+3,1),-8),1023);
B(n+12)=bitand(bitor(bitshift(bitand(ff(j+3,1),1023),2,'uint32'),bitshift(ff(j+4,1),-30)),1023);
B(n+13)=bitand(bitshift(ff(j+4,1),-20),1023);
B(n+14)=bitand(bitshift(ff(j+4,1),-10),1023);
B(n+15)=bitand(ff(j+4,1),1023);
j=j+5;
n=n+16;
end
% for i = 1:size(B,1)
% B(i)= bitshift(bitand(B(i),63),4,'uint16');
%
% end
BB=zeros(1080,1920);
for j=1:1:1080
for i=1:1:1920
BB(j,i)=B(i+(j-1)*1920);
end
end
i_min = min(min(BB));
i_max = max(max(BB));
II=(BB-i_min)/(i_max-i_min);
I=im2uint8(II);
figure; imshow(BB)
J = demosaic(I,'grbg');
%
% figure, imshow(J);

