美文网首页
TI DSP C6657导入图像数据进行图像处理

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

作者: 侠之大者_7d3f | 来源:发表于2018-08-26 17:39 被阅读126次

在嵌入式平台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库,图像处理的完整过程。在后续,我讲探索其他方式加载图像,喜欢的小伙伴请支持哦。

相关文章

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

    在嵌入式平台DSP上进行图像处理,首先要解决的问题是如何将PC端的图像加载到DSP内存中。如果熟悉数字图像处理,我...

  • 视频客流统计工作原理

    客流分析算法是整个系统的灵魂其运行在高性能数字信号处理器(TI DSP)中,每秒进行25帧的实时图像分析,华天成客...

  • DSP图像处理

    最近着手把CSK移植到DSP中,先看一些DSP中图像处理的一些例子,第一件事当然就是怎么把图像数据倒入CCS工程中...

  • 机器学习day3

    图像数据不足时的处理方法 图像数据训练时,数据不够怎么办。 对图像进行随机的处理,包括但不限于选择,平移,缩放,裁...

  • 20180222周四~图像处理

    图像处理,分低层处理,输入图像,输出图像。中层处理,输入图像,输出数据。如分割。高层处理,输入图像,输出语义。...

  • 四 图像处理

    图像处理技术概述: 图像处理技术 image processing 图像处理技术是用计算机对 图像信息进行处理的技...

  • 1. 图像处理、计算机视觉与OpenCV

    图像处理(数字图像处理): 图像处理是用计算机对图像进行分析,以达到所需结果的技术,主要包括图像压缩,增强与复原,...

  • 图像处理和数据增强

    前言:用CNN进行训练模型的时候,通常需要对图像进行处理,有时候也叫做数据增强,常见的图像处理的Python库:O...

  • Python十大工具,让图像简洁直观有魅力!

    如今,数据遍布各个角落,图像则是数据的重要组成部分。但图像无论有何用途,都要经过处理。因此,图像处理就是对数字图像...

  • 博客收集

    1. 图像处理: 图像处理基本算法-形态学OpenCV-Pythonimage fusion 2. 图像数据: I...

网友评论

      本文标题:TI DSP C6657导入图像数据进行图像处理

      本文链接:https://www.haomeiwen.com/subject/rgioiftx.html