TI DSP C6657導(dǎo)入圖像數(shù)據(jù)進行圖像處理

在嵌入式平臺DSP上進行圖像處理,首先要解決的問題是如何將PC端的圖像加載到DSP內(nèi)存中。如果熟悉數(shù)字圖像處理,我們一般用Matlab,Python,opencv 直接imread("lena.jpg")就可以了,一行代碼搞定。 可是到了DSP平臺,這樣簡單的imread()功能并沒有。


一、目的

1.將windows本地的圖像導(dǎo)入DSP的內(nèi)存中。

2.利用DSP6657的官方圖像處理庫——imagelib實現(xiàn)Sobel算子


二、工具

1.TI DSP6657 EVM官方評估版

2.CCS8.1

3.C++ 編譯器,這里采用Visual Studio2017

4.TI 6657 imagelib庫

DSP6657 EVM開發(fā)版

三、實驗內(nèi)容

step1:

準備一張圖像,我采用lean.jpg, 512*512,單通道灰度圖像。


lena_gray.jpg

step2:

打開C++ IDE,編寫C++代碼,將圖像數(shù)據(jù)保存到為DSP可以加載的.dat文件。
本人采用vs2017+opencv3.4.0。


vs2017.jpg
  • C++代碼:
#include <stdio.h>
#include <stdlib.h>
#include<iostream>
#include<opencv2\opencv.hpp>


using namespace std;
using namespace cv;

int main(void) {
    

    //------------將圖像文件生成.txt-------------------------
    string fileName = "F:\\lena\\lena_gray.jpg";
    Mat image = imread(fileName, 0);
    FILE* fp = fopen("F:\\lena\\lena_gray_512x512.dat", "wb");
    
    for (int i = 0; i < image.rows; i++) {
        for (int j = 0; j < image.cols; j++) {
            //寫入數(shù)據(jù)
            fprintf(fp, "%x\n", (int)image.at<uchar>(i, j));
        }
    }

    return 0;
}
  • python代碼
import cv2
import os
import argparse


def main():
    arg_parser = argparse.ArgumentParser()
    arg_parser.add_argument('image_path')
    arg_parser.add_argument('dsp_data_path')

    args = arg_parser.parse_args()
    image_path = args.image_path
    dsp_data_path = args.dsp_data_path

    assert os.path.isfile(image_path)

    dsp_file = open(dsp_data_path, 'w')

    image = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)
    # assert image is None
    print('-'*20)
    print('image name: {}\n image size: {} x {} \n'.format(image_path, image.shape[1], image.shape[0]))
    print('dsp format data defualt start addr: 0x80000000, you should change it later!')

    ans = input('Continue ? (Y/N)')
    if ans in ['yes', 'y', ' Y', 'YES', 'Yes']:
        # DSP DATAHEADER
        dsp_file.write('{} {} 0x{} {} {} {}\n'.format(1651, 9, 80000000, 0, hex(image.shape[0] * image.shape[1]), 10))
        for i in range(image.shape[0]):
            for j in range(image.shape[1]):
                pixel = image[i, j]
                dsp_file.write('{}\n'.format(hex(pixel)))

        dsp_file.close()
        print('Create dsp format data finish!')

    elif ans in ['no', 'N', ' n', 'NO', 'No']:
        pass
    else:
        print('You pressed error key!')


if __name__ == '__main__':
    main()

將圖像用opencv讀取,C++生成的.dat文件


.dat文件.png

在生成的.dat文件第一行添加如下內(nèi)容:


.dat文件.png
.dat文件.png

Step3:

打開CCS8.1,配置環(huán)境。

ccs8.1.png

ccs.png

新建一個CCS工程

image.png

工程設(shè)置(如果要使用DDR3,需要加載gel文件)
.gel文件用于初始化DSP的參數(shù),比如PLL鎖相環(huán),DDR3初始化。

image.png

配置imagelib庫

imagelib庫.png

其實與vs2017配置opencv相似,需要將imagelib庫的.h,.lib(實際是.ae66)靜態(tài)庫加載到工程的搜索路徑。

將.h文件加載到complier搜索路徑。(點擊工程,右鍵屬性)


image.png

將.lib/.ae66加載到linker鏈接器的路徑。


image.png

若路徑正確,工程將出現(xiàn)以下內(nèi)容:


image.png

Step4:編寫DSP端的代碼

#include<stdio.h>
/*
 * DSP導(dǎo)入圖像數(shù)據(jù)
 * 參考:https://blog.csdn.net/liu1guo2qiang3/article/details/43311965
 * https://blog.csdn.net/luokh327/article/details/49617041
 * Date:2018-8-22
 * Author:Weipenghui
 */



#include<stdlib.h>
#include<imglib.h>
//#include"image_array.h"

typedef unsigned char uint8;
const int WIDTH = 512;
const int HEIGHT = 512;

int main(void)
{

    //-------------------------------方式1--------------------------------------------------------
   /*將圖像用matlab/python/C++/Java等生成.dat文件,連接上DSP核之后,在Memory Brower中l(wèi)oad Memory即可
    * 特點:導(dǎo)入數(shù)據(jù)速度快,但是相對繁瑣
    * */
    uint8* srcImg1 = (uint8*)0x80000000;  //DDR3地址,原始圖像
    uint8* dstImg = (uint8*)0x80050000;   //DDR3地址,處理后的結(jié)果

    //DSP ImageLib  sobel算子
    IMG_sobel_3x3_8(srcImg1,dstImg,512,512);
}


Step5:編譯運行,觀察結(jié)果

連接上仿真器


image.png

將之前生成的.dat文件導(dǎo)入內(nèi)存


image.png

image.png

image.png

數(shù)據(jù)導(dǎo)入成功


image.png

觀察導(dǎo)入的數(shù)據(jù)的圖像,右鍵屬性


image.png

設(shè)置參數(shù)


image.png

然后返回Image,右鍵refresh


image.png

激動人心的時刻
運行程序...觀察Sobel算子的結(jié)果

更改地址,設(shè)置為dstImg的地址


image.png

刷新顯示
鐺鐺鐺...

image.png

以上就是TI DSP C6657加載圖像,配置imglib庫,圖像處理的完整過程。在后續(xù),我講探索其他方式加載圖像,喜歡的小伙伴請支持哦。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容