【FPGA】如何将10进制数据保存为2进制数据(IMG2LCD的使用,pic2bin)

  • 一、背景

   fpga处理大数据时从txt读取数据形式为2进制或者16进制,&readmemb/&readmemh,所以需要将数据转换为二进制或十六进制存在txt中。

  • 二、针对图像而言可以参考exe>IMG2LCD
  1. 下载https://zhidao.baidu.com/share/93844ee7ba773f4749c05818618f3231.html
  2. 使用,一般简单操作与理解可以参考界面上的帮助文档,最后的颜色反转一定要选,该软件默认白的像素值为零,黑的像素值为~~256~~ 255!!!这与在图像处理中恰好是相反的!!!

 

补充:保存完之后为.c文件

首先把括号与数组名去掉包括最后的分号也去除;

 

crtl +f 把0X 与逗号替换为空格,最后保存为.txt

保存为.txt,FPGA $readmem("filename",memory);调用即可。

  • 三、利用vs+opencv写的程序;opencv只是为了做图像读取与遍历方便,如果只是一个数直接赋值给tempt就OK了
  1. int main(int argc, char **argv)

    {

        ofstream out("bin.txt",ios::out);

        Mat srcImg = imread(picname,0);    //打开图像

        resize(srcImg,srcImg,Size(640,480));

        if (srcImg.empty())                                                                                                                                                                       {

            cerr << "failed to open the file : " << picname << endl;
            return -1;
        }

        vector <int> tempt;
        int temp;
        for (int i = 0; i < srcImg.rows; i++)
            for (int j = 0; j < srcImg.cols; j++)
            {
                temp = srcImg.at<uchar>(i, j);
                //cout << temp << endl;
                out  << endl;
                for (int m = 0; m < 8;m++)            {
                    if (temp % 2  ==1) tempt.push_back(1);
                    else  tempt.push_back(0);

                    temp  = temp /2;
                }
                int k =  7;
                int b =  7;
                while (b>=0)
                {
                    cout << tempt[k--];
                    out << tempt[b--];
                }
                cout << endl;
                out <<" ";
                tempt.clear();
            }
        out.close();
        return 0;
    }

  • 总结

有时候费劲心思找一些程序直接运行  还不如自己动动脑子来的快~~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章