当前位置: 首页 > news >正文

FPGA的直方图均衡

文章目录

  • 一、直方图均衡
  • 二、代码实现
  • 三、仿真


一、直方图均衡

  直方图均衡(Histogram Equalization)是一种用于增强图像对比度的图像处理技术。它通过重新分配图像像素的灰度值,使得图像的灰度直方图在整个灰度范围内均匀分布,从而增强图像的细节和视觉效果。
  直方图均衡也称为直方图拉伸,是一种简单有效的图像增强技术,通过改变图像的直方图分布,来改变图像中各像素的灰度,可用于增强动态范围偏小的图像的对比度。原始图像由于其灰度分布可能集中在较窄的区间,结果呈现出曝光不足/过高,使图像灰度集中在低/高亮度范围内,对比度很低。
  直方图均衡的基本原理,就是对在图像中像素个数多的灰度值(即对画面起主要作用的灰度值)进行拉伸,而对像素个数少的灰度值(即对画面不起主要作用的灰度值)进行合并,从而提高对比度,使图像清晰,达到增强的目的。如下图所示:
在这里插入图片描述

二、代码实现

  直方图均衡代码参考的这篇博客:FPGA图像处理仿真实验——直方图均衡化,该代码不需要缓存一张图像,但是需要连续的两帧图像,前一帧用于像素灰度级数统计和灰度级数累积统计,后一帧从 BRAM 中读取对应的灰度级数累积统计结果,并与 136957 相乘得到 mult_result,其中mult_result[34:27为整数部分, mult_result[26:0]为小数部分。完整代码如下:

`timescale 1ns / 1psmodule histogram_equ(input clk,input rst_n,input per_frame_vsync,input per_frame_href,input per_frame_clken,input [7:0] per_img_Y,output post_frame_vsync,output post_frame_href,output post_frame_clken,output [23:0] post_img_Y);localparam IMG_TOTAL_PIXEL=307200;   //640*480
localparam IMG_MAX_GRAY=256;      //0-255//reg web;
wire [18:0] cnt,cntplus;   //同一灰度级像素个数计数器
wire [18:0] ram_his_rd_data;  //从累计直方图中读出的数据
reg vsync_delay;
wire vsync_negedge;    //场同步信号下降沿
wire vsync_posedge;    //场同步信号上升沿
reg web2;   //双端口RAM u2的写使能信号
reg tag;    //标志位
reg [7:0] dizhi;
reg [7:0] dizhi1,dizhi2;   //双端口RAM u2的写数据地址
wire [7:0] addra;    //双端口RAM  u1的a端口地址
wire [18:0] dout;    //双端口RAM  u1的输出数据
wire [18:0] din;    //双端口RAM u1的输入数据
reg [7:0] addrb;   //双端口RAM  u1的b端口地址
wire web;   //双端口RAM的写使能 
reg [18:0] sum;  //为了计算累加直方图,用于存放直方图数据的和
wire [18:0] ram_accu_rddata;   //从累加直方图中读出的数据//统计像素个数时的写使能信号
//always @(posedge clk)
//begin
//    web<=per_frame_clken;
//    //addrb<=per_img_Y;
//end
assign cntplus=cnt+1;//将场同步信号延时一拍
always @(posedge clk or negedge rst_n)
beginif(!rst_n)vsync_delay<=1'b0;elsevsync_delay<=per_frame_vsync;
end
assign vsync_negedge=vsync_delay&(!per_frame_vsync);
assign vsync_posedge=(!vsync_delay)&per_frame_vsync;
always @(posedge clk)
begindizhi1<=dizhi;dizhi2<=dizhi1;
end
//在一帧图像输入完成后需要对RAM进行数据读出和数据清0,此时的读写数据地址为变量dizhi
always @(posedge clk or negedge rst_n)
beginif(!rst_n)dizhi<=8'd0;elsebeginif(tag==0)beginif(dizhi==255)dizhi<=dizhi;elsedizhi<=dizhi+1;endend
end
//在对累计直方图进行写操作时,只有在标志位tag=0时才进行,并且只遍历一次0-255地址
always @(posedge clk)
beginif(tag==0)beginif(dizhi2==255)web2<=0;elseweb2<=1;end
end//当场有效信号为上升沿时,标志位置1,下降沿时,标志位置0。tag=1代表正在输入图像数据流,tag=0代表两帧图像输入数据流之间的间隙
always @(posedge clk or negedge rst_n)
beginif(!rst_n)tag<=1;elsebeginif(vsync_posedge)tag<=1;if(vsync_negedge)tag<=0;end
endalways @(posedge clk)
beginaddrb<=addra;
endassign addra=tag?per_img_Y:dizhi;  //当输入图像数据流时,地址为每个像素点图像灰度值对应的地址,当处于两帧图像输入数据流之间的间隙时,地址为0-255遍历过程的地址
assign cnt=tag?dout:cnt;  //当输入图像数据流时,cnt与u1 的输出数据相连,否则保持
assign ram_his_rd_data=web2?dout:ram_his_rd_data;  //当web2有效时,从累计直方图中读出的数据与双端口RAM u2的输出相连,否则保持
assign din=tag?cntplus:(19'd0);  //当tag=1时,输入为+1后的数据,当tag=0时,需要对RAN进行清0操作,所以输入为0
assign web=tag?per_frame_clken:1;  //tag=1时,使能信号为帧时钟使能信号,tag=0时,要对RAM进行清零操作,所以使能信号一直为1
//计算累加直方图要输入的数据
always @(posedge clk or negedge rst_n)
beginif(!rst_n)beginsum<=19'd0;endelsebeginif(web2==1)beginsum<=sum+ram_his_rd_data;endend
end//双端口RAM u1,用于存放直方图的数据,当输入图片数据流有效时,将每个像素点灰度值对应的地址存放的数据读出,再加1,然后再写回去
//在帧与帧之间的间隙,从地址0-255,将累计直方图数据读出,再将RAM清零
blk_mem_gen_0 u1_blk_mem_gen_0(.clka(clk),.wea(1'b0),.addra(addra),  // input wire [7 : 0] addra.dina(0),    // input wire [18 : 0] dina.douta(dout),  // output wire [18 : 0] douta.clkb(clk),    // input wire clkb.web(web),      // input wire [0 : 0] web.addrb(addrb),  // input wire [7 : 0] addrb.dinb(din),    // input wire [18 : 0] dinb.doutb()  // output wire [18 : 0] doutb
);
//双端口RAM u2,用于存放累加直方图数据,将累加直方图的数据从a端口写入,b端口读出
blk_mem_gen_0 u2_blk_mem_gen_0(.clka(clk),.wea(web2),.addra(dizhi2),  // input wire [7 : 0] addra.dina(sum),    // input wire [18 : 0] dina.douta(),  // output wire [18 : 0] douta.clkb(per_frame_clken),    // input wire clkb.web(1'b0),      // input wire [0 : 0] web.addrb(per_img_Y),  // input wire [7 : 0] addrb.dinb(),    // input wire [18 : 0] dinb.doutb(ram_accu_rddata)  // output wire [18 : 0] doutb
);//直方图均衡化
reg [34:0] data_mult;       //乘法运算结果
always @(posedge clk or negedge rst_n)
beginif(!rst_n)data_mult<=35'd0;elsedata_mult<=ram_accu_rddata* 18'd136957;
end
reg [7:0] data_div;    //除法运算结果
always @(posedge clk or negedge rst_n)
beginif(!rst_n)data_div<=8'd0;else//data_div<=data_mult/IMG_TOTAL_PIXEL;data_div = data_mult[34:27] + data_mult[26];
end
//------------------------------------------
//lag 3 clocks signal sync  
reg	[2:0]	per_frame_vsync_r;
reg	[2:0]	per_frame_href_r;	
reg	[2:0]	per_frame_clken_r;
always@(posedge clk or negedge rst_n)
beginif(!rst_n)beginper_frame_vsync_r <= 0;per_frame_href_r <= 0;per_frame_clken_r <= 0;endelsebeginper_frame_vsync_r 	<= 	{per_frame_vsync_r[1:0], 	per_frame_vsync};per_frame_href_r 	<= 	{per_frame_href_r[1:0], 	per_frame_href};per_frame_clken_r 	<= 	{per_frame_clken_r[1:0], 	per_frame_clken};end
end
assign	post_frame_vsync 	= 	per_frame_vsync_r[2];
assign	post_frame_href 	= 	per_frame_href_r[2];
assign	post_frame_clken 	= 	per_frame_clken_r[2];
assign  post_img_Y          =   post_frame_href?{data_div,data_div,data_div}:24'd0;
endmodule

代码中例化了两个双端RAM,具体如下
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、仿真

  前面提到,由于不需要缓存整张图片用于直方图均衡的计数,所以属于连续的两帧图片,而仿真代码正好是将同一张图片连续读取两次,所以不需要修改仿真代码。仿真代码完整的可以去找之前的博客,这里只放仿真顶层文件,代码如下:

`timescale 1ns / 1psmodule img_sim_tb();
localparam	PIC_INPUT_PATH  	= 	"gsls_test1.bmp"			;
localparam	PIC_OUTPUT_PATH 	= 	"output.bmp"  	;
localparam	PIC_WIDTH  			=	640		;
localparam	PIC_HEIGHT 			=	480	;
reg         cmos_clk   = 0;
reg         cmos_rst_n = 0;wire        cmos_vsync              ;
wire        cmos_href               ;
wire        cmos_clken              ;
wire [23:0] cmos_data               ;wire        pos_vsync      ;
wire        pos_hsync      ;
wire        pos_de         ;
wire [23:0] pos_data       ;
parameter cmos0_period = 6;
always#(cmos0_period/2) cmos_clk = ~cmos_clk;
initial #(20*cmos0_period) cmos_rst_n = 1;
//--------------------------------------------------
//Camera Simulation
sim_cmos #(.PIC_PATH			(PIC_INPUT_PATH			),	.IMG_HDISP 			(PIC_WIDTH 				),	.IMG_VDISP 			(PIC_HEIGHT				)
)u_sim_cmos0(.clk            	(cmos_clk	    		),   .rst_n          	(cmos_rst_n     		),   .CMOS_VSYNC     	(cmos_vsync     		),   .CMOS_HREF      	(cmos_href      		),   .CMOS_CLKEN     	(cmos_clken     		),   .CMOS_DATA      	(cmos_data      		),   .X_POS          	(),   .Y_POS          	()
);
histogram_equ_top u_histogram_equ_top(
.clk         (cmos_clk) ,                
.rst_n       (cmos_rst_n),                .pre_image_vsync    (cmos_vsync),  // vsync信号    
.pre_image_clken    (cmos_clken),  // 时钟使能信号     
.pre_image_hsync    (cmos_href),  // 数据有效信号     
.pre_image_data     (cmos_data),  // 输入图像数据RGB  .pos_image_vsync  (pos_vsync),  // vsync信号  
.pos_image_clken  (pos_de),  // 时钟使能信号    
.pos_image_hsync  (pos_hsync),  // 数据有效信号   
.pos_image_data   (pos_data)  // 输出图像Y数据 
);
//--------------------------------------------------
//Video saving 
video_to_pic #(.PIC_PATH       	(PIC_OUTPUT_PATH		),	.START_FRAME    	(2                      ),	.IMG_HDISP      	(PIC_WIDTH 				),	.IMG_VDISP      	(PIC_HEIGHT				)
)u_video_to_pic0(.clk            	(cmos_clk	            ),	.rst_n          	(cmos_rst_n             ),	.video_vsync    	(pos_vsync		),	.video_hsync    	(pos_hsync		),	.video_de       	(pos_de   		),	.video_data     	(pos_data      )
);
endmodule

