
基于FPGA的车牌识别系统Verilog代码:包含OV5640图像采集与HDMI显示的红框车牌
识别功能
车牌识别系统这玩意儿做起来其实挺带劲的。咱们今天要聊的这个方案直接拿FPGA硬刚图像处理,
OV5640摄像头拍到的画面通过HDMI实时显示不说,还能给车牌套红框把识别结果怼到左上角。不整虚的,
直接上干货。
先看硬件架构(代码懒得贴完整工程了,抓重点模块说说):
```verilog
// 图像采集状态机核心片段
always@(posedge cmos_pclk) begin
case(state)
IDLE: if(start_capture) state <= RECEIVE_HEADER;
RECEIVE_HEADER:
if(header_cnt == 3) state <= GET_DATA;
GET_DATA:
if(pixel_cnt == IMG_WIDTH*IMG_HEIGHT-1)
state <= IDLE;
//...状态跳转控制摄像头数据流
endcase
end
```
这个状态机负责把OV5640摄像头输出的拜耳数据转成RGB格式。注意`cmos_pclk`用的是摄像头自
己的时钟域,这里必须做跨时钟域处理。建议用异步FIFO缓冲数据,我习惯用Xilinx的IP核生成个深度102
4的FIFO,这样后续处理模块用系统时钟读取就不会出乱子。
车牌定位是核心难点,Matlab仿真阶段先拿颜色空间开刀:
```matlab
% 车牌颜色阈值分割
hsv_img = rgb2hsv(src_img);
blue_mask = (hsv_img(:,:,1)>0.55) & (hsv_img(:,:,1)<0.7);
morph_img = imopen(blue_mask, strel('rectangle',[5,5]));
```