Как открыть бинарное изображение, 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);

введите сюда описание изображения


Ответы (0 шт):