从编码文件中读取十六进制位并将其显示为图像

时间:2015-11-29 10:40:27

标签: matlab matlab-figure

我正在使用JM参考软件进行视频编码和解码。我想要做的是编码视频,然后将其作为hex文件读入matlab。之后我想将每个帧显示为图像。

我知道每个帧都以“00 00 00 01”开头所以我所做的就是我找到了这个“00 00 00 01”字符串所在的所有索引,然后我从一个索引读到另一个索引转换它进入矩阵并将其显示为图像,但图像为空。

这是我的代码:

hexFileName = 'C:\Users\Safi\Desktop\Encoded.txt';
videoHexArray = importdata(hexFileName);
strFrameIndex = strfind(videoHexArray, '00 00 00 01');
%disp(videoHexArray);
videoHexString = char(videoHexArray);
OneFrame=videoHexString(76:6821);
disp(OneFrame);
imshow(str2num(OneFrame));
figure;

1 个答案:

答案 0 :(得分:1)

如果输入数据如下所示,则需要删除行号和原始数据。显然,您正在从调试器或hexit软件中读取它。

enter image description here

您可以在MATLAB中执行此操作。使用导入数据gui打开数据并选择重要的向量:

enter image description here

你还必须摆脱第一行。

现在,如果您的数据有以下形式:

enter image description here

txt文件中,您可以使用textread函数读取十六进制值,并按以下步骤操作:

 M=textread('test3.txt','%2c');
A = zeros(847,16);
 kk = 1;
for ii = 1:847
    for jj = 1:16
        A(ii,jj) = hex2dec(M(kk:kk+1));
        kk = kk + 1;
    end
end

imshow(A)

由于输出十进制数据已在[0,255]范围内,因此无需标准化。但是,您现在需要如何构建数据。换句话说,框架的大小是多少。目前它是874x16,显然不是正确的帧大小。要转换为正确的帧大小,您可以在矩阵reshape上使用A函数。