zoukankan      html  css  js  c++  java
  • Modelsim图像处理算法的仿真——图像数据操作

    使用Modelsim进行图像处理算法的仿真时,需要使用到图像的像素信息序列,这里提供一个程序可以把图片中的像素信息读取出来,依赖于OpenCV库运行,这里仅仅是灰度图像而已,读者可以根据自己的需求增加其它颜色通道。
     

     1 #include "opencv2/core/core.hpp"
     2 #include "opencv2/opencv.hpp"
     3 #include <iostream>
     4 using namespace std;
     5 using namespace cv;
     6 int main(int argc, char *argv[])
     7 {
     8     // create by using the constructor
     9  Mat image = imread(argv[1],CV_LOAD_IMAGE_GRAYSCALE);
    10  if(!image.data)
    11  {
    12   printf("Error loading %s",argv[1]);
    13   return -1;
    14  }
    15  //cvNamedWindow("show",CV_WINDOW_AUTOSIZE);
    16  //imshow("show",image);
    17  //waitKey(0);
    18  FILE *pfile=fopen("imgdata.txt","wb");
    19  if(pfile==NULL)
    20  {
    21   printf("Error opening imgdata.txt");
    22   return -1;
    23  }
    24  uchar *p;
    25     for (int i = 0; i < image.rows; i++)
    26     {
    27         p = image.ptr < uchar > (i);
    28         for (int j = 0; j < image.cols; j++)
    29         {
    30             fprintf(pfile,"@%x\n",i*image.cols+j);
    31    fprintf(pfile,"%x\n", p[j]);
    32         }
    33     }
    34  fclose(pfile);
    35 
    36  return 0;
    37 }

     
    命令行参数:
    extract_data_from_picture.exe src.bmp
     
    读取的文件格式如下:
    @0
    ff
    @1
    ff
    @2
    ff
    @3
    ff
    @4
    ff
    @5
    ff
    。。。
     
    符合Verilog的读取。读取图像并保存图像数据的Verilog程序如下:
    `timescale 1 ps / 1 ps
    module read_picture;
     
      reg [7:0] DataSource[0:320*240-1];
      integer save_picture;
      integer i;
     
    initial
    begin
      $readmemh("imgdata.txt",DataSource);//读取图像
     
      save_picture=$fopen("savedata.txt");
      for(i=0;i<320*240;i=i+1)
      begin
      $fdisplay(save_picture,"%h",DataSource[i]);
    end
      $fclose(save_picture);
    end
      
    endmodule
     
    用处理后的图像数据保存在savedata.txt文件中,数据格式如下:
    da
    e9
    f2
    f9
    fd
    fe
    fe
    ff
    fe
    f6
    fb
    a5
    19
    1b
    。。。
     
    为了更直观显示算法的处理效果,我们要把这些数据转换成图像。
    用以下代码实现:

     1 #include "opencv2/core/core.hpp"
     2 #include "opencv2/opencv.hpp"
     3 #include <iostream>
     4 using namespace std;
     5 using namespace cv;
     6 void help()
     7 {
     8     printf("use:\ntest.exe rows cols datafile output_image\n");
     9 }
    10 int main(int argc, char *argv[])
    11 {
    12     // create by using the constructor
    13     if (argc != 5)
    14     {
    15         help();
    16         return  - 1;
    17     }
    18     int rows = atoi(argv[1]);
    19     int cols = atoi(argv[2]);
    20     Mat image(rows, cols, CV_8U);
    21     if (!image.data)
    22     {
    23         printf("Error loading");
    24         return  - 1;
    25     }
    26     //cvNamedWindow("show",CV_WINDOW_AUTOSIZE);
    27     //imshow("show",image);
    28     //waitKey(0);
    29     FILE *pfile = fopen(argv[3], "rb");
    30     if (pfile == NULL)
    31     {
    32         printf("Error opening %s", argv[3]);
    33         return  - 1;
    34     }
    35     uchar *p;
    36     for (int i = 0; i < image.rows; i++)
    37     {
    38         p = image.ptr < uchar > (i);
    39         for (int j = 0; j < image.cols; j++)
    40         {
    41             fscanf(pfile, "%x\n", &p[j]);
    42         }
    43     }
    44     fclose(pfile);
    45 
    46     imwrite(argv[4], image);
    47     //cvNamedWindow("show",CV_WINDOW_AUTOSIZE);
    48     //imshow("show",image);
    49     //waitKey(0);
    50     return 0;
    51 }

     
    命令行参数:
    save_picture.exe 400 212 savedata.txt output.bmp

    output.bmp就是我们处理过后的图像了

  • 相关阅读:
    环境是如何建立的 启动文件有什么
    环境中存储的是什么
    串行 并行 异步 同步
    TPC-H is a Decision Support Benchmark
    进程通信类型 管道是Linux支持的最初Unix IPC形式之一 命名管道 匿名管道
    删除环境变量
    14.3.2.2 autocommit, Commit, and Rollback 自动提交 提交和回滚
    14.3.2.2 autocommit, Commit, and Rollback 自动提交 提交和回滚
    14.3.2.1 Transaction Isolation Levels 事务隔离级别
    14.3.2.1 Transaction Isolation Levels 事务隔离级别
  • 原文地址:https://www.cnblogs.com/xiangtailiang/p/2427075.html
Copyright © 2011-2022 走看看