双线性插值缩放算法原理以及matlab与verilog的实现(二)

系列文章目录

双线性插值缩放算法原理以及matlab与verilog的实现(一)


文章目录

  • 系列文章目录
  • 前言
  • 一、前提回顾
  • 二、FPGA实现步骤
    • 2.1 找到源图像四个像素点求目标像素点
    • 2.2 FPGA实现步骤
    • 2.3 总体框架
    • 2.4 ROM缓存模块
    • 2.5 VGA模块
    • 2.6 双线性算法模块
  • 三、下板验证


前言

开发平台:vivado2020.1
开发芯片:xc7k410tffv900-2

在上一篇文章,我们学会了双线性缩放插值算法的原理以及matlab的实现,以及VGA时序的简单实现。
本文实现目的:用verilog实现双线性插值算法,将一张112 ×103大小图片,放大两倍至224 ×206,然后通过VGA显示出来

一、前提回顾

双线性插值算法公式如下:
在这里插入图片描述

f ( x , y ) = f ( Q 11 ) ( 1 − u ) ( 1 − v ) + f ( Q 21 ) u ( 1 − v ) + f ( Q 12 ) ( 1 − u ) v + f ( Q 22 ) u v f(x,y)={f(Q_{11})}{(1-u)(1-v)}+{f(Q_{21})}{u(1-v)}+{f(Q_{12})}{(1-u)v}+{f(Q_{22})}{uv} f(x,y)=f(Q11)(1u)(1v)+f(Q21)u(1v)+f(Q12)(1u)v+f(Q22)uv

由于在图像处理中,一般将左上角的像素点定义为坐标原点,因此将上述的图片变换一下坐标,以及命名顺序,就变为了:
在这里插入图片描述

f ( x , y ) = f ( Q 11 ) ( 1 − u ) ( 1 − v ) + f ( Q 21 ) u ( 1 − v ) + f ( Q 12 ) ( 1 − u ) v + f ( Q 22 ) u v f(x,y)={f(Q_{11})}{(1-u)(1-v)}+{f(Q_{21})}{u(1-v)}+{f(Q_{12})}{(1-u)v}+{f(Q_{22})}{uv} f(x,y)=f(Q11)(1u)(1v)+f(Q21)u(1v)+f(Q12)(1u)v+f(Q22)uv

二、FPGA实现步骤

现在我们知道,我们用一张已知各点像素值的图片(源图像),求出一张放大两倍的图片(目标图像),但是目标各点像素值都是未知。双线性插值算法核心就是:用已知的四个像素点的值算出所求目标像素点的值。因此步骤如下:

2.1 找到源图像四个像素点求目标像素点