仿真结果如下,左边的为原始图像,中间是使用python代码处理的直方图均衡化,右边是Verilog仿真的直方图均衡化,可以看到有明显的图像失真,问题出在那暂时没有找留个坑。

在这里插入图片描述

相关文章:

FPGA的直方图均衡

文章目录 一、直方图均衡二、代码实现三、仿真 一、直方图均衡 直方图均衡&#xff08;Histogram Equalization&#xff09;是一种用于增强图像对比度的图像处理技术。它通过重新分配图像像素的灰度值&#xff0c;使得图像的灰度直方图在整个灰度范围内均匀分布&#xff0c;从而…...

使用Python将视频转化为gif

使用Python将视频转化为gif 一、前言二、准备三、测试 一、前言 最近想把喜欢的视频片段作成gif&#xff0c;就试着用Python做了下&#xff0c;感觉效果还行&#xff0c;这里做个记录。 二、准备 先下载安装对应的库&#xff0c;命令如下&#xff1a; pip install moviepy …...

基于javaweb的SpringBoot雪具商城系统设计与实现系统(源码+文档+部署讲解)

​ 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、…...

Harbor镜像仓库迁移与高可用集群搭建HTTPS实现实战指南

实验环境 Ubuntu22.04操作系统 registry节点 10.0.0.91 master节点 10.0.0.92 backup节点 10.0.0.93 在企业信息化建设的不同演进阶段&#xff0c;私有镜像仓库的选型策略存在显著差异。近期主导完成某企业级容器镜像仓库升级项目&#xff0c;成功实现Docker Registry至Ha…...

