基于内容的图像检索系统设计与实现

1.系统设计

1.1概念介绍

1.1.1图像颜色特征

颜色特征是在图像检索中应用最为广泛的视觉特征,主要原因在于颜色往往和图像中所包含的物体或场景十分相关。此外,颜色特征对图像本身的尺寸、方向、视角的依赖性较小,从而具有较高的检索性。利用颜色特征进行检索的方法主要基于直方图,如:直方图相交法,比例直方图法,距离法,参考颜色表法和聚类算法,累计直方图法,此外,还有HSI中心矩法。

  1. RGB模型

RGB色彩模式是工业界的一种颜色标准,是通过对红(R)、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB即是代表红、绿、蓝三个通道的颜色,这个标准几乎包括了人类视力所能感知的所有颜色,是目前运用最广的颜色系统之一。

                                                                                   图1 RGB颜色空间

  1. HSI模型

HSI模型是美国色彩学家孟塞尔(H.A.Munseu)于1915年提出的,它反映了人的视觉系统感知彩色的方式,以色调、饱和度和亮度三种基本特征量来感知颜色。

图2 HSI颜色空间

 

  1. RGB转换成HSI(几何推导法):

 

  1. H的前三阶中心矩,S、I类似:

1.1.2图像纹理特征

图像纹理特征纹理特征是一种不依赖于颜色或亮度的反映图像中同质现象的视觉特征。纹理特征包含了物体表面结构组织排列的重要信息以及它们与周围环境的联系。用户可通过提交包含有某种纹理的图像来查找含有相似纹理的其他图像。从人类的感知经验出发, 纹理特征主要有粗糙性、方向性和对比度。纹理分析方法,大致可分为两类:1)统计方法。用于分析像木纹、沙地、草坪等细致而不规则的物体,并根据关于像素间灰度的统计性质对纹理规定特征及特征与参数间的关系。2)结构方法。适于像布料的印刷图案或砖瓦等一类元素组成的纹理及其排列比较

规则的图案, 然后根据纹理基元及其排列规则来描述纹理的结构及特征、特征与参数间的关系。

(1)灰度共生矩阵

灰度共生矩阵是图像中相距为D的两个灰度像素同时出现的联合概率分布。通过计算灰度图像得到它的共生矩阵,然后透过计算这个共生矩阵得到矩阵的部分特征值,来分别代表图像的某些纹理特征。灰度共生矩阵能反映图像灰度关于方向、相邻间隔、变化幅度的综合信息,它是分析图像的局部模式和它们排列规则的基础。

  1. 矩阵一致性

是灰度共生矩阵元素值的平方和,也称之为能量,反映了图像灰度分布均匀程度和纹理粗细度。

           

  1. 矩阵对比度

度量矩阵的值是如何分布和图像中局部变化的多少,反应了图像的清晰度和纹理的沟纹深浅。纹理的沟纹越深,反差越大,效果清晰;反之,对比值小,则沟纹浅,效果模糊。

       

  1. 矩阵熵

是图像包含信息量的随机性度量。当共生矩阵中所有值均相等或者像素值表现出最大的随机性时,熵最大;因此熵值表明了图像灰度分布的复杂程度,熵值越大,图像越复杂。

      

  1. 矩阵相关性

也称为同质性,用来度量图像的灰度级在行或列方向上的相似程度,因此值的大小反应了局部灰度相关性,值越大,相关性也越大。

         

1.1.3图像指纹特征

pHash:感知哈希算法(Perceptual hash algorithm),它的作用是对每张图片生成一个"指纹"(fingerprint)字符串,然后比较不同图片的指纹。结果越接近,就说明图片越相似。

pHash的工作过程:

(1)缩小尺寸:pHash以小图片开始,但图片大于8*8,32*32是最好的。这样做的目的是简化了DCT的计算,而不是减小频率。

(2)简化色彩:将图片转化成灰度图像,进一步简化计算量。

(3)计算DCT:计算图片的DCT变换,得到32*32的DCT系数矩阵。

(4)缩小DCT:虽然DCT的结果是32*32大小的矩阵,但我们只要保留左上角的8*8的矩阵,这部分呈现了图片中的最低频率。

(5)计算平均值:如同均值哈希一样,计算DCT的均值。

