我正在使用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;
答案 0 :(得分:1)
如果输入数据如下所示,则需要删除行号和原始数据。显然,您正在从调试器或hexit软件中读取它。
您可以在MATLAB中执行此操作。使用导入数据gui打开数据并选择重要的向量:
你还必须摆脱第一行。
现在,如果您的数据有以下形式:
在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
函数。