redis--JavaSpring客户端

目录 一、引言 二、配置 三、相关操作 四、总结 一、引言 本篇文章会将redis与spring项目进行结合&#xff0c;看看再spring项目中&#xff0c;redis是如何使用的 二、配置 三、相关操作 四、总结 在spring项目中的使用和在基础项目上的使用有差异&#xff0c;但是差异并不大…...

JavaWeb3

聚合函数&#xff1a;把某一列的数据计算。count,max,min,avg,sum select count(id) from wife;-- 统计个数&#xff0c;不计算null&#xff0c;统计常量表示个数 select count(*) from wife; select min(id) from wife; select avg(age) from wife; 分组查询 select name,c…...

SAP-ABAP:SAP数据集成全场景技术指南(BAPI、RFC、IDOC、BATCHJOB、ODATA、WEBSERVICE):从实时交互到批量处理

SAP数据集成全场景技术指南:从实时交互到批量处理 #mermaid-svg-hpPMerJYUerla0BJ {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-hpPMerJYUerla0BJ .error-icon{fill:#552222;}#mermaid-svg-hpPMerJYUerla0BJ .er…...

QT笔记----QCheckBox

文章目录 概要1、QCheckBox 的基本概念2、单个QCheckBox3、多个QCheckBox同时应用3.1、实现效果3.2、实现Demo 概要 在 Qt 应用程序开发中&#xff0c;QCheckBox 是一个常用的用户界面元素&#xff0c;它允许用户在两种状态&#xff08;选中和未选中&#xff09;之间进行切换&a…...