(6)计算hash值:这是最主要的一步,根据8*8的DCT矩阵,设置0或1的64位的hash值,大于等于DCT均值的设为”1”,小于DCT均值的设为“0”。组合在一起,就构成了一个64位的整数,这就是这张图片的指纹。

结果并不能告诉我们真实性的低频率,只能粗略地告诉我们相对于平均值频率的相对比例。只要图片的整体结构保持不变,hash结果值就不变。能够避免伽马校正或颜色直方图被调整带来的影响。与均值哈希一样,pHash同样可以用汉明距离来进行比较。(只需要比较每一位对应的位置并算计不同的位的个数)

 

1.1.4 图像形状特征

形状不变矩法

作为一组关于形状的统计值,矩不变量的表示形式有多种,如 Hu 矩,具有对图像的旋转、平移和尺度变化的不变性。基本思想就是用图像的 Hu 不变矩 u1~u7 和离心率 e 作为图像的形状特征索引,使用适当的相似性距离定义,计算出两幅图像的相似性距离。当距离足够小时,就认为两幅图像是相似的。

 

1.1.5距离算法

  1. 余弦定理

通过夹角的大小,来判断向量的相似程度。夹角越小,就代表越相似。余弦值越接近1,就表明夹角越接近0度,也就是两个向量越相似,这就叫"余弦相似性"。

                

(2)汉明距离

对两个字符串进行异或运算,并统计结果为1的个数,即两个等长字符串的二进制对应不相同的位个数,那么这个数就是汉明距离。距离越小图片越相似。

1.2实现工具

(1)系统开发工具:java

(2)数据库开发工具:MySQL

 

1.3设计流程

1.3.1工作流程

基于内容的图像检索技术是对输入的图像进行分析并分类统一建模,提取其颜色、形状、纹理、轮廓和空间位置等特征,建立特征索引, 存储于特征数据库中。检索时,用户提交查询的源图像,通过用户接口设置查询条件,可以采用一种或几种的特征组合来表示,然后在图像数据库中提取出查询到的所需关联图像,按照相似度从大到小的顺序,反馈给用户。用户可根据自己的满意程度,选择是否修改查询条件,继续查询,以达到满意的查询结果。

1.3.2系统框架

图1 基于内容的图像检索框架

图2 基于内容的图像检索系统逻辑模型

1.3.3数据库构建与实现

图像数据库包括两个部分:图像库和特征库。图像库是图像的集合,存储数字化的图像信息,具体在系统实现中,可以存放图像的路径和文件名称来表示;特征库存储图像中提取出的特征表达的相关信息,并为提取出的各个特征建立索引,且和图像间存在一一对应的关系。

(1)图像数据库(本系统导入了7709张图片)

图像是图像元灰度值的纪录, 以行列数据矩阵表示, 一般信息量比较大。直接读取图像的信息存入数据库中, 不但增加了数据库的容量, 而且增加了计算机的负担。若直接根据图像的路径名称建立图像地址库, 可有效提高计算机的计算效率。当需要提取图像时, 再根据图像的地址, 对图像进行检索, 平时, 只需对图像的基本信息进行管理。Path.txt导入数据库的结果如图3所示:

图3 图库中每幅图像的路径

 

  1. 图像特征数据库

通过执行各个特征操作类,读取图像、计算图像特征值、特征值入库。生成表如下:

 

图4 颜色特征表

图5 纹理特征表

图6 Hash特征表

图7 形状特征表

2.所采用算法思想

2.1图像预处理

图像去躁——中值滤波

2.2基于颜色图像检索

(1)将图像从RGB颜色空间转至HSI颜色空间;

(2)对HSI模型的三个分量分别求其前三阶中心矩,得到9个特征值。

2.3基于纹理图像检索

(1)图像灰度化Gray=0.30*R+0.59*G+0.11*B;

(2)降低图像灰度等级,把图像256个灰度级按顺序分为8个区间;

(3)然后获得图像 0度,45度,90度,135度四个方向的灰度共生矩阵;

(4)求每个灰度共生矩阵的纹理一致性,纹理对比度,纹理熵;

(5)求每个灰度共生矩阵的四个值的期望和标准差,得到8个特征值。

