DSP

DSP C6000导入指定图像数据(一)

2019-07-13 09:59发布

本文章分为两小篇,该篇主要分享如何利用Matlab生成我们所需要的YUV422格式数据 下一篇为利用数据导入DSP并进行查看。 下面为Matlab程序: clear all; close all; clc; img=imread('1280_720.jpg'); %img=mat2gray(img); %任意区间映射到[0,1]; [m n dim]=size(img); %figure,imshow(img),title('原始图像'); %%图像的RGB img=double(img); R=img(:,:,1); G=img(:,:,2); B=img(:,:,3); %%RGB2YCbCr Y=zeros(m,n); %亮度 Cb=zeros(m,n); %彩度 Cr=zeros(m,n); %浓度 matrix=[0.299 0.587 0.114; -0.1687 -0.3313 0.5; 0.5 -0.4187 -0.0813]; for i=1:m for j=1:n tmp=matrix*[R(i,j) G(i,j) B(i,j)]'; Y(i,j)=uint8(tmp(1)); Cb(i,j)=uint8(tmp(2)+128); Cr(i,j)=uint8(tmp(3)+128); end end %%YCbCr2RGB matrix=inv(matrix); for i=1:m for j=1:n tmp=matrix*[Y(i,j) Cb(i,j)-128 Cr(i,j)-128]'; R(i,j)=tmp(1); G(i,j)=tmp(2); B(i,j)=tmp(3); end end %%如果正反变换都没错的话,那么图像是不变的 img(:,:,1)=R; img(:,:,2)=G; img(:,:,3)=B; %figure,imshow(uint8(img)),title('原始图像验证'); I1 = zeros(m,2*n); for i=1:m for j=1:n I1(i,2*j-1) = Y(i,j); end end for i=1:m for j=1:2:n I1(i,2*j) = Cb(i,j); end end for i=1:m for j=1:2:n I1(i,2+2*j) = Cr(i,j); end end %{%} % imview(I1,map); fid=fopen('.1280_720_new.dat','wt'); %打开一个文件写入数据 % fid=fopen('f:mp2.dat','w'); fprintf(fid,'1651 9 806BD000 0 %x c ',m*n*2); %N=0; for i=1:m for j=1:2*n %N=N+1; index = floor((j-1)/2); chang_col = - j + 3 + index*4; if I1(i,chang_col) < 16 fprintf(fid,'0x0%x ',I1(i,chang_col)); else fprintf(fid,'0x%x ',I1(i,chang_col)); end % if rem(N,1)==0; % fprintf(fid,' '); % end end end fclose(fid);

  上述matlab中修改参数: img=imread('1280_720.jpg'); 此为图片名称,与.m文件处同一路径 fid=fopen('.1280_720_new.dat','wt'); 生成文件名称 下面为生成的1280_720_new.dat起始部分截图:   第一行为DSP导入需要信息,我也是通过memory 导出数据得出。 806BD000 为导入起始地址 0为偏移 1c2000导入总数且为16进制, cc语言格式; 该处无需深究     上图中的indexchang_col是为了修改YUV格式顺序(DSP识别YUV格式顺序有关) 未修改前为 V0 Y1 U0 Y0 0x806BD003  0x806BD002  0x806BD001  0x806BD000  修改后 Y1 V0 Y0 U0 0x806BD003  0x806BD002  0x806BD001  0x806BD000