试试智能体工作流,自动化搞定运维故障排查

APO 1.5.0版本全新推出的智能体工作流功能&#xff0c;让运维经验不再零散&#xff01;只需将日常的运维操作和故障排查经验转化为标准化流程&#xff0c;就能一键复用&#xff0c;效率翻倍&#xff0c;从此告别重复劳动&#xff0c;把时间留给更有价值的创新工作。更贴心的是&…...

3.24[Q]Linux

我正在学习Linux&#xff0c;Linux设备管理是怎样的&#xff1f;详细解释&#xff0c;越细节越好 我正在学习Linux&#xff0c;在Linux设备管理中&#xff0c;什么是char device&#xff1f;以及block,usb device?详细解释&#xff0c;越细节越好 我正在学习Linux&#xff0…...

深度学习——图像相似度评价指标

这里写目录标题 PSNR&#xff08;Peak Signal-to-Noise Ratio&#xff0c;峰值信噪比&#xff09;定义公式代码 SSIMMS-SSIM (Multi Scale Structural Similarity Index Measure,多尺度结构相似性)CSS &#xff08;Contrast-Structure Similarity 对比结构相似度&#xff09;MA…...

CentOS安装sshpass工具-自动化SSH密码认证

sshpass是一个在Linux环境下用于自动化SSH密码认证的工具。 一、功能特点 自动化SSH登录&#xff1a;sshpass允许用户在命令行中直接传递密码&#xff0c;从而无需在SSH连接时手动输入密码。这对于自动化脚本和批处理任务非常有用&#xff0c;因为它可以在非交互式环境下完成…...

