利用CCS5.4将彩色图像转换成灰度图像

       在赵小强、李大湘等人的著作《DSP原理及图像处理应用》中,利用CCS2.0的开发平台实现了将彩色图像转换成灰度图像,但由于CCS2.0和CCS5.4的版本差异较大,若完全按照CCS2.0的操作流程可能无法实现想要的效果。针对CCS5.4,可以按照下述方法来操作。

  1)新建一个工程文件,新建一个main.c文件和一个CMD文件,将下述两个程序复制至自己的文件中

/* ======================================================================== */
/*  Copyright 2006 by Wintech Digital System Technology Corp.               */
/*  All rights reserved. Property of Texas Instruments Incorporated.        */
/*  Restricted rights to use, duplicate or disclose this code are           */
/*  granted through contract.	                                            */
/* ======================================================================== */
/*========  头文件引用===========*/
#include "stdio.h"

/*============= 工作变量定义======*/
unsigned char *pr_R;    //指针定义
unsigned char *pr_G;    //指针定义
unsigned char *pr_B;    //指针定义
unsigned char *Gray;    //指针定义

//说明:定义数据存放变量
#pragma        DATA_SECTION(RGB_IMG,"data");
int  RGB_IMG[40000];

#pragma        DATA_SECTION(R_IMG,"data");
unsigned char  R_IMG[20000];
#pragma        DATA_SECTION(G_IMG,"data");
unsigned char  G_IMG[20000];
#pragma        DATA_SECTION(B_IMG,"data");
unsigned char  B_IMG[20000];

#pragma        DATA_SECTION(Gray_IMG,"data");
unsigned char  Gray_IMG[20000];


void RGB2Gray();

///////////////////////////////////////////////////////////////////////////////////////////////////////////////
//使用说明:
//   1. 本程序可以在Simulator下运动;
//   2. 程序编译、链接、加载成功后,先
//      执行File/data/load,将要进行颜色转换的图像数据从RGB_peppers96x128.dat
//     (说明:*.dat格式,内部存放了某图像各像素的RGB颜色值)加载入数据存储器存储地址RGB_IMG中
//   3. 数据加载成功后,再Debug/Go Main, 一步一步运行程序
///////////////////////////////////////////////////////////////////////////////////////////////////////////////

/*================= 主程序 ================*/
main()
{
	int n,flg,imgH,imgW;
    int *ptr;
/*=========== 初始化 ==========*/
	flg=3;      //用于选择灰度化方法
	imgH=96;    //图像的高与宽,因为数据文件所对应的图像高与宽就是96,128
	imgW=128;

	
	//指针指向数组
	pr_R=R_IMG;
	pr_G=G_IMG;
	pr_B=B_IMG;
	Gray=Gray_IMG;

    //1 把RGB三个通道的数据分别放到相应的数组中
    ptr=RGB_IMG;
    for (n=0;n<imgH*imgW;n++)
       *pr_R++=*ptr++;
    for (n=0;n<imgH*imgW;n++)
       *pr_G++=*ptr++;
    for (n=0;n<imgH*imgW;n++)
       *pr_B++=*ptr++;
    //说明:在此暂停,可看原始RGB彩色图像

	//指针指向数组
	pr_R=R_IMG;
	pr_G=G_IMG;
	pr_B=B_IMG;
	Gray=Gray_IMG;

    //2 调用子程序,进行彩色图像变换成灰度图像
    while (1)
    {

       RGB2Gray(pr_R,pr_G,pr_B,Gray,imgW,imgH,flg);

     }
    //说明:在此暂停,可看变换后的灰度图像

}



/*============== 子程序 =============*/
void RGB2Gray
(    unsigned char   *R,      /* 输入彩色图像的R分量   */
     unsigned char   *G,      /* 输入彩色图像的G分量   */
     unsigned char   *B,      /* 输入彩色图像的B分量   */
     unsigned char   *Gray,   /* 输出的灰度图像         */
     int cols, int rows,       /* 图像的宽度与高度      */
     int flg                  /* 控制标志,当其为1、2、3时,分别表示采用方法1、2和3进行灰度化处理 */
)
{
	int  i;  //定义局部变量

	//采用循环的方式对图像中的每个像素进行灰度化
	for (i = 0; i < cols*rows; i++)
	{
	    if (flg==1)              //方法1: 加权平均法
	       *Gray++=(unsigned char)(0.3*(*R++)+ 0.59*(*G++)+ 0.11*(*B++));
	    else if (flg==2)         //方法2: 简单算术平均法
	       *Gray++=(unsigned char)(( (*R++)+ (*G++)+ (*B++))/3);
	    else                     //方法3: 最大值法
	    {
	         Gray[i]= (unsigned char)R[i];
	         if (G[i]>Gray[i])
	             Gray[i]=(unsigned char)G[i];
	         if (B[i]> Gray[i])
	             Gray[i]=(unsigned char)B[i];
	    }
	}
}
/* ======================================================================== */
/*             Copyright (c) 2012 LDX Digital System Technology Corp.   */
/*                         All Rights Reserved.                             */
/* ======================================================================== */
/*
 *  Copyright 2001 by Texas Instruments Incorporated.
 *  All rights reserved. Property of Texas Instruments Incorporated.
 *  Restricted rights to use, duplicate or disclose this code are
 *  granted through contract.
 */
/*
 *  ======== hello.cmd ========
 *
 */
-stack 0x4000
-heap 0x4000
/*-l ..\lib\rts6400.lib /* 包含库文件*/

 
MEMORY 
{
   ISRAM       : origin = 0x0,         len = 0x190000
   page 1: data: o=0x200000,l=0x160000



}

SECTIONS
{
        .vectors > ISRAM
        .text    > ISRAM
        .data	> ISRAM
        .bss     > ISRAM
        .cinit   > ISRAM
        .const   > ISRAM
        .far     > ISRAM
        .stack   > ISRAM
        .cio     > ISRAM
        .sysmem  > ISRAM
        
 	RGB_IMG :>data, page=1
	
	G_IMG :>data, page=1
	R_IMG :>data, page=1
	B_IMG :>data, page=1     
    Gray_IMG :>data, page=1
      
}
 
 

   2)编译工程,选择仿真模式下Debug

   3)加载生成的 .out文件

   4)加载 .dat文件:点击Tools下拉菜单的 Load Memory

   5)点击Tools下的 Image Analyzer, 出现 Image 后右击选择 Properties

   6)单击上图中标红的部分,选择RGB,配置其他参数

扫描二维码关注公众号,回复: 5345531 查看本文章

7)在main.c文件的 line 65 设置断点,运行程序,可以看到图片显示出来了

猜你喜欢

转载自blog.csdn.net/m0_37765662/article/details/82900266
今日推荐