根据目标像素点位置乘以缩放系数( s r c w i d t h d s t w i d t h , s r c h e i g h t d s t h e i g h t \frac{srcwidth}{dstwidth},\frac{srcheight}{dstheight} dstwidthsrcwidthdstheightsrcheight)得到一个浮点坐标 ( i + u , j + v ) (i+u,j+v) i+uj+v(其中 i i i j j j为浮点坐标的整数部分; u u u v v v为浮点坐标的小数部分),而这个浮点坐标 ( i + u , j + v ) (i+u,j+v) i+uj+v的像素值 f ( i + u , j + v ) f(i+u,j+v) f(i+uj+v),就是上图中所要求的p点值,所以由公式可知, f ( p ) f(p) f(p)可由 f ( Q 11 f(Q_{11} f(Q11)、 f ( Q 12 f(Q_{12} f(Q12)、 f ( Q 21 f(Q_{21} f(Q21)、 f ( Q 22 f(Q_{22} f(Q22)求出。而 f ( Q 11 f(Q_{11} f(Q11)、 f ( Q 12 f(Q_{12} f(Q12)、 f ( Q 21 f(Q_{21} f(Q21)、 f ( Q 22 f(Q_{22} f(Q22)的坐标分别是 ( i , j ) (i,j) ij ( i + 1 , j ) (i+1,j) i+1j ( i , j + 1 ) (i,j+1) ij+1 ( i + 1 , j + 1 ) (i+1,j+1) i+1j+1

例如:将图像放大2倍

  1. 缩放系数为(0.5,0.5)
  2. 假如求目标图像坐标(10,15)的像素值,浮点坐标为(5 + 0,7 + 0.5)其中u = 0,v = 0.5
  3. 源图像四个点坐标为 ( 5 , 7 ) (5,7) 57 ( 6 , 7 ) (6,7) 67 ( 5 , 8 ) (5,8) 58 ( 6 , 8 ) (6,8) 68
  4. 带入双线性插值算法公式就可求出

2.2 FPGA实现步骤

  1. 求出缩放系数,通常涉及到小数,FPGA处理小数通常是将浮点数转化成定点数来计算(参考FPGA浮点数计算),本文将浮点数放大256倍,例如缩放系数为0.5,则在FPGA中显示为128。再例如,计算 1 - 0.7 = 0.3,在FPGA中就是256 - 179 = 77
  2. 如何同时取出源图像四个点:因为FPGA中,无论是RAM还是ROM,一个时钟周期只能读出一个数据,所以需要将源图像缓存至四个RAM或者4个ROM中(面积换速度),这样一次性给四个地址到这四个ROM中,就能同时收到四个像素点
  3. 实现公式:公式都是由加法和乘法组成,为了速度能快,选用加法器和乘法器的IP,而不是直接用 +,×
  4. 计算完成,数据缓存到RAM里,VGA接口直接读RAM

2.3 总体框架

在这里插入图片描述

2.4 ROM缓存模块

  1. 将图片通过matlab提取像素点,按照RGB顺序,十六进制的格式写入coe文件里,maltab代码如下:
% 读取图像
img = imread('C:\Users\Administrator\Desktop\qq.jpg');% 获取图像尺寸
[height, width, ~] = size(img);% 打开 COE 文件以写入数据
fileID = fopen('C:\Users\Administrator\Desktop\save.coe', 'w');% 写入 COE 文件头部信息
fprintf(fileID, 'memory_initialization_radix=16;\n');
fprintf(fileID, 'memory_initialization_vector=\n');% 遍历图像像素并将像素值写入 COE 文件
for i = 1:heightfor j = 1:width% 将像素值写入 COE 文件fprintf(fileID, '%02X%02X%02X,\n', img(i,j,1), img(i,j,2), img(i,j,3));  end
end% 关闭 COE 文件
fclose(fileID);
disp('COE file generation complete.');

得到coe文件
在这里插入图片描述
打开ROM ip,生成一个位宽24位。深度112×103=11536的ROM,初始化文件为此coe文件
在这里插入图片描述

2.5 VGA模块

vga模块代码和上篇文章一样,只是加了读ROM的操作,代码如下:

 //显示ROM缓存的图片
module vga_ctrl
(input                                               clk ,input           [23:0]                              data_in ,output  reg     [13:0]                              rd_rom_addr,	output  reg                                         vs =1'b0 ,output  reg                                         hs =1'b0 ,output  reg     [23:0]                              data_out    );parameter                                           hcnt_max        =1100;//行扫描是对列计数,最大值parameter                                           vcnt_max        =2250;//列扫描是对行计数,最大值parameter                                           H_ACTIVE        =960; //行数据有效时间parameter                                           H_FRONT_PORCH   =44 ; //行前沿时间parameter                                           H_SYNC_TIME     =22;//行同步信号时间parameter                                           H_BACK_PORCH    =74;//行消隐后肩时间parameter                                           V_ACTIVE        =2160;//场数据有效时间parameter                                           V_FRONT_PORCH   =8 ; //场前沿时间parameter                                           V_SYNC_TIME     =10   ; //场同步信号时间parameter                                           V_BACK_PORCH    =72;//场后沿时间reg             [10:0]                              hcnt ='d0    ;reg             [11:0]                              vcnt ='d0   ;reg             [10:0]                              pix_x ='d0    ;//当前显示像素点x坐标reg             [11:0]                              pix_y ='d0   ; //当前显示像素点y坐标//对行扫描进行计数always @(posedge clk)beginif(hcnt == hcnt_max - 1 )hcnt <= 0;elsehcnt <= hcnt +'d1;		end//对列扫描进行计数always @(posedge clk)beginif((vcnt == vcnt_max-1)&&(hcnt == hcnt_max -1))vcnt <= 0;else	if(hcnt == hcnt_max -1)vcnt <= vcnt +'d1;elsevcnt <= vcnt;endalways@(posedge clk)beginif(hcnt < H_SYNC_TIME)hs <= 1;elsehs <= 0;endalways@(posedge clk)beginif(vcnt < V_SYNC_TIME)vs <= 1;elsevs <= 0;end	//整个屏幕有效显示区域always @(posedge clk) beginif(((hcnt >= H_SYNC_TIME +H_BACK_PORCH)&&(hcnt < H_SYNC_TIME +H_BACK_PORCH +H_ACTIVE))&&((vcnt >=V_SYNC_TIME + V_BACK_PORCH)&&(vcnt<V_SYNC_TIME+V_BACK_PORCH+V_ACTIVE)))beginde <= 1'b1;endelse beginde <= 1'b0;endend//当前显示的像素点的位置always@(posedge clk)beginif(de == 1'b1)beginpix_x <= hcnt - H_SYNC_TIME - H_BACK_PORCH;pix_y <= vcnt - V_SYNC_TIME - V_BACK_PORCH;endelse beginpix_x <= 'd0;pix_y <= 'd0;endend
//提前一拍读ROM地址always @(posedge clk) beginif((pix_x >= 278)&&(pix_x <390)&&((pix_y >=1080)&&(pix_y < 1183)))beginif(rd_rom_addr <'d11535)rd_rom_addr <= rd_rom_addr + 1;elserd_rom_addr <= 'd0;endelse beginrd_rom_addr <= rd_rom_addr;endendalways @(posedge clk) beginif((pix_x >= 279)&&(pix_x <391)&&((pix_y >=1080)&&(pix_y < 1183)))data_out <= data_in;else data_out <= 96'h800080_800080_800080_800080;endendmodule 

屏幕显示效果:
在这里插入图片描述
VGA模块以及ROM数据皆正常,至于为什么图片偏绿,可能是因为显示器YUV和RGB色域转换的问题,后续文章会说明,现在暂时不管。

2.6 双线性算法模块

module bilinear_calculate(input                                               clk ,input                                               rst_n   ,input           [7:0]                               cur_u_dec   ,       //输入的uinput           [7:0]                               cur_v_dec   ,       //输出的vinput                                               pix_en,input           [7:0]                               i_j_pix ,		    //i_j_pix=f(i,j)input           [7:0]                               i_j_1_pix   ,		//i_j_1_pix=f(i,j+1)input           [7:0]                               i_1_j_pix   ,		//i_1_j_pix=f(i+1,j)input           [7:0]                               i_1_j_1_pix ,	    //i_1_j_1_pix=f(i+1,j+1)output  reg     [7:0]                               post_cal_data,output  reg                                         post_cal_data_valid =1'b0);//f(x,y)= f(0,0)*(1-u)(1-v)+f(1,0)*u*(1-v)+f(0,1)*(1-u)*v+f(l,1)*u*vreg             [7:0]                               cur_u_dec_reg=8'd0  ;reg             [7:0]                               cur_v_dec_reg=8'd0  ;reg             [8:0]                               u_1 =9'd0;	//1-ureg             [8:0]                               v_1 =9'd0;	//1-vreg             [8:0]                               u   =9'd0;	//ureg             [8:0]                               v   =9'd0;	//vreg             [8:0]                               u_1_reg =9'd0;	reg             [8:0]                               v_1_reg =9'd0;	reg             [8:0]                               u_reg   =9'd0;	reg             [8:0]                               v_reg   =9'd0;	reg             [8:0]                               u_1_reg_copy    =9'd0;	reg             [8:0]                               v_1_reg_copy    =9'd0;	reg             [8:0]                               u_reg_copy  =9'd0;	reg             [8:0]                               v_reg_copy  =9'd0;	wire            [17:0]                              u_v ;wire            [17:0]                              u_1_v_1 ;wire            [17:0]                              u_v_1  ;wire            [17:0]                              u_1_v  ;reg             [17:0]                              u_v_reg =18'd0;reg             [17:0]                              u_1_v_1_reg =18'd0;reg             [17:0]                              u_v_1_reg   =18'd0;reg             [17:0]                              u_1_v_reg   =18'd0;reg             [7:0]                               i_j_pix_reg =8'd0;	reg             [7:0]                               i_j_1_pix_reg   =8'd0;	reg             [7:0]                               i_1_j_pix_reg   =8'd0;	reg             [7:0]                               i_1_j_1_pix_reg =8'd0;wire            [25:0]                              Fi_j_pix0   ;					wire            [25:0]                              Fi_j_1_pix0 ;	wire            [25:0]                              Fi_1_j_pix0 ;wire            [25:0]                              Fi_1_j_1_pix0   ; 	reg             [25:0]                              Fi_j_pix0_reg   =26'd0;	reg             [25:0]                              Fi_j_1_pix0_reg =26'd0;	reg             [25:0]                              Fi_1_j_pix0_reg =26'd0;reg             [25:0]                              Fi_1_j_1_pix0_reg   =26'd0; 	reg             [25:0]                              F_i_u_j_v1_pix0 =26'd0;reg             [25:0]                              F_i_u_j_v2_pix0 =26'd0;reg             [26:0]                              F_i_u_j_v_pix0  =27'd0;reg             [5:0]                               pix_en_reg ='d0  ;always@(posedge clk )begincur_u_dec_reg	     <= cur_u_dec;cur_v_dec_reg      <= cur_v_dec;
endalways@(posedge clk )beginu_1    <= {1'b0,~cur_u_dec_reg} + 1;v_1    <= {1'b0,~cur_v_dec_reg} + 1;u 	    <= cur_u_dec_reg;v 	    <= cur_v_dec_reg;
endalways@(posedge clk )beginu_1_reg	   <= u_1; v_1_reg	   <= v_1;u_reg	 <= u; 	v_reg	 <= v; 	
endalways@(posedge clk )beginu_1_reg_copy	  <= u_1; v_1_reg_copy	  <= v_1;u_reg_copy		   <= u; 	v_reg_copy		   <= v; 	
endmult_9_9 mult_u_v (.CLK(clk),  .A(u_reg),      .B(v_reg),      .P(u_v)      
);mult_9_9 mult_u_1_v_1 (.CLK(clk),  .A(u_1_reg),      .B(v_1_reg),      .P(u_1_v_1)      
);mult_9_9 mult_u_1_v (.CLK(clk),  .A(u_1_reg_copy),      .B(v_reg_copy),      .P(u_1_v)      
);mult_9_9 mult_u_v_1 (.CLK(clk),  .A(u_reg_copy),      .B(v_1_reg_copy),      .P(u_v_1)      
);always@(posedge clk)beginu_v_reg			<= u_v;		u_1_v_1_reg		<= u_1_v_1;	u_v_1_reg		<= u_v_1;	u_1_v_reg		<= u_1_v;	
end// pix_cal
always@(posedge clk)begini_j_pix_reg		<= i_j_pix;		i_j_1_pix_reg	<= i_j_1_pix;	i_1_j_pix_reg	<= i_1_j_pix;	i_1_j_1_pix_reg <= i_1_j_1_pix;
endmult_18_8 mult1 (.CLK(clk),  .A(u_1_v_1_reg),      .B(i_j_pix_reg),      .P(Fi_j_pix0)      
);mult_18_8 mult2 (.CLK(clk),  .A(u_1_v_reg),      .B(i_j_1_pix_reg),      .P(Fi_j_1_pix0)      
);mult_18_8 mult3(.CLK(clk),  .A(u_v_1_reg),      .B(i_1_j_pix_reg),      .P(Fi_1_j_pix0)      
);mult_18_8 mult4(.CLK(clk),  .A(u_v_reg),      .B(i_1_j_1_pix_reg),      .P(Fi_1_j_1_pix0)      
);always@(posedge clk)beginFi_j_pix0_reg		<= Fi_j_pix0;		Fi_j_1_pix0_reg		<= Fi_j_1_pix0;	Fi_1_j_pix0_reg		<= Fi_1_j_pix0;	Fi_1_j_1_pix0_reg  	<= Fi_1_j_1_pix0;
endalways@(posedge clk)beginF_i_u_j_v1_pix0	<=	Fi_j_pix0_reg + Fi_j_1_pix0_reg;F_i_u_j_v2_pix0	<=	Fi_1_j_pix0_reg + Fi_1_j_1_pix0_reg;endalways@(posedge clk)beginF_i_u_j_v_pix0 <= {1'b0,F_i_u_j_v1_pix0} + {1'b0,F_i_u_j_v2_pix0};
endalways@(posedge clk)beginif(F_i_u_j_v_pix0[26 : 24] == 'd0)post_cal_data <= F_i_u_j_v_pix0[23 : 16];elsepost_cal_data <= 8'hff;
endalways @(posedge clk) beginpix_en_reg <= {pix_en_reg[4:0],pix_en};if(pix_en_reg[5] == 1'b1)post_cal_data_valid <= 1'b1;elsepost_cal_data_valid <= 1'b0;
end
endmodule

三、下板验证

再修改一下vga模块,让它显示两部分,左边是原始图片,右边显示放大图片。效果如下:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/748204.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql实战开发之 mysql 删除一张表某个字段的sql语句

有一张表, 我需要删除这张表其中的某一个或者某几个字段, 相信大家在日常开发中应该会遇到这种情况, 然后刚好自己接触的项目安装的mysql关闭了允许远程连接的设置, 也就是说不允许使用类似于navicat 等可视化工具连接, 那么就没办法通过可视化工具直接去通过鼠标操作就可以 完…

【MySQL 系列】MySQL 语句篇_DDL 语句

DDL&#xff08; Data Definition Language&#xff0c;数据定义语言&#xff09;用在定义或改变表的结构数据类型、表之间的链接和约束等初始化工作上。常用的语句关键字包括 CREATE、 DROP、 ALTER 等。 文章目录 1、MySQL 中的 DQL 语句2、MySQL 中库表的 DQL 语句详解2.1、…

【算法与数据结构】深入解析二叉树(二)之堆结构实现

文章目录 &#x1f4dd;二叉树的顺序结构及实现&#x1f320; 二叉树的顺序结构&#x1f320; 堆的实现&#x1f320; 堆的实现&#x1f309;堆向下调整算法&#x1f309;堆的创建&#x1f309;建堆时间复杂度&#x1f309;堆的插入&#x1f309;堆的删除 &#x1f320;堆向上调…

详细分析Java中Stream流和for循环的差异之处

目录 前言1. 基本知识2. Demo 前言 事情起因是遍历大数据的时候&#xff0c;数据卡顿很严重 对于Java的基本知识推荐阅读&#xff1a;java框架 零基础从入门到精通的学习路线 附开源项目面经等&#xff08;超全&#xff09; 1. 基本知识 在Java中&#xff0c;Stream API提供…

dockers拉取MySQL及Redis并挂载文件

目录 一 . MySQL拉取 1、进入 MySQL 容器内部。 2、登录 MySQL。 3、修改远程连接 4、刷新 二 . Redis拉取 1 . redis/conf中新建文件redis.conf&#xff0c;内容如下&#xff1a; 2 . 容器运行 一 . MySQL拉取 docker run -d --restartalways --name mysql \ -v /…

19 OpenCV 霍夫曼变换检测圆

文章目录 cv::HoughCircles算子参数示例 cv::HoughCircles 因为霍夫圆检测对噪声比较敏感&#xff0c;所以首先要对图像做中值滤波。 基于效率考虑&#xff0c;Opencv中实现的霍夫变换圆检测是基于图像梯度的实现&#xff0c;分为两步&#xff1a; 检测边缘&#xff0c;发现可能…

Day43-2-企业级实时复制intofy介绍及实践

Day43-2-企业级实时复制intofy介绍及实践 1. 企业级备份方案介绍1.1 利用定时方式&#xff0c;实现周期备份重要数据信息。1.2 实时数据备份方案1.3 实时复制环境准备1.4 实时复制软件介绍1.5 实时复制inotify机制介绍1.6 项目部署实施1.6.1 部署环境准备1.6.2 检查Linux系统支…

中电金信:技术实践|Flink维度表关联方案解析

导语&#xff1a;Flink是一个对有界和无界数据流进行状态计算的分布式处理引擎和框架&#xff0c;主要用来处理流式数据。它既可以处理有界的批量数据集&#xff0c;也可以处理无界的实时流数据&#xff0c;为批处理和流处理提供了统一编程模型。 维度表可以看作是用户来分析数…

JavaScript进阶:js的一些学习笔记-this指向,call,apply,bind,防抖,节流

文章目录 1. this指向1. 箭头函数 this的指向 2. 改变this的指向1. call()2. apply()3. bind() 3. 防抖和节流1. 防抖2. 节流 1. this指向 1. 箭头函数 this的指向 箭头函数默认帮我们绑定外层this的值&#xff0c;所以在箭头函数中this的值和外层的this是一样的箭头函数中的…

Spring-1

目录 概念 优点 Autowired和Resource关键字 相同点 不同点 依赖注入的三种方式 概念 Spring 是个java企业级应用的开源开发框架。Spring主要用来开发Java应用&#xff0c;但是有些扩展是针对构建J2EE&#xff08;Java平台企业版&#xff09;平台的web应用。Spring 框架目…

java-ssm-jsp-基于java的客户管理系统的设计与实现

java-ssm-jsp-基于java的客户管理系统的设计与实现 获取源码——》公主号&#xff1a;计算机专业毕设大全

自习室预订系统|基于springboot框架+ Mysql+Java+B/S架构的自习室预订系统设计与实现(可运行源码+数据库+设计文档+部署说明)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 目录 前台功能效果图 学生功能模块 管理员功能登录前台功能效果图 系统功能设计 数据库E-R图设计 lunwen参…

DirectShowPlayerService::doSetUrlSource: Unresolved error code 0x800c000d

报出这个问题&#xff0c;应该是对给的url解析不正确&#xff0c;我给的是rtsp的视频流地址&#xff0c;应该是对该格式解析异常。 所以参考两篇文&#xff1a; QT无法播放视频&#xff1a;报错&#xff1a;DirectShowPlayerService::doRender: Unresolved error code 0x8004…

OCP NVME SSD规范解读-12.Telemetry日志要求

以NVME SSD为例&#xff0c;通常大家想到的是观察SMAR-log定位异常&#xff0c;但是这个信息在多数情况下无法只能支撑完整的定位链路。 定位能力的缺失和低效是数据中心问题解决最大的障碍。 为了解决这个问题&#xff0c;Meta的做法是推进OCP组织加入延迟记录页面。同时NVME协…

练习题手撕总结

基础篇 1.基础知识&#xff08;时间复杂度、空间复杂度等&#xff09; 2.线性表&#xff08;顺序表、单链表&#xff09; 3.双链表、循环链表 4.队列 5.栈 6.递归算法 7.树、二叉树&#xff08;递归、非递归遍历&#xff09; 8.二叉搜索树&#xff08;BST&#xff09; 9.二分查…

Android Studio实现内容丰富的安卓宠物医院管理系统

获取源码请点击文章末尾QQ名片联系&#xff0c;源码不免费&#xff0c;尊重创作&#xff0c;尊重劳动 项目编号128 1.开发环境android stuido jdk1.8 eclipse mysql tomcat 2.功能介绍 安卓端&#xff1a; 1.注册登录 2.系统公告 3.宠物社区&#xff08;可发布宠物帖子&#xf…

Boyer Moore 算法介绍

1. Boyer Moore 算法介绍 Boyer Moore 算法&#xff1a;简称为 BM 算法&#xff0c;是由它的两位发明者 Robert S. Boyer 和 J Strother Moore 的名字来命名的。BM 算法是他们在 1977 年提出的高效字符串搜索算法。在实际应用中&#xff0c;比 KMP 算法要快 3~5 倍。 BM 算法思…

数据结构 之 队列(Queue)

​​​​​​​ &#x1f389;欢迎大家观看AUGENSTERN_dc的文章(o゜▽゜)o☆✨✨ &#x1f389;感谢各位读者在百忙之中抽出时间来垂阅我的文章&#xff0c;我会尽我所能向的大家分享我的知识和经验&#x1f4d6; &#x1f389;希望我们在一篇篇的文章中能够共同进步&#xff0…

JAVA爬虫系列

目录 准备工作 yml 1.入门程序&#xff08;获取到静态页面&#xff09; 2.HttpClient---Get 2.1 修改成连接池 3.HttpClient---Get带参数 3.1 修改成连接池 4.HttpClient---Post 4.1 修改成连接池 5.HttpClient---Post带参数 6.HttpClient-连接池 7.设置请求信息 …

蓝桥真题——-小蓝重组质数(全排列和质数判断)

小蓝有一个十进制正整数n&#xff0c;其不包含数码0&#xff0c;现在小蓝可以任意打乱数码的顺序&#xff0c;小蓝想知道通过打乱数码顺序,n 可以变成多少个不同的质数。 #include <iostream> #include<bits/stdc.h> using namespace std; bool isprime(int n) {if…