js 中 如何获取数组的交集【面试题】

一、数组元素为基本类型&#xff1a;Number、String、等基本类型时 1、使用 Set 和 filter&#xff08;适用于两个数组&#xff09; const intersection (arr1, arr2) > {const set new Set(arr2);return [...new Set(arr1)].filter(item > set.has(item)); };将第二…...

value-key 的作用

在 el-autocomplete 组件中&#xff0c;value-key 是一个非常重要的属性&#xff0c;它用于指定选项对象中作为值的字段名。当选项列表是一个包含多个属性的对象数组时&#xff0c;value-key 能帮助组件明确哪个属性是实际要使用的值。比如&#xff0c;选项列表为 [{id: 01, na…...

Spring MVC:从历史演变到实战入门

1. Java Web的发展历史与MVC模式 1.1 Model I与Model II的演进 Model I&#xff08;JSPJavaBean&#xff09; 作为早期Java Web开发的主流模式&#xff0c;其核心架构如下&#xff1a; graph LR A[客户端] --> B[JSP页面] B --> C{业务逻辑} C --> D[JavaBean] D -…...

Matlab设置表table的表头

用到matlab的table很好用。经常涉及放入数据&#xff0c;读取数据&#xff0c;下面总结常用的知识点。 1. 把不同数据类型放到同一个表中 想把时间类型和数值类型放到统一table中。困扰的点是&#xff0c;我已经知道了表头名称&#xff0c; 如何批量的为表头命名&#xff0c;…...

预测蓝桥杯16届嵌入式省赛客观题

以下是15道蓝桥杯嵌入式省赛客观题预测&#xff0c;每道题均包含**选项列表**、**答案**和**解析**&#xff0c;格式清晰便于快速查阅&#xff1a; 一、预测1 ### **一、STM32G4硬件基础与外设配置** 1. **STM32G431RBT6的Flash和RAM容量分别为&#xff1f;** **选项**&a…...

综合章节:游戏网络化、模组化与深度扩展

模块一&#xff1a;网络功能与玩家数据同步 目标&#xff1a;实现玩家得分上传、全球排行榜展示及云端数据同步。 # network_manager.py&#xff08;网络请求封装&#xff09; import requests import threadingclass NetworkManager:def __init__(self, base_url"http:…...

PostgreSQL:索引与查询优化

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…...

Android Compose 框架的 ViewModel 委托深入剖析(二十)

Android Compose 框架的 ViewModel 委托深入剖析 一、引言 在 Android 开发中&#xff0c;数据的管理和状态的保存是至关重要的。ViewModel 作为 Android 架构组件的一部分&#xff0c;为我们提供了一种在配置更改&#xff08;如屏幕旋转&#xff09;时保存数据和管理 UI 状态…...

android|生成二维码qrcode(android)

1.build.gradle implementation com.google.zxing:core:3.4.1引入zxing库 只是生成的话引入core库就可以了 2.封装方法 import android.graphics.Bitmap; import android.graphics.Color;import com.google.zxing.BarcodeFormat; import com.google.zxing.EncodeHintType; imp…...

element-plus中el-empty空盒子组件和Collapse 折叠面板组件的使用

