(多核DSP快速入门)3.利用EMCV进行图像灰度转换的单核DSP程序

原创文章

转载请注册来源http://blog.csdn.net/tostq

教程目录:http://blog.csdn.net/tostq/article/details/51245979

在CCS中应用EMCV有两种方法:

(1)通过导入EMCV静态库的方法

(2)直接将EMCV的源代码导入项目文件中,虽然EMCV的源文件是C++格式的,而C++基本兼容C,而项目文件一般是用C写的,所以还需要将.c文件改成.cpp就可以了。

一、在新建空项目后,导入静态链接库和相关头文件

(1)这里的头文件指的是.h文件,在当前项目中新建一个Include文件夹,将EMCV内的所有头文件复制到其中,这里我们也可以只选择我们需要的头文件导入,同时为了保证我们的头文件被搜索到,需要在项目属性的Build的Include选项中,将这个Include文件夹导入。否则会出现error:
could not open source file "XXX" 

(2)将EMCV静态库文件复制到当前文件夹中,

(3)导入链接命令文件C6678.cmd(第二节有具体介绍)

(4)新建空白源文件rgb2gray.cpp(这里虽然是Cpp文件,但只能用C语言的语法)

此时项目文件如下

二、编写源程序

通过源程序我们可以看到,这里的源程序同原来的OpenCV代码基本上是一致,并没有进行额外修改了,但点击编译后出现如下错误:undefined symbol remain,这里说明灰度转换函数cvCvtColor没有定义,说明EMCV没有编写cvCvtColor函数。

我们重新编写一个灰度转换函数CvtColor,点击小锤子完成编译,查看有没有错误,如果是完全按照上面的步骤,应该是没有问题的。

三、仿真调试

(1)新建一个C6678 Device Functional Simulator, Little Endian的目标配置文件

(2)将测试文件in.rgb复制到项目中,这里的.rgb文件是直接保存图像像素灰度信息的文件,以一个彩色图像文件为例,每个通道都是8位大小,红黄蓝三色依次排列成一个24位大小的像素。

(3)点击调试,此时会弹出核选择对话框,因为我们这里的程序是单核的,所以只需要选择一个核就可以了

(4)点击运行后,我们发现出现如下结果malloc buf failed

这说明了动态堆分配失败了,堆的分配是在链接命令文件.cmd中设置,我们打开C6678.cmd文件:

我们发现我们的堆只有0x8000,只有32kb大小,而我们分配的Buf有320*240*3个字节,完全不够,所以我们需要增加堆的容量:

再点击运行,此时Buf成功分配了!

为了方便调试,防止程序运行完后直接退出,我们可以在主体函数完成后,增加几个断点。

四、使用调试工具

(1)变量窗口的使用

还可以通过Expressions窗口输入变量式子

(2)内存浏览器Memory Brower,输入变量名或变量地址就可以查看其内存

或者通过Load Memory将电脑硬盘内的数据导入到内存中

(3)图像分析器Image Analyzer,可以在Tools选项中打开

首先在Image Analyzer 中右击选择RGB

然后在Properties中做如下设置,因为inBuf中已经存入了图像的数据,所以这里可以直接打开inBuf地址0xc000008,如果我们只想查看当前电脑硬盘内的图像,可以选择先在Memory
Brower中将图像导入到内存中

在Image Analyzer中右击刷新,可以看到图像数据

OutBuf中的灰度图像的Properties中的设置

时间: 2024-12-11 06:36:45

(多核DSP快速入门)3.利用EMCV进行图像灰度转换的单核DSP程序的相关文章

(多核DSP快速入门)0.前言+CCS的安装

