当前位置: 首页 > news >正文

基于TIC6000的DSP教学实验箱操作教程:5-18 RGB24图像灰度转换(LCD显示)

一、实验目的

学习RGB24图像灰度转换的原理,掌握图像的读取方法,并实现在LCD上显示灰度转换前后的图像。

二、实验原理

RGB24图像灰度转换

RGB颜色空间作为一种常用的彩色图像表示模型,分别用红(R)、绿(G)、蓝(B)三原色的组合来表示每个像素的颜色。一般情况下,RGB彩色图像灰度化有三种转化方案:

(1)加权平均法

(2)平均值法:对彩色图像的每个像素中的R、G、B三个分量的值进行简单的算术平均,将得到的平均值作为灰度图像对应像素的亮度值。

(3)最大值法:将彩色图像的每个像素中的R、G、B三个分量中的最大值作为灰度图对应像素的灰度值。

RGB24图像灰度转换:加权平均法

所谓加权平均法就是根据三基色的重要性及其他指标,将R、G、B三个分量以不同的权值进行加权平均。由于人眼对绿色的敏感最高,对蓝色敏感最低,因此我们可以按照下式对R、G、B三分量进行加权平均,则能得到较合理的灰度图像。

image.png

而实际应用时,希望避免低速的浮点运算,所以需要整数算法,变种的公式:

Gray = (R30 + G59 + B*11 + 50) / 100

整数算法已经很快了,但是最后的除法仍制约了速度。移位比除法快多了,所以可以将系数缩放成 2 的整数幂。

本实验使用8位精度,2 的 8次幂是256,所以这样计算系数

0.299 * 256 = 76.544 ≈ 76

0.587 * 256 + (0.544) = 150.272 + 0.264 = 150.816 ≈ 150

0.114 * 256 + (0.816) = 29.184 + 0.896 = 30.08

由于四舍五入会有较大的误差,所以将以前的计算结果的误差一起计算进去,舍入方式是去尾法。移位优化之后,8位精度系数,如下:

Gray = (R76 + G150 + B*30) >> 8

程序流程设计

程序流程设计中首先要进行外设使能配置,接着进行LCD管脚复用配置和LCD中断配置,然后进行LCD显示的初始化,最后读取工程目录下的BMP图像并进行RGB24图像的灰度转换处理,将图像数据显示到LCD上。

image.png

三、操作现象

实验设备

本实验使用的硬件接口为LCD,所需硬件为实验板、仿真器、LCD和电源。

image.png

硬件连接

(1)连接仿真器和电脑的USB接口,

(2)将拨码开关拨到DEBUG模式01111,连接实验箱电源,拨动电源开关上电。

image.png

软件操作

导入工程,选择Demo文件夹下的对应工程

编译工程,生成可执行文件

将CCS连接实验箱并加载程序

程序加载完成后点击运行程序

运行程序后,CCS的Console窗口会打印相关信息,同时LCD会显示标题。

稍等片刻后,图像处理完成,LCD会显示灰度转换处理前后的图片。

实验结束后,先点击黄色按钮暂停程序运行,再点击红色按钮退出CCS与实验箱的连接,最后实验箱断电即可。

image.png

image.png

相关文章:

  • NCC开发记录
  • openssl 命令详解
  • orangepi 3b安装 miniconda,后安装 opencv-python
  • springcloud alibaba整合sentinel并结合dashboard控制面板设置规则
  • Docker的一个简单例子(一)
  • 手机电脑之间快速传输图片视频文件,不压缩画质、不限制大小的方法!
  • 【嵌入式】About USB Powering
  • BIO、NIO
  • 最长的指定瑕疵度的元音子串 (100%用例)C卷 (JavaPythonNode.jsC语言C++)
  • InternLM第1节课笔记
  • 程序媛的mac修炼手册--MacOS系统更新升级史
  • Linux第2步_创建虚拟机
  • 计算机网络名词解释
  • Python等高线图的绘制(Matplotlib篇-11)
  • 非隔离BUCK恒流控制芯片SM7307产品特点与典型应用
  • 「面试题」如何实现一个圣杯布局?
  • 【5+】跨webview多页面 触发事件(二)
  • Android开源项目规范总结
  • download使用浅析
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • java2019面试题北京
  • java小心机(3)| 浅析finalize()
  • js算法-归并排序(merge_sort)
  • MYSQL 的 IF 函数
  • Node + FFmpeg 实现Canvas动画导出视频
  • overflow: hidden IE7无效
  • React as a UI Runtime(五、列表)
  • 记一次删除Git记录中的大文件的过程
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 前端面试总结(at, md)
  • 使用权重正则化较少模型过拟合
  • 数组的操作
  • 说说动画卡顿的解决方案
  • 在Unity中实现一个简单的消息管理器
  • 字符串匹配基础上
  • 昨天1024程序员节,我故意写了个死循环~
  • ###C语言程序设计-----C语言学习(6)#
  • (6)STL算法之转换
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (javascript)再说document.body.scrollTop的使用问题
  • (二)正点原子I.MX6ULL u-boot移植
  • (转)Android学习笔记 --- android任务栈和启动模式
  • (转载)利用webkit抓取动态网页和链接
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .NET Framework 的 bug?try-catch-when 中如果 when 语句抛出异常,程序将彻底崩溃
  • .NET/C# 使窗口永不激活(No Activate 永不获得焦点)
  • .NET8.0 AOT 经验分享 FreeSql/FreeRedis/FreeScheduler 均已通过测试
  • .NET开源项目介绍及资源推荐:数据持久层 (微软MVP写作)
  • [④ADRV902x]: Digital Filter Configuration(发射端)
  • [Android]Android P(9) WIFI学习笔记 - 扫描 (1)
  • [C#]C#学习笔记-CIL和动态程序集
  • [CSS] 点击事件触发的动画
  • [Editor]Unity Editor类常用方法