一.el-empty空盒子组件的使用 直接复制下面的代码&#xff1a; <el-empty description"description" /> 展示效果&#xff1a; 还可以自定义文字描述&#xff1a; <el-empty description"暂未选择患者"/> 二.Collapse 折叠面板组件的使用 复制…...

Windows 和 Linux 操作系统架构对比以及交叉编译

操作系统与架构兼容性详解 1. 可执行文件格式&#xff1a;PE vs ELF Windows: PE (Portable Executable) 格式 详细解释&#xff1a; PE 格式是 Windows 下的可执行文件标准 包含多个区段&#xff08;Sections&#xff09;&#xff0c;如代码段、数据段、资源段 文件头包含…...

【区块链安全 | 第一篇】密码学原理

文章目录 1.哈希函数1.1 哈希函数的性质1.2 常见哈希算法1.3 Merkle Tree&#xff08;默克尔树&#xff09;1.4 HMAC&#xff08;哈希消息认证码&#xff09; 2. 公钥密码学2.1 对称加密 vs 非对称加密2.2 RSA 算法2.3 ECC&#xff08;椭圆曲线密码学&#xff09;2.4 Diffie-He…...

3.23[A]linux

gedit 是 GNOME 桌面环境下的文本编辑器&#xff0c;类似于 Windows 中的记事本&#xff0c;但功能更强大&#xff0c;支持语法高亮、多文件编辑等特性。它是一个图形化界面的文本编辑器&#xff0c;适合在需要直观编辑文本文件的场景中使用。 gedit 通常用于编辑配置文件、源代…...

AI革命之下的前端将会如何发展?

一、AI 为前端开发带来的变革 &#xff08;一&#xff09;提升开发效率 传统的 Web 前端开发常常面临大量重复性工作&#xff0c;如编写简单表单、布局组件等&#xff0c;这些工作耗时费力且易出错&#xff0c;严重影响开发效率和项目进度。而 AI 的出现&#xff0c;通过自动…...

【2025】基于springboot+vue的农产品商城系统设计与实现(源码、万字文档、图文修改、调试答疑)

项目完整功能以演示视频为准 基于Spring Boot Vue的农产品商城系统设计与实现功能结构图如下&#xff1a; 课题背景 随着互联网的普及和电子商务的快速发展&#xff0c;农产品线上销售成为推动农业现代化和乡村振兴的重要力量。传统的农产品销售模式存在信息不对称、销售渠道单…...

沪深300股指期货的看涨看跌方式是怎样的?

沪深300指数代表了中国A股市场中300家大公司的整体表现。股指期货交易允许老板们预测指数未来的涨跌&#xff0c;并从中获利。 沪深300股指期货基础操作 首先&#xff0c;沪深300股指期货中的看涨操作&#xff1a;老板们可以通过买入沪深300股指期货合约&#xff0c;代码也就是…...

使用selenium来获取数据集

使用selenium来获取数据集 1、下载最新的chrome浏览器与chromedriver.exe 查看chrome的版本,打开谷歌浏览器,点击右上角的三个点,然后点击【帮助】, 点击【关于Google Chrome】 然后去下载同样为134版本号的chromedriver.exe, 网址:https://googlechromelabs.github.…...

MCP(大模型上下文协议)

以下是关于大模型MCP协议&#xff08;Model Context Protocol&#xff09;的详细介绍&#xff0c;综合其定义、技术架构、应用场景及行业影响&#xff1a; 一、定义与核心目标 **MCP&#xff08;Model Context Protocol&#xff0c;模型上下文协议&#xff09;**是由Anthropic…...

FPGA中串行执行方式之流水线(Pipeline)

FPGA中串行执行方式之流水线(Pipeline) 在FPGA设计中,​流水线(Pipeline)​ 是一种常见的优化技术,用于提高系统的吞吐量和性能。流水线通过将复杂的逻辑分解为多个阶段,每个阶段在一个时钟周期内完成一部分工作,并将中间结果传递到下一阶段。这种方式可以显著提高时钟…...

