初级会员
积分 65
金钱 65
注册时间 2023-8-19
在线时间 14 小时
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
我来回答