2.4基于指纹图像检索(phash)

(1)将图像缩小为32*32大小;

(2)对32*32大小图像灰度化Gray=0.30*R+0.59*G+0.11*B;

(3)对32*32大小图像进行离散余弦变换;

计算DCT:对图像进行二维离散余弦变换:

对图像进行二维离散余弦变换(2D-DCT)的步骤

     1.获得图像的二维数据矩阵f(x,y);

     2.求离散余弦变换的系数矩阵A;

     3.求系数矩阵对应的转置矩阵AT;

     4.根据公式F=A[f(x,y)]AT计算离散余弦变换;

(4)用32*32大小图片前面8*8大小图片处理并计算这64个像素的均值;

只保留矩阵左上8*8区域

(5)8*8的像素值中大于均值的用1表示,小于均值的用0表示,得到一个64位二进制码作为该图像的phash值。

2.5基于形状图像检索

算法步骤:

(1)图像灰度化   Gray=0.30*R+0.59*G+0.11*B;

(2)用中值滤波算法对图像进行平滑滤波,用于消除噪声干扰,其中需要用到排序算法,将 3*3 窗口的像素值进行排序取中间值;

(3)用 sobel 算子对图像进行锐化;

Sobel 算子:

X 方向:

Y 方向:

(4)对锐化后的图像用迭代阈值法进行二值化;

①选择一个初始阈值 t1,根据 t1将图像分割为 G1和 G2两部分,G1包含所有小于等于t1的 像素,G2包含所有大于 t1像素; ②分别求出 G1和 G2的平均灰度值 u1和u2;

③计算新的阈值t2=( u1+ u2)/2;

④如果| t1- t2|<=t0(t0为预先指定的很小的正数),即迭代过程中前后两次阈值很接近时, 中止迭代,否则t1= t2,重复上述过程。

(5)计算图像的 Hu 不变矩和离心率作为特征值,并对其进行归一化;

(6)将特征值存如图像特征数据库中。

3.详细实现过程

3.1图像预处理(prepare类)

3.1.1图像去躁——中值滤波

  1. 使用bat文件生成txt文件,存储图像地址;
  2. 读取txt文件中的每条字符串,通过获得的字符串寻找图像地址,遍历每张图片;
  3. 获得图像的RGB值,用一维数组保存;
  4. 获取RGB分量,对每个分量使用统一的3*3模板,遍历像素值;
  5. 用数组保存每次取得的像素值,按从小到大排序,取中间值作为该分量遍历框的中心值;
  6. 给图片设置新的RGB值。
  7. 优点:抑制效果很好,画面的清晰度基本保持;
  8. 缺点:对高斯噪声的抑制效果不是很好

 

3.1.2统一图像尺寸

  1. 为去躁后的每张图片设置统一的尺寸;
  2. 重构图像,并覆盖原来的图像。

 

3.2存储图片路径

连接数据库,将txt文件中的路径导入数据库“image”表,表中包含id,address两列,id递增。

注:检索时通过匹配特征值获取id值,通过id值查询address图片地址,id唯一标识。

 

3.3存储特征值

3.3.1存储颜色特征值

  1. 获得图像的RGB分量,计算HSI分量的值;
  2. 一次循环获得H的一阶中心矩,S、I类似;
  3. 二次循环获得H的二、三阶中心矩,S、I类似;
  4. 保存图像的9个特征值;
  5. 连接数据库,将9个特征值插入数据库“color”表,表中包含id,color1,color2,color3,color4,color5,color6,color7,color8,color9共10列,id递增。

3.3.2存储纹理特征值

(1)图像灰度化Gray=0.30*R+0.59*G+0.11*B;

(2)降低图像灰度等级,把图像256个灰度级按顺序分为8个区间;

(3)然后获得图像0度,45度,90度,135度四个方向的灰度共生矩阵;

(4)求每个灰度共生矩阵的纹理一致性,纹理对比度,纹理熵;

(5)求每个灰度共生矩阵的四个值的期望和标准差,得到8个特征值。

  1. 连接数据库,将8个特征值插入数据库“texture”表,表中包含id,exp1,exp2,exp3,exp4,stadv1,stadv2,stadv3,stadv4共9列,id递增。

