九江论坛网
标题:
求助,用verilog实现RGB565轉灰度圖
[打印本页]
作者:
若放弃
时间:
2020-4-8 19:41:04
标题:
求助,用verilog实现RGB565轉灰度圖
文章简介:设计思路:把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 ;
复制代码
欢迎光临 九江论坛网 (http://www.ganzw.com/)
Powered by Discuz! X2