TI DSP C6657导入图像数据进行图像处理

在嵌入式平台DSP上进行图像处理,首先要解决的问题是如何将PC端的图像加载到DSP内存中。如果熟悉数字图像处理,我们一般用Matlab,Python,opencv 直接imread("lena.jpg")就可以了,一行代码搞定。 可是到了DSP平台,这样简单的imread()功能并没有。


一、目的

1.将windows本地的图像导入DSP的内存中。

2.利用DSP6657的官方图像处理库——imagelib实现Sobel算子


二、工具

1.TI DSP6657 EVM官方评估版

2.CCS8.1

3.C++ 编译器,这里采用Visual Studio2017

4.TI 6657 imagelib库

DSP6657 EVM开发版

三、实验内容

step1:

准备一张图像,我采用lean.jpg, 512*512,单通道灰度图像。


lena_gray.jpg

step2:

打开C++ IDE,编写C++代码,将图像数据保存到为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++) {
            //写入数据
            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文件第一行添加如下内容:


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

Step3:

打开CCS8.1,配置环境。

ccs8.1.png

ccs.png

新建一个CCS工程

image.png

工程设置(如果要使用DDR3,需要加载gel文件)
.gel文件用于初始化DSP的参数,比如PLL锁相环,DDR3初始化。

image.png

配置imagelib库

imagelib库.png

其实与vs2017配置opencv相似,需要将imagelib库的.h,.lib(实际是.ae66)静态库加载到工程的搜索路径。

将.h文件加载到complier搜索路径。(点击工程,右键属性)


image.png

将.lib/.ae66加载到linker链接器的路径。


image.png

若路径正确,工程将出现以下内容:


image.png

Step4:编写DSP端的代码

#include<stdio.h>
/*
 * DSP导入图像数据
 * 参考: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中load Memory即可
    * 特点:导入数据速度快,但是相对繁琐
    * */
    uint8* srcImg1 = (uint8*)0x80000000;  //DDR3地址,原始图像
    uint8* dstImg = (uint8*)0x80050000;   //DDR3地址,处理后的结果

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


Step5:编译运行,观察结果

连接上仿真器


image.png

将之前生成的.dat文件导入内存


image.png

image.png

image.png

数据导入成功


image.png

观察导入的数据的图像,右键属性


image.png

设置参数


image.png

然后返回Image,右键refresh


image.png

激动人心的时刻
运行程序...观察Sobel算子的结果

更改地址,设置为dstImg的地址


image.png

刷新显示
铛铛铛...

image.png

以上就是TI DSP C6657加载图像,配置imglib库,图像处理的完整过程。在后续,我讲探索其他方式加载图像,喜欢的小伙伴请支持哦。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容