3.3.3存储指纹特征值

(1)将图像缩小为32*32大小;

(2)对32*32大小图像灰度化Gray=0.30*R+0.59*G+0.11*B;

(3)对32*32大小图像进行离散余弦变换;

(4)用32*32大小图片前面8*8大小图片处理并计算这64个像素的均值;

(5)8*8的像素值中大于均值的用1表示,小于均值的用0表示,得到一个64位二进制码作为该图像的phash值。

(6)连接数据库,将特征值插入数据库“hash”表,表中包含id,feature两列,id递增。

3.3.4 存储形状特征值

(1)图像灰度化Gray=0.30*R+0.59*G+0.11*B;

(2)灰度图二值化,空白为0,其余为1

(3)计算重心、二阶矩、三阶矩(中心矩),中心矩规范化

(4)计算不变矩

(5)连接数据库,将7个特征值插入数据库“shape”表,表中包含id,shape0,shape1,shape2,shape3,shape4,shape5,shape6共8列,id递增。

3.4检索图片

3.4.1基于颜色检索图片

  1. 点击按钮获得待匹配文件路径;
  2. 根据路径计算对应图片的颜色的9个特征值;
  3. 连接数据库,查询颜色数据库“color”的所有值;
  4. 遍历查询结果,分别获得每行第2~10列的9个特征值并保存;
  5. 将计算得到的9个特征值分别与获得的数据库中每行9个特征值进行匹配(使用余弦定理);
  6. 指定一个序号从1开始,用TreeMap保存该序号与匹配的返回值;
  7. 按TreeMap的Value值从大到小进行排序,取前12个列表序号,保存为id值;
  8. 根据id值查询“image”表得到对应的address路径;
  9. 通过路径弹窗显示对应的图片。

3.4.2基于纹理检索图片

(1)点击按钮获得待匹配文件路径;

(2)根据路径计算对应图片的纹理的8个特征值;

(3)连接数据库,查询纹理数据库“texture”的所有值;

(4)遍历查询结果,分别获得每行第2~9列的8个特征值并保存;

(5)将计算得到的8个特征值分别与获得的数据库中每行8个特征值进行匹配(使用余弦定理);

(6)指定一个序号从1开始,用TreeMap保存该序号与匹配的返回值;

(7)按TreeMap的Value值从大到小进行排序,取前12个列表序号,保存为id值;

(8)根据id值查询“image”表得到对应的address路径;

(9)通过路径弹窗显示对应的图片。

3.4.3基于指纹检索图片

(1)点击按钮获得待匹配文件路径;

(2)根据路径计算对应图片的hash特征值;

(3)连接数据库,查询hash数据库“hash”的所有值;

(4)遍历查询结果,分别获得每行第2列的特征值并保存;

(5)将计算得到的特征值分别与获得的数据库中每行特征值进行匹配(使用汉明距离);

(6)指定一个序号从1开始,用TreeMap保存该序号与匹配的返回值;

(7)按TreeMap的Value值从大到小进行排序,取前12个列表序号,保存为id值;

(8)根据id值查询“image”表得到对应的address路径;

(9)通过路径弹窗显示对应的图片。

3.4.4 基于形状检索图片

(1)点击按钮获得待匹配文件路径;

(2)根据路径计算对应图片的纹理的7个特征值;

(3)连接数据库,查询形状数据库“shape”的所有值;

(4)遍历查询结果,分别获得每行第2~8列的7个特征值并保存;

(5)将计算得到的8个特征值分别与获得的数据库中每行7个特征值进行匹配(使用余弦定理);

(6)指定一个序号从1开始,用TreeMap保存该序号与匹配的返回值;

(7)按TreeMap的Value值从大到小进行排序,取前12个列表序号,保存为id值;

(8)根据id值查询“image”表得到对应的address路径;

(9)通过路径弹窗显示对应的图片。

 

4.实验结果分析

4.1预处理降噪和改变尺寸

    

图7 图像预处理

 

4.2图片检索结果

4.2.1操作界面

初始界面(如图8):

图8 初始界面

 

 

点击浏览后弹窗选择文件(如图9):

图9 选择图片

 

选择文件后,将文件地址显示在Textfield框中,并显示当前图像(如图10):