Python 3.8 Requests 爬虫教程(2025最新版)

遵守网站的爬虫规则、避免爬取敏感信息、保护个人隐私&#xff01; 一、环境配置与基础验证 # 验证 Python 版本&#xff08;需 ≥3.8&#xff09; import sys print(sys.version) # 应输出类似 3.8.12 的信息# 安装 requests 库&#xff08;若未安装&#xff09; # 命令行执…...

【深度学习】GAN生成对抗网络:原理、应用与发展

GAN生成对抗网络&#xff1a;原理、应用与发展 文章目录 GAN生成对抗网络&#xff1a;原理、应用与发展1. 引言2. GAN的基本原理2.1 核心思想2.2 数学表达2.3 训练过程 3. GAN的主要变体3.1 DCGAN (Deep Convolutional GAN)3.2 CGAN (Conditional GAN)3.3 CycleGAN3.4 StyleGAN…...

LINUX基础 [三] - 进程创建

目录 前言 进程创建的初次了解&#xff08;创建进程的原理&#xff09; 什么是fork函数&#xff1f; 初识fork函数 写时拷贝 fork函数存在的意义 fork调用失败的原因 进程终止 运行完毕结果不正确 main函数返回 库函数函数exit 系统调用接口_exit 进程异常终止 进…...

AI比人脑更强,因为被植入思维模型【24】替身决策思维模型

定义 替身决策思维模型是一种在面对复杂问题或决策情境时&#xff0c;通过将自己代入到不同的角色&#xff08;即“替身”&#xff09;中&#xff0c;从这些角色的视角出发去思考、分析和做出决策的思维方式。这种思维模型要求决策者暂时摆脱自身固有的思维定式和立场&#xf…...

数据清洗:基于python抽取jsonl文件数据字段

基于python抽取目录下所有“jsonl”格式文件。遍历文件内某个字段进行抽取并合并。 import os import json import time from tqdm import tqdm # 需要先安装&#xff1a;pip install tqdmdef process_files():# 设置目录路径dir_path r"D:\daku\关键词识别\1623-00000…...

spring后端处理各种请求

在Spring MVC中处理JSON请求和返回JSON消息的步骤如下&#xff1a; 1. 添加依赖 确保项目中包含处理JSON的库&#xff0c;如Jackson。 Maven配置&#xff08;pom.xml&#xff09;&#xff1a; <dependency><groupId>com.fasterxml.jackson.core</groupId>…...

企业级部署zabbix分布式监控系统

目录 一、Zabbix分布式监控系统介绍 1.什么是“Zabbix” 2.Zabbix分布式监控系统的特点 3.Zabbix分布式监控系统的原理 4.Zabbix分布式监控系统的运用 5. Zabbix分布式监控系统的部署顺序 二、搭建 1.设备硬件配置参考 2.zabbix分布式监控系统各节点设备名称和IP规划 …...

OkHttp 的证书设置

在 Android 开发中&#xff0c;通过 OkHttp 自定义 SSLSocketFactory 和 X509TrustManager 可以有效增强 HTTPS 通信的安全性&#xff0c;防止中间人攻击&#xff08;如抓包工具 Charles/Fiddler 的拦截&#xff09;。以下是实现防抓包的关键技术方案&#xff1a; 一、Okhttp设…...

ETL:数据清洗、规范化和聚合的重要性

在当今这个数据呈爆炸式增长的时代&#xff0c;数据已成为企业最为宝贵的资产之一。然而&#xff0c;数据的海量增长也伴随着诸多问题&#xff0c;如数据来源多样、结构复杂以及质量问题等&#xff0c;这些问题严重阻碍了数据的有效处理与深度分析。在此背景下&#xff0c;ETL&…...

蓝桥杯备考:图的遍历

