zoukankan      html  css  js  c++  java
  • fpga图片灰度处理

    vga显示静态图品主要分为两个部分,一个是驱动vga,另一部分控制vga显示。

    vga驱动部分之前写过,直接例化过来用即可。

    另一个是vga显示,从网上找了一个200*200的lena图品,然后用BMP2Mif软件

    将图片转换成mif文件,24*40000,24代表rgb三原色,4000代表像素,在200*200

    的区域内,一共有40000个像素点,然后把mif文件存进rom里,vga显示出来即可。

    /*-----------------------------------------------------------------------
    
    Date                :        2017-XX-XX
    Description            :        Design for .
    
    -----------------------------------------------------------------------*/
    
    
    module vga_control
    (
        //global clock
        input                    clk,            //system clock
        input                    rst_n,             //sync reset
        
        //vga interface
        input            [10:0]    value_x,
        input            [10:0]    value_y,
        output            [23:0]    rgb,
    
        //rom interface
    
        output    reg        [15:0]    rom_addr,        //
        input            [23:0]    rom_q
    ); 
    
    
    //--------------------------------
    //Funtion :    display_区域           
    
    wire        display_addr;
    assign        display_addr    =    ((value_x >= 8'd100 && value_x < 9'd300) && (value_y >= 8'd100 && value_y < 9'd300)) ? 1'b1 : 1'b0;
    
    
    
    //--------------------------------
    //Funtion :    rgb
    
    assign        rgb                =    (display_addr == 1'b1) ? rom_q : 1'd0; 
    
    //--------------------------------
    //Funtion :    rom_addr
    
    wire        [10:0]        display_x;
    wire        [10:0]        display_y;
    
    assign            display_x        =    value_x - 8'd100;
    assign            display_y        =    value_y    - 8'd100;
    
    
    always @(posedge clk or negedge rst_n)
    begin
        if(!rst_n)
            rom_addr <= 1'd0;
        else if(display_addr)
            rom_addr <= display_x  +  display_y*200;
        else
            rom_addr <= 1'd0;
    end
    
    
    endmodule
        

     

    将图品进行灰度处理,把图片进行灰度化我搜了一下,一是可以加快运算速度,第二点色彩对于计算本身并没有作用,所以把它舍弃。

    彩色转灰度公式 : gray = RX0.299 + GX0.587 + BX0.114;

    fpga里面的寄存器都是整数,所以需要对数据进行放大,可能思维固化了吧,第一反应是这样的

    因为都是三位小数,我会乘上1000然后除1000,但是除法速度明显不如移位,其实可以这样

    把每位都乘上2^16,然后右移16位即可

    //--------------------------------
    //Funtion :    rgb
    
    //assign        rgb                =    (display_addr == 1'b1) ? rom_q : 1'd0; 
    assign        rgb                =    (display_addr == 1'b1) ? {3{gray}} : 1'd0; 
    
    
    //--------------------------------
    //Funtion :    转灰度处理
    wire        [7:0]        gray;
    
    assign        gray = (rom_q[23:16]*19595 + rom_q[15:8]*38469 + rom_q[7:0]*7472) >> 16;

    这样一看,灰度化其实也挺简单的,没有那么神秘

  • 相关阅读:
    RSS简易阅读器vb.net源代码
    [建议]有关图片地址的建议
    [音乐欣赏]wind flowers
    有个叫计算机的比我笨
    一个朋友画的建筑设计手绘图与其想到的
    [推荐]华建小翻--QQ里的一个不错的服务商
    爆强的广告
    [学习日记]重构简易RSSREADER的UML类图
    [音乐欣赏]红颜
    [音乐欣赏]花与琴的流星
  • 原文地址:https://www.cnblogs.com/bixiaopengblog/p/7462961.html
Copyright © 2011-2022 走看看