名称:彩色视频图像转黑白(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