OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 430|回复: 0

[XILINX] 想在LCD屏特定区域二值化,其余部分仍为灰度图像

[复制链接]

2

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
65
金钱
65
注册时间
2023-8-19
在线时间
14 小时
发表于 2024-5-13 11:29:35 | 显示全部楼层 |阅读模式
3金钱
想在LCD屏特定区域二值化,其余部分仍为灰度图像,代码如下,特定的区域可以显示边框,但是摄像头图片数据都没有显示,麻烦看一下是哪里出了问题?是根据Vitis二值化摄像头显示部分改的。只对二值化的代码做了更改

module binarization(
    //module clock
    input               clk              ,// 时钟信号
    input               rst_n            ,// 复位信号(低有效)

    //图像处理前的数据接口
    input               gray_vsync       ,// vsync信号
    input               gray_clken       ,// 时钟使能信号信号
    input               gray_data_valid  ,// 数据有效信号
    input   [7:0]       luminance        ,

    //图像处理后的数据接口
    output              binary_vsync     ,// vsync信号
    output              binary_clken     ,// 时钟使能信号
    output              binary_data_valid,// 数据有效信号
    output  [23:0]      binary_data       //
);

reg     [ 9:0]                  row_cnt                         ;
reg     [ 9:0]                  col_cnt                         ;

parameter THRESHOLD = 8'd80;    //二值化的阈值

//reg define
reg    gray_vsync_d;
reg    gray_clken_d;
reg    gray_data_valid_d;
reg    monoc;                      //monochrome(1=白,0=黑)

//*****************************************************
//**                    main code
//*****************************************************

assign  binary_vsync = gray_vsync_d;
assign  binary_clken = gray_clken_d;
assign  binary_data_valid = gray_data_valid_d;
assign  binary_data = (col_cnt >= 'd343 && col_cnt <= 'd454 && row_cnt >= 'd182 && row_cnt <= 'd294) ?
                                    ((luminance > THRESHOLD) ?  24'hffffff : 24'h0) : {luminance,luminance,luminance};

always @(posedge clk or negedge rst_n) begin
    if(!rst_n)
        col_cnt <=      'd0;
    else if(binary_data_valid == 1'b0)
        col_cnt <=      'd0;
    else if(binary_data_valid == 1'b1 && binary_clken == 1'b1)
        col_cnt <= col_cnt + 1'b1;
end

always @(posedge clk or negedge rst_n) begin
    if(!rst_n)
        row_cnt <=      'd0;
    else if(binary_vsync == 1'b1)
        row_cnt <=      'd0;
    else if(binary_data_valid == 1'b1 && binary_clken == 1'b1 && col_cnt == 'd799)
        row_cnt <= row_cnt + 1'b1;
end

/* //二值化
always @(posedge clk or negedge rst_n) begin
    if(!rst_n)
        monoc <= 1'b0;
    else if(luminance > THRESHOLD)  //比较图像灰度值与阈值的大小
        monoc <= 1'b1;
    else
        monoc <= 1'b0;
end */

//延时1拍以同步时钟信号
always@(posedge clk or negedge rst_n) begin
    if(!rst_n) begin
        gray_vsync_d <= 1'd0;
        gray_clken_d <= 1'd0;
        gray_data_valid_d <= 1'd0;
    end
    else begin
        gray_vsync_d <= gray_vsync;
        gray_clken_d <= gray_clken;
        gray_data_valid_d <= gray_data_valid;
    end
end

endmodule


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 14:18

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表