原创文章 转载请注册来源http://blog.csdn.net/tostq 前言 最近老师给布置了个作业,让我用多核DSP做一个基于SIFT的RANSAC图像配准,SIFT+RANSAC网上都有许多代码,并不算难,但是多核DSP对于我来说,完全是一片空白,不光单核DSP没接触过,就连CCS是没用过.网上关于DSP的教程虽然很多,但绝大多数都是关于单核的,而多核DSP的教程虽然说也有,但是要么太复杂太专业,如TI的官网资料,要么就是说的不清楚,而且又没有什么完整体系,特别是我买的几本国内教程,完

crosswalk 快速入门,利用WebRTC(html)开始开发视频通话

crosswalk 快速入门,利用WebRTC(html)开始开发视频通话 安装Python 从http://www.python.org/downloads/ 下载安装程序 安装完后,再添加到环境变量. 安装Oracle JDK 下载页面: http://www.oracle.com/technetwork/java/javase/downloads/ 选择要下载的Java版本(推荐Java 7). 选择一个JDK下载并接受许可协议. 一旦下载,运行安装程序. 安装Ant Ant:下载http

(多核DSP快速入门)4.编译测试多核DSP实例Vlfft

原创文章 转载请注册来源http://blog.csdn.net/tostq 系列教程目录:http://blog.csdn.net/tostq/article/details/51245979 Vlfft是由TI官网提供的一个大尺寸快速傅里叶变换的多核DSP实例,其下载地址如下: http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/p/12423/67467.aspx 这个实例是许多同学多核DSP的入门

(多核DSP快速入门)1.创建简单的多核DSP项目HelloWorld

原创文章 转载请注册来源http://blog.csdn.net/tostq 教程目录:http://blog.csdn.net/tostq/article/details/51245979 本节我们将运行第一个多核DSP程序,熟悉CCS开发环境,学会使用CCS调试工具,主要内容如下: (1)新建CCS项目 (2)导入Target 仿真模块 (3)使用调试工具 一.新建CCS项目 选择File/New/CCS Project 二.新建项目对话框 (1)Project name: 指项目名称,这里

数组求和的快速方法(利用cuda的共享内存)--第二部分之程序完善

上一篇提到,那份源码的使用是有限制的. 这次来完善一下.其实就是迭代多次,使得最后一次刚好在一个线程块可以求和. 完善部分: template<class DType> DType array_sum_gpu(DType *dev_array,const int array_size,DType *dev_result) { //const size_t max_block_size = 512;//目前有些gpu的线程块最大为512,有些为1024. const size_t block_s

深入浅出Mybatis之快速入门!

简介 MyBatis的前身叫iBatis,本是apache的一个开源项目, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis.MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索.MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plan Old Java Objects,普通的Java

Robot Framework 快速入门

Robot Framework 快速入门 目录 介绍 概述 安装 运行demo 介绍样例应用程序 测试用例 第一个测试用例 高级别测试用例 数据驱动测试用例 关键词keywords 内置关键词 库关键词 用户定义关键词 变量 定义变量 使用变量 组织测试用例 测试套件 启动和卸载 使用标签 创建测试库 介绍概述 Robot Framework 是一个关键词驱动的自动测试框架.测试用例位于HTML或者TSV(以tab分隔值)文件,使用在测试库中实现的关键词来在测试中运行程序.因为Robot Fra

MyBatis快速入门经典

简介 MyBatis的前身叫iBatis,本是apache的一个开源项目, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis.MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索.MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plan Old Java Objects,普通的Java

利用python 数据分析入门,详细教程,教小白快速入门

这是一篇的数据的分析的典型案列,本人也是经历一次从无到有的过程,倍感珍惜,所以将其详细的记录下来,用来帮助后来者快速入门! 数据的格式如下: 我们设定 一个trem or  typedef为一条标签,一行为一条记录或者是键值对,以此为标准! 下面我们来对数据进行分析: 数据集中一共包含两种标签[trem] and [typedef]两种标签,每个标签下边有多个键值对,和唯一的标识符id,每行记录以"/n"结尾,且每条标签下下有多个相同的键值对,for examble: is_a,syn