You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Vivado HLS中生成100x100的10阶灰度渐变图像?

在Vivado HLS中生成100×100 10阶灰度渐变图的实现方案

核心思路

Vivado HLS综合阶段仅支持静态一维数组,因此先创建对应100×100尺寸的一维数组,将图像按行划分为10个区域(每个区域10行),每个区域对应一个从白到黑的灰度阶;仿真验证阶段可将一维数组转换为OpenCV的Mat格式,用于可视化或保存图像。

1. 确定灰度阶值

从白(255)到黑(0)均分10阶,通过255 - (i * 255 / 9)计算(i从0到9),得到10个灰度值:255, 227, 200, 172, 145, 117, 90, 62, 35, 0。

2. Vivado HLS综合可执行的核心代码

这部分代码可被HLS综合,仅使用一维数组:

#include <ap_int.h>

// 定义图像尺寸常量
#define WIDTH 100
#define HEIGHT 100
#define TOTAL_PIXELS WIDTH * HEIGHT

// 生成灰度渐变图像的函数
void generate_gradient_img(unsigned char img_array[TOTAL_PIXELS]) {
    // 预定义10阶灰度值(从白到黑)
    unsigned char gray_levels[10] = {255, 227, 200, 172, 145, 117, 90, 62, 35, 0};
    
    // 遍历每一行填充像素
    for (int row = 0; row < HEIGHT; row++) {
        // 确定当前行所属灰度阶(每10行对应一个阶)
        int level_idx = row / 10;
        unsigned char current_gray = gray_levels[level_idx];
        
        // 填充当前行的所有像素
        for (int col = 0; col < WIDTH; col++) {
            int idx = row * WIDTH + col;
            img_array[idx] = current_gray;
        }
    }
}

3. 仿真验证:一维数组转OpenCV Mat并保存

在Testbench中使用OpenCV将一维数组转换为Mat并保存图像,用于验证结果:

#include <opencv2/opencv.hpp>
#include "generate_gradient_img.h"

int main() {
    unsigned char img_array[TOTAL_PIXELS];
    
    // 调用生成函数
    generate_gradient_img(img_array);
    
    // 将一维数组转换为Mat格式
    cv::Mat img(HEIGHT, WIDTH, CV_8UC1);
    for (int row = 0; row < HEIGHT; row++) {
        for (int col = 0; col < WIDTH; col++) {
            img.at<unsigned char>(row, col) = img_array[row * WIDTH + col];
        }
    }
    
    // 保存图像到本地
    cv::imwrite("10level_gradient.png", img);
    
    return 0;
}

关键注意事项

  • Vivado HLS综合阶段不支持OpenCV的Mat类型,核心生成逻辑必须仅使用一维数组,Mat仅用于Testbench的仿真验证。
  • 若生成的图像用于硬件后续处理,可直接将一维数组作为硬件接口的输出。
  • 灰度阶值可根据需求调整,比如改用近似均分的整数步长(如255 - i*26)。

内容的提问来源于stack exchange,提问作者Тёма Ершов

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 21:01:20