CCS内存数据转成图片

  在嵌入式DSP图像处理开发过程中,经常需要将DSP内存中的图像数据保存下来,作为数据集。CCS5.4或者CCS3.3都只支持保存内存原始数据而不支持将内存数据直接存储为一张图片,为了能将CCS保存的.dat内存格式数据转化成能用看图软件直接打开的图像文件,本文提供一段基于OpenCV的转换程序,只需简单修改数据集的路径及图片名即可输出.jpg格式图片文件。 ccs内存保存数据格式要求:设置为32位十六进制C语言类型,选择图像的起始地址与图像所占的字节 VS下的转换程序如下:

#include "opencv2/opencv.hpp"
#include <iostream>
#include <fstream>

#define NOTEWIDTH     864//定义图像的宽度
#define NOTEHEIGHT    2000//定义图像的高度
using namespace cv;
using namespace std;

Mat image(NOTEHEIGHT,NOTEWIDTH,CV_8UC1);
void main()
{
    char fileName[100];
    char saveFileName[100];

    int i = 0;
    uint data = 0;

    for(int index=1;index<=36;index++)
    {
         printf("process %d:
",index);
         //原始图像路径及文件名
         sprintf(fileName,"F:\CCS\EURO_20161101\%02d.dat",index);
         ifstream infile(fileName);
         string temp;
         int j = 0,k = 0;
         i=0;
         while(getline(infile,temp))
         {
             if(i>=1)
             {
                 sscanf(temp.c_str(),"%x",&data);//以十六进制方式读取一行
                 //将读取的十六进制数通过指针操作放入图像矩阵中
                 image.at<uchar>(j,k) = *((uchar*)&data);
                 image.at<uchar>(j,k+1) = *((uchar*)&data+1);
                 image.at<uchar>(j,k+2) = *((uchar*)&data+2);
                 image.at<uchar>(j,k+3) = *((uchar*)&data+3);

                 k+=4;
                 if(k>=NOTEWIDTH)
                 {
                      k = 0;
                      j++;
                      if(j>=NOTEHEIGHT)
                          j = NOTEHEIGHT-1;
                 }
             }
             i++;
         }
         imshow("Image",image);
         infile.close();
         sprintf(saveFileName,"%02d.jpg",index);
         imwrite(saveFileName,image);
    }
    waitKey();
}

   这样在工程目录下可以得到转换后的.jpg格式图像,当然如果要保存其他格式文件,如.bmp,只需修改imwrite传入参数的文件名,将其改成 

sprintf(saveFileName,"%02d.bmp",index);

  

原文地址:https://www.cnblogs.com/xion/p/6076608.html