名称:彩色视频图像转黑白(OV5640 摄像头)设计Verilog代码Quartus AX301开发板
软件:Quartus
语言:Verilog
代码功能:
本实验将在例程“OV5640 摄像头显示例程”的基础上实现彩色图像转化成黑白的灰度视频,就相当于把彩色图像转化成单色的黑白图像。如下图左边为彩色的图像,转化后变成右边的黑白图像。
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
本代码已在AX301开发板验证,AX301开发板如下,其他开发板可以修改管脚适配:
设计文档:
彩色视频图像转黑白例程
1 实验简介
本实验将在例程“OV5640 摄像头显示例程”的基础上实现彩色图像转化成黑白的灰度视频,就相当于把彩色图像转化成单色的黑白图像。如下图左边为彩色的图像,转化后变成右边的黑白图像。
转换前
转换后
2 实验原理
在“OV5640 摄像头显示例程”中显示的视频图像是 RGB565 的 16 位色的彩色图像,我们这里需要把 RGB 的图像数据转换成 YCbCr 信号。关于 YCbCr 是什么?简单的说:"Y"表示明亮度(Lu Luma),也就是灰阶值;而"Cb"和"Cr"表示的则是色度(Chrominance 或 Chroma)。
在彩色转黑白图像中,我们需要的就是这个明亮度的值 Y,把颜色部分去掉,Y 值越大,颜色越白,Y 值越小,颜色越暗。如果输出的 RGB 的值都等于这个亮度 Y 的值,VGA 显示的图像就成了黑白图像。
那如何来产生这个 "亮度"Y 信号呢?"亮度"Y 是通过 RGB 输入信号来创建的,方法是将 RGB 信号的特定部分叠加到一起。"色度"则定义了颜色的两个方面-色调与饱和度,分别用 Cr 和 CB 来表示。其中,Cr 反映 RGB 输入信号红色部分与 RGB 信号亮度值之间的差异。而 CB 反映的是RGB 输入信号蓝色部分与 RGB 信号亮度值不同的差异。
通过运算,YUV 三分量可以还原出 R(红),G(绿),B(兰)。RGB 和 YUV 的转换公式如下:
Y = 0.183R + 0.614G + 0.062B + 16;
CB = -0.101R - 0.338G + 0.439B + 128;
CR = 0.439R - 0.399G - 0.040B + 128;
3 程序设计
本实验一个重点模块是 rgb_to_ycbcr,主要完成 RGB 到 YCbCr 的转换。按照公式,转换过程中有小数,这里转化为定点小数,转化原理非常简单,例如例程中使用 8bit 来表示小数部分,需要将小数乘 256(2 的 8 次方),计算完成以后再除以 256 即可,在硬件设计中,这些乘法和除法通过移位就可以完成。
本实验还设计到一个知识点就是流水线处理,为了提高性能,降低组合逻辑复杂程度,将一个复杂的运算分布到多个时钟周期,本实验中 rgb_to_ycbcr 模块一共使用 4 个时钟周期完成转换。
|
信号名称 |
方向 |
说明 |
|
clk |
in |
时钟输入 |
|
rst |
in |
异步复位输入,高复位 |
|
rgb_r |
in |
RGB 数据输入,红色分量 |
|
rgb_g |
in |
RGB 数据输入,绿色分量 |
|
rgb_b |
in |
RGB 数据输入,蓝色分量 |
|
rgb_hs |
in |
RGB 数据行同步输入 |
|
rgb_vs |
in |
RGB 数据场同步输入 |
|
rgb_de |
in |
RGB 数据数据有效指示 |
|
ycbcr_y |
out |
YCbCr 输出 Y 亮度 |
|
ycbcr_cb |
out |
YCbCr 输出 Cb 色度 |
|
ycbcr_cr |
out |
YCbCr 输出 Cr 色度 |
|
ycbcr_hs |
out |
YCbCr 输出行同步 |
|
ycbcr_vs |
out |
YCbCr 输出场同步 |
|
ycbcr_de |
out |
YCbCr 输出数据有效 |
rgb_to_ycbcr 模块端口
4 实验现象
(1) 将摄像头模块插入开发板,保证 1 脚对齐,1 脚在焊盘形状和其他引脚是有明显区别的,是方形的。
摄像头模块连接图
(2) 连接好 VGA 显示器。
(3) 下载实验程序,可以看到黑白的视频输出。注意:ov5640 模块焦距是可调的,如 果焦距不合适,图像会模糊,旋转镜头,可以调节焦距。摄像头模块要轻拿轻放,不要 用手触摸元器件。
部分代码展示:
////////////////////////////////////////////////////////////////////////////////// // CMOS sensor 8bit data is converted to 16bit data // // // // Author: meisq // // msq@qq.com // // ALINX(shanghai) Technology Co.,Ltd // // heijin // // WEB: http://www.alinx.cn/ // // BBS: http://www.heijin.org/ // // // ////////////////////////////////////////////////////////////////////////////////// // // // Copyright (c) 2017,ALINX(shanghai) Technology Co.,Ltd // // All rights reserved // // // // This source file may be used and distributed without restriction provided // // that this copyright statement is not removed from the file and that any // // derivative work contains the original copyright notice and the associated // // disclaimer. // // // ////////////////////////////////////////////////////////////////////////////////// //================================================================================ // Revision History: // Date By Revision Change Description //-------------------------------------------------------------------------------- // 2017/7/19 meisq 1.0 Original //*******************************************************************************/
点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=1356
497