69.ov5640摄像头HDMI灰度显示

(1)理论学习

  • 灰度像素:在 RGB 颜色模型下,图像中每个像素颜色的 R、G、B 三种基色的分量值相等的像素。
  • 由灰度像素组成的灰度图像只能表现256中颜色(或亮度),通常把灰度图像中像素的亮度称为灰度值。
  • 灰度化处理:是指把彩色图像转化为灰色图像的处理过程,常用的方法有三种:最大值法、平均值法、加权平均值法。
  • 最大值法:使R、G、B的值三个值中最大的一个,即:R = G = B = max(R,G,B),用最大值法对彩色图像进行灰度化处理会使得图像的整体亮度增加。
  • 平均值法:对R、G、B求平均值,即R = G = B = (R,G,B)/3,用平均值法对彩色图像灰度化处理会形成比较柔和的灰度图像。
  • 加权平均值法:根据三种基色的重要性或其他指标赋予不同程度的权值,即:

        由于人眼对绿色的敏感度最高,对红色的敏感度次之,对蓝色的敏感度最低,因此使 Wg > Wr > Wb 将得到比较合理的灰度图像。实验和理论推导证明,Wr = 0.299、Wg = 0.587、Wb = 0.114时效果最佳。R = G = B = (0.299R + 0.587G + 0.114B)/( 0.299 + 0.587 + 0.114) =0.299R + 0.587G +0.114B。

  •  YUV色域:“Y"表示亮度,”U“和”V“则是色度和浓度。RGB转YUV公式如下: 

(2)实验目标

        使用ov5640双目摄像头的其中一个,经过灰度处理以后传入DDR3,最终在HDMI显示屏上实时显示。

(3)灰度处理模块代码及顶层模块,其余模块请参考之前实验。

