zoukankan      html  css  js  c++  java
  • TMS320DM642中一种彩色图像转化成灰度图像算法

    摘要:数字图像中,一般将其他格式图像转化成灰度图像,以使后续的图像计算量变少一些。

    平台:Windows10+CCS5.5+TMS320DM642

    实现:

    /* ======================================================================== */
    /*  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.                             */
    /* ======================================================================== */
    

     

    导入数据 TOOL ->Load Memory

    查看原图 TOOLS->Image Analyzer 

    原图配置

    原图效果

    处理后的图配置

    处理后图的效果

  • 相关阅读:
    java基于redis事务的秒杀实现
    redis事务
    java 根据经纬度坐标计算两点的距离算法
    Spring ElasticsearchTemplate 经纬度按距离排序
    springboot springmvc拦截器 拦截POST、PUT、DELETE请求参数和响应数据,并记录操作日志
    jpa Auditor 自动赋值与自定义 @CreatedBy @LastModifiedBy @CreatedDate @LastModifiedDate
    docker安装elasticsearch
    win10中使用 Windows照片查看器
    Springboot 项目启动后执行某些自定义代码
    SimpleDateFormat 线程不安全及解决方案
  • 原文地址:https://www.cnblogs.com/dafang/p/8253168.html
Copyright © 2011-2022 走看看