这道题乍一看好像没什么不对的&#xff0c;但是&#xff01;但是&#xff01;结点最大可以到10的5次方&#xff01;&#xff01;&#xff01;我们递归的时间复杂度是很高的&#xff0c;我们正常遍历是肯定通过不了的&#xff0c;不信的话我们试一下 #include <iostream>…...

【多媒体交互】Unity Kinect实现UI控件的点击

在Unity中&#xff0c;通过Kinect实现UI控件的点击功能&#xff0c;主要涉及手部追踪、坐标映射和手势检测三个核心环节。 实现步骤 初始化Kinect与关节追踪 使用KinectManager获取用户ID和手部关节点&#xff08;如JointType.HandLeft&#xff09;的坐标。 long userId _…...

QinQ项展 VLAN 空间

随着以太网技术在网络中的大量部署&#xff0c;利用 VLAN 对用户进行隔离和标识受到很大限制。因为 IEEE802.1Q 中定义的 VLAN Tag 域只有 12 个比特&#xff0c;仅能表示 4096 个 VLAN&#xff0c;无法满足城域以太网中标识大量用户的需求&#xff0c;于是 QinQ 技术应运而生。…...

OBS虚拟背景深度解析:无需绿幕也能打造专业教学视频(附插件对比)

想要录制教学视频却苦于背景杂乱&#xff1f;本文将手把手教你用OBS实现专业级虚拟背景效果&#xff0c;无需绿幕也能轻松营造沉浸式教学场景。文末附6个提升画面质感的免费背景资源&#xff01; 一、虚拟背景的核心价值&#xff1a;从「教师宿舍」到「虚拟讲堂」的蜕变 我们调…...

26考研——图(6)

408答疑 文章目录 一、图的基本概念二、图的存储三、图的遍历四、图的应用五、图的代码实操六、参考资料鲍鱼科技课件26王道考研书 七、总结图的存储结构邻接矩阵邻接表 图的遍历图的相关概念完全图和连通图图的连通性 关键路径学习建议 一、图的基本概念 文章链接: link 二、…...

Redis常用数据类型深度解析:从理论到最佳实践

Redis常用数据类型深度解析&#xff1a;从理论到最佳实践 一、引言二、Redis数据类型全景图三、核心数据类型详解**1. String&#xff08;字符串&#xff09;****2. Hash&#xff08;哈希表&#xff09;****3. List&#xff08;列表&#xff09;****4. Set&#xff08;集合&…...

DeepSeek-V3 模型更新,加量不加价

DeepSeek V3-0324 是 DeepSeek V3 系列的重要升级版本&#xff0c;虽然被官方称为「小版本迭代」&#xff0c;但其在技术能力、开源策略和用户体验上均有显著提升。以下是主要新特性功能和核心变化&#xff1a; 推理能力 基准测试性能显著提升&#xff1a; MMLU-Pro&#xff1…...

Vue项目的 Sass 全局基础样式格式化方案,包含常见元素的样式重置

步骤 1&#xff1a;创建全局样式文件 在项目中创建文件&#xff1a;src/assets/scss/global.scss 内容如下&#xff1a; // 全局盒模型设定&#xff08;边框计入宽高&#xff09; *, *::before, *::after {box-sizing: border-box;margin: 0;padding: 0; }// 基础元素样式重置…...

【Spring篇】Spring的生命周期

一、Bean 生命周期的核心阶段 1. 实例化&#xff08;Instantiation&#xff09; • 触发时机&#xff1a;容器启动时&#xff08;单例 Bean&#xff09;或请求时&#xff08;原型 Bean&#xff09;。 • 实现方式&#xff1a; 通过反射&#xff08;Class.newInstance() 或构造…...

Qt中通过QLabel实时显示图像

Qt中的QLabel控件用于显示文本或图像&#xff0c;不提供用户交互功能。以下测试代码用于从内置摄像头获取图像并实时显示&#xff1a; Widgets_Test.h&#xff1a; class Widgets_Test : public QMainWindow {Q_OBJECTpublic:Widgets_Test(QWidget *parent nullptr);~Widgets…...