---
description: Verilog | FPGA | 图像
---

# 使用Verilog HDL在FPGA上进行图像处理

该FPGA项目旨在详细说明如何使用Verilog处理图像，读取Verilog中的输入位图图像（.bmp），处理并将处理结果用Verilog写入输出位图图像。提供了用于读取图像，图像处理和写入图像的完整Verilog代码  。

在这个FPGA Verilog项目中，Verilog实现了一些简单的处理操作，例如反转，亮度控制和阈值操作。通过“parameter.v”文件选择图像处理操作，然后将处理后的图像数据写入位图图像output.bmp以进行验证。所述图像 Verilog读取代码作为图像传感器/摄像机的Verilog模型，它在实时FPGA图像处理项目中，对功能验证很有用。当您想要以BMP格式查看输出图像时，图像写入部分对于测试也非常有用。

在这个项目中，我在阅读部分添加了一些简单的图像处理代码，以便进行图像处理，但您可以轻松删除它以获取原始图像数据。首先，Verilog无法直接读取图像，要在Verilog中读取.bmp图像，需要将图像从位图格式转换为十六进制格式。下面是一个Matlab示例代码，用于将位图图像转换为.hex文件。输入图像大小为768x512，图像.hex文件包含位图图像的R，G，B数据。

下面是图像读取和处理部分的Verilog代码（部分）：

以下“parameter.v”文件中选择图像处理操作。要更改处理操作，只需切换注释行。

“parameter.v”文件还用于定义输入和输出文件的路径和名称。 在处理图像之后，需要将处理后的数据写入输出图像以进行验证。

以下Verilog代码是将处理后的图像数据写入位图图像以进行验证（部分）：

位图图像的标题数据非常重要，并在此处发布。如果没有标题数据，则无法正确显示写入的图像。在Verilog HDL中，$ fwrite命令用于将数据写入文件。

接下来，让我们编写一个测试工作台Verilog代码来验证图像处理操作。

最后，我们可以运行模拟来验证图像处理代码。让我们使用下面的图像作为输入位图文件：

输入位图图像

运行模拟6ms，关闭模拟并打开输出图像以检查结果。以下是输出图像，由parameter.v中的选定操作处理：

反转后输出位图图像

阈值操作后输出位图图像

减去亮度后输出位图图像

由于读取代码是为了模拟目的而对图像传感器/摄像机进行建模，因此建议不要合成代码。如果你真的想合成处理代码并直接在FPGA上运行它，你需要在代码中用块存储器（RAM）替换这些图像数组（total\_memory，temp\_BMP，org\_R，org\_B，org\_G），并设计地址生成器来读取块存储器中的图像数据。

### 完整源代码

{% content-ref url="../zhi-dian-mi-jin-brief" %}
[zhi-dian-mi-jin-brief](../zhi-dian-mi-jin-brief)
{% endcontent-ref %}