图10 显示已选路径和图片

 

4.2.2基于颜色检索结果

点击“基于颜色检索”按钮,按相似度从大到小循环显示图片(如图11):

图11 基于颜色检索结果

因为输入图片的颜色较为复杂,因此返回的结果低于预期,但返回的结果集之间差距较小。

4.2.3基于纹理检索结果

点击“基于纹理检索”按钮,按相似度从大到小循环显示图片(如图12):

图12 基于纹理检索结果

结果较为准确,除了极个别的结果明显与输入不符以外,其它结果都较为准确,可以看出基于纹理检索的识别率较高。

4.2.4基于指纹检索结果

点击“基于指纹检索”按钮,按相似度从大到小循环显示图片(如图13):

图13 基于指纹检索结果

结果较为准确,能保证第一个结果准确,但是中间有误差。

4.2.4基于形状检索结果

点击“基于形状检索”按钮,按相似度从大到小循环显示图片(如图14):

图14 基于形状检索结果

除了第一个结果,其它结果并不准确,因此基于该方法有待改善。

 

4.3结果分析

  1. 基于颜色的检索

矩是用来描述随机变量的某些特征的数字,这里分别计算了HSI的前三阶中心矩,用来作为图像像素的特征值。

利用余弦定理计算9个特征值的相似度,对于颜色比较单一的图像更为准确;

  1. 基于纹理的检索

该方法研究了图像纹理中灰度级的空间依赖关系。它对灰度的分布特性是通过对灰度值不同的像素的分布来表示的,所以对那些灰度比较集中,轮廓比较鲜明的图像的识别能力更强。

利用余弦定理计算8个特征值的相似度,准确度比较高。

  1. 基于指纹的检索

它构成了一个64位的整数,就是这张图片的指纹,它主要也是用缩略图搜原图并能达到较好的效果。

利用汉明距离计算hash特征值的相似度,对于轮廓比较鲜明的图像更为准确,      四种图像检索方式中,基于指纹检索的准确性相对最高。

  1. 基于形状的检索

对图像的形状特征提取采用Hu矩表示,其在图像像素数目一定的情况下,具有对图像的旋转、平移和尺度变化的不变性。

5.实训总结和心得

(1)清空数据库表(id重置):

TRUNCATE TABLE table1

(2)求HSI的前三阶中心矩时,变量太多容易弄错;

(3)弄懂图像的灰度共生矩阵相关参数的意义及求法;

(4)掌握phash算法的步骤;

(5)学会java swing的基本页面布局,学会使用监听事件;

(6)学会TreeMap的按值排序算法:

ArrayList<Entry<Integer,Double>>entryArrayList=newArrayList<>(treemap.entrySet());