module rgb_yuv
(input   wire    [15:0]  RGB565_data ,output  wire    [7:0]   Y           ,output  wire    [7:0]   U           ,output  wire    [7:0]   V           
);parameter YR = 306;  //0.299 * 1024 = 306.176
parameter YG = 601;  //0.587 * 1024 = 601.088
parameter YB = 117;  //0.114 * 1024 = 116.736
parameter YW = 0;parameter UR = -173; //-0.169 * 1024 = -173.056
parameter UG = -339; //-0.331 * 1024 = -338.944
parameter UB = 512;  //0.5    * 1024 = 512
parameter UW = 131072; //128  * 1024 = 131072parameter VR = 512;  //0.5    * 1024 = 512
parameter VG = -429; //-0.419 * 1024 = -429.056
parameter VB = -83;  //-0.081 * 1024 = -82.944
parameter VW = 131072; //128  * 1024 = 131072wire    [7:0]   R;
wire    [7:0]   G;
wire    [7:0]   B;wire    [17:0]  temp_Y;
wire    [17:0]  temp_U;
wire    [17:0]  temp_V;assign R = {RGB565_data[15:11],3'd0};
assign G = {RGB565_data[10:5],2'd0};
assign B = {RGB565_data[4:0],3'd0};assign temp_Y = YR * R + YG * G + YB * B + YW;
assign temp_U = UR * R + UG * G + UB * B + UW;
assign temp_V = VR * R + VG * G + VB * B + VW;assign Y = temp_Y[17:10];
assign U = temp_U[17:10];
assign V = temp_V[17:10];endmodule
module ov5640_yuv_ddr_hdmi
(input   wire                clk                 ,input   wire                reset_n             ,
//ov5640            input   wire                ov5640_pclk         ,input   wire                ov5640_href         ,input   wire                ov5640_vsync        ,input   wire    [7:0]       ov5640_data         ,output  wire                ov5640_scl          ,inout   wire                ov5640_sda          ,output  wire                ov5640_pwdn         ,output  wire                ov5640_rst_n        ,   
//vga-hdmi接口output  wire                vga_hsync           ,output  wire                vga_vsync           ,output  wire                vga_clk             ,output  wire                vga_rst_n           ,output  wire    [23:0]      vga_rgb             ,output  wire                vga_DE              ,
//hdmi配置端接口output  wire                ddc_scl             ,inout   wire                ddc_sda             ,
//DDR3物理接口output  wire    [14:0]		ddr3_addr           ,output  wire    [2:0]		ddr3_ba             ,output  wire    			ddr3_cas_n          ,output  wire    		    ddr3_ck_n           ,output  wire    		    ddr3_ck_p           ,output  wire    		    ddr3_cke            ,output  wire    			ddr3_ras_n          ,output  wire    			ddr3_reset_n        ,output  wire    			ddr3_we_n           ,inout   wire    [31:0]		ddr3_dq             ,inout   wire    [3:0]		ddr3_dqs_n          ,inout   wire    [3:0]		ddr3_dqs_p          ,output  wire        		ddr3_cs_n           ,output  wire    [3:0]		ddr3_dm             ,output  wire        		ddr3_odt             
);parameter H_PIXEL   =   24'd640 ;
parameter V_PIXEL   =   24'd480 ;wire            rst_n               ;
wire            cfg_done            ;
wire            ov5640_wren         ;
wire    [15:0]  RGB565_data         ;
wire    [7:0]   Y                   ;
wire    [15:0]  data_wr             ;
wire            data_rden           ;
wire    [15:0]  data_rd             ;
wire            clk_25M             ;
wire            clk_320M            ;
wire            locked              ;
wire            init_calib_complete ;
wire    [23:0]  data_in             ;
wire            init_rst_n          ;
wire            sys_init_done       ;assign rst_n  = reset_n & locked    ;
assign init_rst_n = rst_n & init_calib_complete;
assign ov5640_pwdn = 1'd0           ;
assign ov5640_rst_n = 1'd1          ;
assign vga_rst_n = rst_n            ;
assign sys_init_done = cfg_done & init_calib_complete;pll     pll_inst
(.clk_25M    (clk_25M    ),    .clk_320M   (clk_320M   ),   .reset      (~reset_n   ),.locked     (locked     ),   .clk_in1    (clk        )
);  ov5640_top      ov5640_top_inst
(.clk             (clk_25M       ),.reset_n         (reset_n       ),.sys_init_done   (sys_init_done ),.ov5640_pclk     (ov5640_pclk   ),.ov5640_href     (ov5640_href   ),.ov5640_vsync    (ov5640_vsync  ),.ov5640_data     (ov5640_data   ),.cfg_scl         (ov5640_scl    ),.cfg_sda         (ov5640_sda    ),.cfg_done        (cfg_done      ), .ov5640_wren     (ov5640_wren   ),.data_out        (RGB565_data   )
);rgb_yuv     rgb_yuv_inst
(.RGB565_data    (RGB565_data),.Y              (Y          ),.U              (),.V              ()
);assign data_wr = {Y[7:3],Y[7:2],Y[7:3]};axi_ddr3_top    axi_ddr3_top_inst
(.ddr3_clk            (clk_320M              ),.reset_n             (rst_n                 ),.pingpang            (1'd0                  ),.ui_clk              (),.ui_rst              (),.wr_b_addr           (32'd0                 ),.wr_e_addr           (H_PIXEL * V_PIXEL * 2 ),.wr_clk              (ov5640_pclk           ),.data_wren           (ov5640_wren           ),.data_wr             (data_wr               ),.wr_rst              (1'd0                  ),.rd_b_addr           (32'd0                 ),.rd_e_addr           (H_PIXEL * V_PIXEL * 2 ),.rd_clk              (clk_25M               ),.data_rden           (data_rden             ),.data_rd             (data_rd               ),.rd_rst              (1'd0                  ),.read_enable         (1'd1                  ),.rd_data_valid       (),.ddr3_addr           (ddr3_addr             ),.ddr3_ba             (ddr3_ba               ),.ddr3_cas_n          (ddr3_cas_n            ),.ddr3_ck_n           (ddr3_ck_n             ),.ddr3_ck_p           (ddr3_ck_p             ),.ddr3_cke            (ddr3_cke              ),.ddr3_ras_n          (ddr3_ras_n            ),.ddr3_reset_n        (ddr3_reset_n          ),.ddr3_we_n           (ddr3_we_n             ),.ddr3_dq             (ddr3_dq               ),.ddr3_dqs_n          (ddr3_dqs_n            ),.ddr3_dqs_p          (ddr3_dqs_p            ),.init_calib_complete (init_calib_complete   ),.ddr3_cs_n           (ddr3_cs_n             ),.ddr3_dm             (ddr3_dm               ),.ddr3_odt            (ddr3_odt              )  
);hdmi_iic    hdmi_iic_inst
(.hdmi_clk    (clk_25M   ),.reset_n     (rst_n     ),.hdmi_scl    (ddc_scl   ),.hdmi_sda    (ddc_sda   )
);vga_ctrl    vga_ctrl_inst
(.vga_clk     (clk_25M       ),.reset_n     (init_rst_n    ),.data_in     (data_in       ),.hang        (),.lie         (),.hsync       (vga_hsync     ),.vsync       (vga_vsync     ),.rgb_vga     (vga_rgb       ),.vga_DE      (vga_DE        )   
);assign vga_clk      = clk_25M;
assign data_rden    = vga_DE;
assign data_in      = {data_rd[15:11],3'b000,data_rd[10:5],2'b00,data_rd[4:0],3'b000};   endmodule

(4)实验现象:

  • 实验板卡及摄像头:
  • 没有经过灰度处理的HDMI显示屏显示情况:
  • 经过灰度处理的HDMI显示屏显示情况:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/5545.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Star Tower:开启数据存储新纪元

在科技飞速发展的当今时代,数据如同璀璨的星辰,闪耀着无尽的价值。而数据存储系统,则是承载这些星辰的浩瀚宇宙。Star Tower 以其卓越的性能和创新的理念,开启了数据存储的新纪元。 Star Tower 的分布式存储架构,是一…

基于SSM的企业管理系统(源码+lw+调试+技术指导)

项目描述 临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下,你想解决的问…

鸿蒙应用App测试-通用测试

注意:大家记得学完通用测试记得再学鸿蒙专项测试 鸿蒙应用App测试-专项测试(DevEco Testing)-CSDN博客 注意:博主有个鸿蒙专栏,里面从上到下有关于鸿蒙next的教学文档,大家感兴趣可以学习下 如果大家觉得…

掌握Qt调试技术

文章目录 前言一、Qt调试的基本概念二、Qt调试工具三、Qt调试实践四、Q调试技巧五、总结前言 在软件开发中,调试是一个至关重要的环节。Qt作为一个广泛使用的跨平台C++图形用户界面应用程序开发框架,其调试技术也显得尤为重要。本文将深入探讨Qt调试技术,帮助读者更好地掌握…

Qt中时间戳转化为时间

QT中时间和时间戳互相转化_currentsecssinceepoch-CSDN博客 qDebug()<<QDateTime::currentMSecsSinceEpoch(); 1730838034770 时间戳(Unix timestamp)转换工具 - 在线工具 (tool.lu) [static] qint64 QDateTime::currentMSecsSinceEpoch() Returns the number of milli…

势不可挡 创新引领 | 生信科技SOLIDWORKS 2025新品发布会·苏州站精彩回顾

2024年11月01日&#xff0c;由生信科技举办的SOLIDWORKS 2025新产品发布会在江苏苏州圆满落幕。现场邀请到制造业的专家学者们一同感受SOLIDWORKS 2025最新功能&#xff0c;探索制造业数字化转型之路。 在苏州站活动开场&#xff0c;达索系统专业客户事业部华东区渠道经理马腾飞…

ArcGIS006:ArcMap常用操作151-200例动图演示

摘要&#xff1a;本文介绍了ArcMap邻域分析、栅格表面分析、水文分析、区域分析、提取分析等工具箱中的工具功能。包括计算图层间点、线、面要素间的距离、位置和角度&#xff0c;创建缓冲区&#xff0c;添加计算信息到属性表&#xff0c;分割面要素&#xff0c;编号&#xff0…

关于马达驱动芯片AT6237的开发指南(兼容DRV8837)

一、芯片引脚介绍 1.芯片引脚 二、系统结构图 三、功能描述 逻辑功能

利用AI提升SEO效果的关键词策略

内容概要 在当今数字化时代&#xff0c;人工智能&#xff08;AI&#xff09;正逐步成为提升搜索引擎优化&#xff08;SEO&#xff09;效果的重要工具。SEO的核心在于关键词的选择与运用&#xff0c;而AI技术则为我们提供了一种智能化的分析和优化方案。通过对大量数据进行挖掘…

了解数据库设计中的反规范化

反规范化是指通过增加冗余数据来提高数据库的读取效率。也就是说,反规范化通过在表中增加冗余字段来减少数据库中的表连接,以提高查询速度。规范化和反规范化是关系型数据库设计中的两个重要方面,它们分别代表了数据组织方式上的两个不同方向。规范化是为了减少数据冗余和提…

【系统集成项目管理工程师教程】第10章 启动过程组

启动过程组包含制定项目章程和识别干系人两个过程&#xff0c;是项目的起始阶段&#xff0c;旨在协调各方期望&#xff0c;明确项目范围、目标与干系人&#xff0c;确保项目符合组织战略&#xff0c;为项目成功奠定基础&#xff0c;在项目管理中起着至关重要的引领作用。 10.…

斑马打印机如何与工业系统(如MES、ERP、数据库等)自动化通讯?

摘要&#xff1a;本文将介绍OPC Router与斑马&#xff08;Zebra&#xff09;打印机相结合的优势&#xff0c;探讨其在工业4.0和物联网领域的应用&#xff0c;以及如何通过简单配置实现数据传输和智能监控。 在工业生产过程中&#xff0c;标签打印环节至关重要。斑马&#xff08…

二开CS—上线流量特征shellcode生成修改模板修改反编译打包

前言 免杀几乎讲的差不多了&#xff0c;今天讲个CS的二次开发。我们原生态的CS特征肯定都是被提取完的了&#xff0c;包括它的流量特征&#xff0c;而我们要做的就是把它的流量特征给打乱&#xff0c;还可以修改生成的后门&#xff0c;使其生成即免杀。 实验环境 CS4.4&…

Linux kernel 源码下载与源码在线阅读地址及其相关资源网站

一、 前言 Linux内核源码的下载地址和在线阅读方式有多种&#xff0c;下面是一些与之相关的网址。同时也包含一些与kernel相关的一些资源网站&#xff0c;供大家参考学习&#xff01; 二、下载地址 Linux官方网站 地址&#xff1a; https://www.kernel.org/ 国内版本下载…

谷歌推出全新AI生成游戏玩法 —— 无限生成角色生活模拟游戏“Unbounded”

随着人工智能技术的飞速发展,游戏行业正迎来前所未有的创新。近日,谷歌宣布了一款名为“Unbounded”的新型游戏,这是一款基于生成式AI技术的角色生命模拟游戏,它将为玩家带来前所未有的开放性和互动性体验。 项目概览 项目名称:Unbounded类型:生成式无限游戏(Generati…

高校实验室安全巡检系统设计与实现(源码+定制+开发)高校实验室巡检系统、实验室安全管理平台、实验室安全监控系统、智能实验室巡查系统、高校实验室风险管理

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

用Dify搭建AI知识库

Dify 可以上传各种格式文档和抓取网页数据训练自已的知识库 一 安装 1 Docker安装 我基于Docker来安装的&#xff0c;所以本机先装Docker Desktop, Docker 安装方法在这里 2 Dify 安装 git clone https://github.com/langgenius/dify.git cd dify/docker copy .env.exampl…

使用 Flask 和 ONLYOFFICE 实现文档在线编辑功能

提示&#xff1a;CSDN 博主测评ONLYOFFICE 文章目录 引言技术栈环境准备安装 ONLYOFFICE 文档服务器获取 API 密钥安装 Flask 和 Requests 创建 Flask 应用项目结构编写 app.py创建模板 templates/index.html 运行应用功能详解文档上传生成编辑器 URL显示编辑器回调处理 安全性…

数据结构 ——— 计算链式二叉树第k层的节点个数

目录 链式二叉树示意图 手搓一个链式二叉树 计算链式二叉树第k层的节点个数 链式二叉树示意图 手搓一个链式二叉树 代码演示&#xff1a; // 数据类型 typedef int BTDataType;// 二叉树节点的结构 typedef struct BinaryTreeNode {BTDataType data; //每个节点的数据str…

熊猫追剧 1.0.0 | 免费追剧软件,全网资源,独家蓝光。

熊猫追剧是一款免费的视频播放软件&#xff0c;集合了电影、电视剧、综艺、动漫、短剧等多种视频资源。软件内测期间未发现广告&#xff0c;提供一条独家蓝光线路&#xff0c;保证高质量播放体验。此外&#xff0c;熊猫追剧还支持投屏、下载及倍速播放等功能&#xff0c;极大方…