九江论坛网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 909|回复: 0
打印 上一主题 下一主题

求助,用verilog实现RGB565轉灰度圖 [复制链接]

Rank: 7Rank: 7Rank: 7

跳转到指定楼层
楼主
发表于 2020-4-8 19:41:04 |只看该作者 |倒序浏览
欢迎来到九江论坛网--江西九江市生活交流社区! 请记住我们的网址 www.ganzw.com
    文章简介:设计思路:把RGB图像的R、G、B三个分量提取出来,并分别取高5位、高6我觉得这个思路是没问题的,而且网上发布的代码(从RGB888转灰度图)输RGB565转灰度图,Gray=R*0.299+G*0.587+B*0.



要用verilog代码实现RGB565图像转换为灰度图。

     设計思路:把RGB图像的R、G、B三个分量提取出来,并分别取高5位、高6位、高5位,即将RGB888转为RGB565,生成三个coe文件,再存放到三个ram中去。转换时从三个ram中调用数据,按照Gray = R*0.299 + G*0.587 + B*0.114 进行运算,得到结果。
     我覺得这个思路是没问题的,而且网上发布的代码(从RGB888轉灰度图)输出的结果是正确的。我只是修改了一下代码中RGB的位数(部分代码附后)但是输出结果很奇怪,出现了交叠,如下所示。


希望有大神能解答一下我的两点疑惑,由衷感谢。
1、

图像出现混叠的原因和算法有关吗?

2、

RGB565转灰度图,Gray = R*0.299 + G*0.587 + B*0.114这个算法仍然适用吗?(这个算法是参考matlab中的RGB转灰度图的算法)
如果不适用要怎么改呢?

部分代码如下:


   

         

            
always @ ( posedge CLK or negedge RSTn )

  if ( !RSTn ) begin

    i <= 3'd0;

    gray <= 24'd0;

     isDone <= 1'b0;

  end

  else if ( get_pix_vld )

    case ( i )

       0: begin

            gray <= 19595 * red + 38469 * green + 7472 * blue;

          i <= i + 1'b1;

            end

        1: begin isDone <= 1'b1; i <= i + 1'b1; end

        2: begin isDone <= 1'b0; i <= 3'd0; end

    endcase

     

assign oGray = ( gray >> 16 ) ;

assign oDone = isDone ;

   
        

   

    复制代码






分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
分享分享0 收藏收藏0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

联系我们|九江论坛网

GMT+8, 2024-5-17 12:54 , Processed in 1.140625 second(s), 11 queries .

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部