Collections.sort(entryArrayList, new Comparator<Map.Entry<Integer, Double>>() {

          public int compare(Map.Entry<Integer, Double> o1,Map.Entry<Integer,Double> o2) {return o2.getValue().compareTo(o1.getValue());//按value从大到小排序}});

因为之前已经接触过图像处理方面的知识,所以这次的项目处理起来难度不大,而且了解了更多图像处理的知识,包括图像的预处理及各种图像检索的方法,其中感知哈希方法识别率较高,对于形状比较丰富的图片,形状不变矩法分辨能力较低,Hu不变矩一般用来识别图像中大的物体,对于物体的形状描述得比较好,图像的纹理特征不能太复杂,像识别水果的形状,或者对于车牌中的简单字符的识别效果会相对好一些。

 

github:https://github.com/Gonlandoo/CBIR19

  • 9
    点赞
  • 88
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 基于图像检索的t2o广告服务系统是一个基于人工智能和图像处理技术的广告服务平台。该系统利用图像检索技术,将用户上传的图片与广告库中的图片进行匹配,以提供相关的广告推荐。 该系统的源码包含以下主要功能: 1. 图片上传和处理:用户可以通过上传图片的方式提交查询请求。系统接收到用户上传的图片后,会对图片进行处理和特征提取,以便进行后续的图像检索。 2. 特征提取和特征匹配:系统会利用深度学习算法,对上传的图片进行特征提取。同时,系统会对广告库中的图片同样进行特征提取。接下来,系统会将用户上传的图片特征与广告库中的图片特征进行匹配和相似度计算。 3. 广告推荐:系统根据图像匹配和相似度计算的结果,为用户推荐相关的广告。系统会根据用户上传的图片及其匹配结果,利用推荐算法进行广告排序和个性化推荐。用户可以在页面上看到相应的广告推荐结果。 4. 广告管理和统计:系统还具备广告管理和统计的功能。广告管理员可以在系统中管理广告库,上传、更新和删除广告内容系统也会记录用户的点击和转化数据,以便广告管理员进行广告效果的分析和优化。 通过源码,我们可以深入了解该系统实现细节,包括图像处理的具体算法、特征提取的方法、图像匹配的实现逻辑以及个性化推荐算法的实现等等。同时,也可以根据需要对系统进行自定义和定制,以满足不同的需求和场景。 综上所述,基于图像检索的t2o广告服务系统源码是一个实现图像检索和广告推荐功能的开源项目,通过深入分析源码,我们可以了解其工作原理,并在此基础上进行二次开发和定制化。 ### 回答2: 基于图像检索的t2o广告服务系统源码是一种用于推广和服务于广告行业的软件系统。该系统利用图像检索技术,实现了通过相似度匹配来寻找相应广告的功能。下面是该系统的主要源码组成: 1. 图像处理模块:该模块负责对上传的图片进行预处理和特征提取,以便后续的图像匹配。这一部分的代码主要包括图像特征提取算法的实现,如SIFT、SURF或者深度学习方法。 2. 相似度匹配模块:该模块负责计算目标图片与广告数据库中广告图片的相似度,并返回相似度较高的广告。这一部分的代码主要包括相似度计算算法的实现,如余弦相似度或者结构化相似度算法。 3. 数据库模块:该模块负责存储和管理广告数据库中的广告图片信息。这一部分的代码主要包括数据库的设计和操作,如广告图片的存储和检索。 4. 用户界面模块:该模块负责用户与系统的交互,包括图片上传和显示匹配结果等功能。这一部分的代码主要包括前端界面的设计实现,如HTML、CSS和JavaScript等。 5. 广告展示模块:该模块负责将匹配到的广告展示给用户,实现广告投放的功能。这一部分的代码主要包括广告展示器的设计实现,如将广告图片显示在页面上或者通过API接口传递给其他平台。 上述是基于图像检索的t2o广告服务系统的主要源码组成。通过这些源码的实现,可以实现一个功能完整的t2o广告服务系统,方便广告商和用户之间的交流和推广。 ### 回答3: 基于图像检索的t2o广告服务系统是一个利用图像识别技术对用户上传的图片进行分析和处理,并根据图片内容为用户提供广告推荐的服务系统。以下是该系统的源码相关内容的解释: 1. 数据库设计系统的数据库中应该包括用户信息表、图片信息表和广告信息表。用户信息表存储用户的基本信息和偏好设置,图片信息表记录用户上传的图片的信息,广告信息表存储广告的相关信息。 2. 图像处理:该系统需要使用图像处理算法对用户上传的图片进行处理和分析。可以利用深度学习的卷积神经网络模型进行目标识别和特征提取,以获取图片的主题和内容。 3. 特征提取:使用图像特征提取算法对图片进行特征提取,以便能够进行图像检索。常用的特征提取算法有SIFT、SURF、HOG等,可以根据需求选择合适的算法。 4. 图像检索:使用图像检索算法对用户上传的图片进行搜索,找到与之相似或相关的图片。可以将用户上传的图片的特征向量与数据库中的图片进行对比匹配,选择相似度最高的若干张图片作为搜索结果。 5. 广告推荐:根据用户上传的图片和图像检索的结果,将与图片内容相关的广告信息推荐给用户。可以根据用户的偏好设置和历史浏览记录,选择合适的广告进行推荐。 6. 用户界面设计:该系统还需要设计用户界面,方便用户上传图片、查看搜索结果和接受广告推荐。用户可以通过网页、移动应用等形式使用该系统。 总之,基于图像检索的t2o广告服务系统的源码涉及数据库设计、图像处理算法、特征提取算法、图像检索算法以及用户界面设计等多个方面,需要综合运用不同的技术和算法来实现系统的功能和服务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值