OpenCV易混淆API介绍(一)子矩阵Rect

OpenCV 中Mat图像提取ROI Mat类表示的图像进行ROI操作有两种方法 1. 使用拷贝构造函数Mat(constMat& m, const Rect& roi ),矩形roi指定了兴趣区 Mat src = imread(“xx.jpg”); Mat srcROI( src, Rect(0,0,src.cols/2,src.rows/2)); 2. 使用操作符”()”,即Mat operat... 阅读详情

函数的原型是:

C++: Mat Mat::operator()(const Rect& roi) const  

测试代码如下:

double m[3][3] =   
    { {1, 3, 1},  
      {4 ,8, 7},  
      {6 ,2, 4},  
    };  
    Mat testMat(3,3,CV_64FC1,m);  
    cout << "testMat="<< endl<<testMat<< endl;  
    Mat A=testMat(Rect(0,1,1,2));  
    cout << "A="<<A<< endl;  

运行结果如下图:

可以看出函数Rect的下标从0开始,第一个参数为起始的列,第二个参数为起始的行,第三个参数为子矩阵的列数,第四个参数为子矩阵的行数。
对于这个例子而言,子矩阵A即提取testMat矩阵第一列第二行的一列共两行数据。

OpenCV中Mat矩阵用法详解(包括多通道矩阵创建、矩阵运算等)   在做项目期间,遇到过程序计算耗时长,实时性满足不了需求的问题。通过这一段时间的接触,总结了一些OpenCV中Mat类型的用法。 目录 一、 Mat类型的创建 1.常用的有两种创建方式: 2.多通道矩阵创建: 二、Mat类型赋值和访问 1.单通道矩阵访问: 2.多通道的矩阵访问: 三、矩阵运算 1 基本概念 2 矩阵加减法 3 矩阵乘法 4 矩阵转置 5 求逆矩阵 6... 阅读详情

相关推荐

OpenCV中Mat矩阵类的使用及示例代码

在计算机视觉和图像处理领域中,OpenCV是一个广泛使用的开源计算机视觉库。在OpenCV中,Mat类是一个核心的数据结构,用于表示和操作图像。以上是Mat矩阵类在OpenCV中的基本使用方法和示例代码。通过Mat类,我们可以轻松地创建、访问和操作图像数据。这些功能对于进行图像处理和计算机视觉任务非常有用。要使用Mat类,首先需要创建一个Mat对象来存储图像数据。OpenCV还提供了方便的函数用于从文件中读取图像数据以及将图像数据保存到文件中。创建了Mat对象后,可以通过不同的方法来访问和操作图像数据。

Book_Sea的博客 237

Opencv Mat Rect提取ROI区域/裁剪Mat数据

opencv Mat Rect提取ROI区域/裁剪Mat数据Rect(x,y,width,height) 最近用Rect裁剪Mat数据对其四个参数一直搞得很混乱记录下。 Rect(x,y,width,height) x:左上角的列坐标 y:左上角的行坐标 width:裁剪几列 height:裁剪几行 // test // test float b[4][3] = { {1,2,3},{4,5,6},{7,8,9},{10,11,12} }; Mat a(4, 3, CV_32FC1, b); flo

weixin_40640763的博客 8923

Android OpenCV二维码识别:从原理到工程实践,打造高性能扫码引擎

二维码识别作为移动端计算机视觉的经典应用,其核心在于通过图像处理技术快速定位和解码。原理上,它涉及图像预处理、特征提取和几何校正等环节,技术价值在于实现复杂场景下的鲁棒识别。在工程实践中,结合OpenCV的图像处理能力和ZXing的解码算法,可以构建高效、可定制的解决方案。应用场景广泛,从移动支付到信息核验,都需要快速精准的识别能力。本文聚焦于Android平台,通过OpenCV实现二维码的实时定位与透视校正,并针对性能优化和常见问题提供了实战指南,其中自适应二值化和轮廓查找是提升识别率的关键热词。

weixin_29168813的博客 241

OpenCV参考手册之Mat类详解(三)

Mat::eye 返回一个恒等指定大小和类型矩阵。 C++: static MatExpr Mat::eye(int rows, int cols, inttype) C++: static MatExpr Mat::eye(Size size, int type) 参数 rows –的行数。 cols– 的列数。 size –替代矩阵大小规格Size(cols, rows)的方法。

giantchen 11万+

无人驾驶小车调试笔记(六)-- 车轮校准

简介:小车的动力完全来自于两个电机带动的车轮,在理想状态下,给两个电机同样的驱动参数,两个车轮会以同样的转速带动小车直线行驶,而实际情况是每个电机可能都会有个体差异,也就是说给予同样的驱动参数,表现出的转动速度会有些许不同,两个轮子的差速会导致车辆拐弯,后果就是给了直线行驶的控制命令,但是车走着走着就偏离了原本的方向,所以在开始控制之前,我们需要先平衡两个车轮的转速,保证在同样驱动参数下,两个车轮转速大致相同,也就是可以走直线。 车轮校准分为3步,测试、调整后再测试、保存参...

aibingjin的博客 1820

可变形卷积(Deformable Conv)原理解析与torch代码实现

图6为可变形卷积示意图。图1所示为普通卷积在输入特征图上进行卷积计算的过程,卷积核大小为3*3,在输入特征图尺寸为7*7上进行卷积,将卷积核权重与输入特征图对应位置元素相乘并求和得到输出特征图元素,按一定方式滑动窗口就能计算得到整张输出特征图。图6所示,在input feature map上普通卷积操作对应卷积采样区域是一个卷积核大小的正方形(绿框),而可变形卷积对应的卷积采样区域为一些蓝框表示的点,这就是可变形卷积与普通卷积的区别。先来一张图感受一下,图3为标准卷积与可变形卷积的卷积示例。

panghuzhenbang的博客 5万+

OpenCV中img.total()与img.cols*img.rows的区别与正确使用场景

在计算机视觉和图像处理领域,OpenCV的Mat类作为核心数据结构,其维度与元素总数的理解是基础且关键的技术概念。Mat本质上是一个多维数组容器,其设计不仅支持二维图像,还能处理一维向量、三维体数据等高维数据。total()方法返回所有维度上的元素总数,而cols和rows仅代表前两个维度的尺寸,这一差异在维度超过2时尤为显著。理解这一原理对于编写健壮、通用的代码至关重要,它直接关系到内存访问、循环计算和性能优化。在工程实践中,正确区分二者能有效避免内存越界和逻辑错误,尤其在处理多维数据、使用reshape

weixin_34192816的博客 392

别再手动算临界转速了!用ANSYS Workbench 2023 R2快速搞定转子坎贝尔图(附完整APDL命令流)

本文详细介绍了如何利用ANSYS Workbench 2023 R2快速生成转子坎贝尔图,实现全自动临界转速分析。通过对比传统手动计算与Workbench自动化流程的效率差异,展示了其在旋转机械设计中的革命性优势,包括大幅缩短分析周期、提升精度至98.7%。文章还提供了完整的APDL命令流和实战案例,帮助工程师快速掌握这一高效工具。

weixin_42699679的博客 470

OpenCV(Python 版)

计算机中的图像本质上是由无数像素组成的网格,彩色图像通常通过红(R)、绿(G)、蓝(B)三个独立的颜色通道来记录信息,每个通道都是一个二维数字矩阵,矩阵中的数值代表对应位置像素该颜色的亮度(通常为 0-255),三个通道的数值组合决定了像素最终呈现的颜色,计算机存储的就是这些通道矩阵数据,以及图像的宽、高、通道数等元信息。

qq_32381773的博客 408

set_output_delay的本质

set_output_delay的本质

qq_33300585的博客 3387

关于动态存储器dram中rank,bank,device之间的关系

DEVICE_WIDTH表示设备的带宽(单位bit),每个列(column)包含DEVICE_WIDTH 位(bit),每一行(row)包含NUM_COLS个column。   而每一个bank包含NUM_ROWS个行(row)。所以一个设备(device)的存储容量为PER_DEVICE_STORAGE =NUM_ROWS*NUM_COLS*DEVICE_WIDTH*NUM_BANKS (i

wyj7260的专栏 4729

OpenCV—基本矩阵操作与示例

图像处理中对矩阵的操作非常重要,本文总结了使用OpenCV进行矩阵的创建、初始化以及基本矩阵操作,给出了示例代码。

iracer的博客 11万+

【图形学】Loop细分算法及半边结构实现(C++)

文章目录Loop 细分算法介绍增加新顶点更新旧顶点算法实现半边结构半边结构的表示方法半边结构的构造方法创建所有顶点创建所有面及半边半边结构的使用 Loop 细分 顾名思义,网格细分是将粗糙网格精细化的过程,如下动图。Loop细分是众多网格细分算法的一种,Loop细分仅仅对三角形网格模型有效。值得注意的是,虽然叫Loop细分,但是不能理解为“循环”细分,叫这个名字是因为作者的名字是这个而已。 下面是一个粗糙的兔子模型1000个面,进行3次细分 算法介绍 Loop细分算法主要分两步进行 增加新顶点:增加

wk_119的博客 8066

OpenCV知识点(持续更新)

1、Mat(Rect) 重载与此处: inline Mat Mat::operator()( const Rect& roi ) const { return Mat(*this, roi); } Mat(*this, roi)函数定义: /** @overload @param m Array that (as a whole or partly) is assigned to the constructed matrix. No data is copied by...

WUHAITAO123456789的博客 709

nRF52832——大量数据传输时导致蓝牙断开连接,且无法被搜索到的解决方案(广播参数的设置、程序设计方法)

有时蓝牙通信单次发送数据量较大,且连续发送多次的时候,你会发现蓝牙就会出现异常,可能运行30min,40min,或者1h后,蓝牙就不能传输数据了,且无法被搜索到,用主机扫描蓝牙时可能会提示类似这样的DEBUG信息:bta_gattc_mark_bg_conn unable to find the bg connection mask for bd_addr=xx:xx:xx:xx:xx:xx。

数字世界 万物互联 2004

30天入门 SAP BTP 开发系列之二:了解 SAP BTP Region 的概念,包含账号申请的详细步骤

SAP BTP 的 Region,实际是一组按地理位置划分的、由 SAP 或合作 Hyperscaler 承载的基础设施栈。这些基础设施栈至少包含多可用区网络、对象存储、计算节点及自动化运维等服务。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1456

OpenCV中的提取子矩阵的函数

自从OpenCV开始采用Mat格式,对于矩阵或图像的操作可以说是十分方便的,很多方法跟matlab也很相似。常常用到的一类操作是要提取一个图像或矩阵中的一部分,比如一行、一列、对角线、一个矩形区域等等。 1.【提取单行/列】 使用Mat::row(n)和Mat::col(n)可以直接返回第n行或第n列的矩阵头,这个是O(1)的操作,不会重新分配内存。 2.【提取多行/列】 OpenCV提供

Monologue_的专栏 8044

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

使用OpenCV从一个矩阵提取子矩阵

介绍两个函数:cv::Range()和cv::Rect()

weixin_51995147的博客 1262

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Opencv C++入门学习 二、Mat创建图像(矩阵),获取图像信息,感兴趣区域(Rect)

其中数据类型有很多种,常用的应该有:CV_8U:8位无符号型(0~255),即灰度图像;CV_8UC3:三通道8位无符号型,这里三通道指B(蓝)G(绿)R(红),与matlab中的RGB正好相反。对于灰度图像:可以直接给出初始值,也可以使用Scalar();

CV_X.Wang的博客 927

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

OpenCV:Mat数据类型/16to8bit/RECT/画线填充

Mat类型与数据类型对应关系: Unsigned 8bits uchar 0~255 Mat: CV_8UC1, CV_8UC2, CV_8UC3, CV_8UC4 Signed 8bits char -128~127 Mat: CV_8SC1,CV_8SC2,CV_8SC3,CV_8SC4 Unsigned 16bits ushort 0~65535 Mat: CV_16UC1,CV_16UC2,CV_16UC3,CV_16UC4 Signed 16bits short -32768~32767

己亥谷雨 1509

Opencv C++ 数据类型Mat、Point、Rect、Scalar、RNG

Mat::zeros(image.size,image.type())//创建像素全为0的图像(黑色)image.clone(dst) 或 dst=image.clone()image.copeTo(dst)或dst=image.copeTo()定义一个小数组(例如:创建一个kernel卷积核)用create的方法创建图像。读取图像第一行的像素。对图像数据进行全复制。

weixin_43965740的博客 1713

Opencv之Mat矩阵

对于opencv来说,Mat矩阵是很基础也很重要的数据类型,之前也常常用到,但最近用到的时候,出现一个问题,才意识到之前掌握的知识存在漏洞。 Mat的赋值: 1)以固定大小,固定类型,全0,初始化 Mat fgMask = Mat::zeros(_height,_width, CV_8UC1); 2)将其他Mat的值复制给当前Mat 此类型的赋值,不能直接令两类型相等,此举相当于Ma...

qq_37974957的博客 422

OpenCV C++ 核心模块 Core:Mat、Rect 与数组操作

在计算机视觉领域,OpenCV 是开发者们不可或缺的强大工具。而 OpenCV 的核心模块core,更是整个库的基石,它提供了基本的数据结构和算法,为后续复杂的图像处理与分析奠定了基础。本文将深入探讨core模块中最为关键的几个部分:Mat类、Rect类以及常用数组操作。

2301_76564925的博客 1309

Opencv Mat类成员函数详解

Mat::eye 返回一个恒等指定大小和类型矩阵。 C++: static MatExpr Mat::eye(int rows, int cols, inttype) C++: static MatExpr Mat::eye(Size size, int type) 参数 rows –的行数。 cols– 的列数。 size –替代矩阵大小规格Size(cols, rows)的方法。 type – 创建的矩阵的类型。 该方法返回 Matlab 式恒等矩阵初始值设定项,类似 Mat::zeros()和 Mat

weixin_41082581的博客 1327

openCV任意几何形状感兴趣区域(ROI)提取

图像感兴趣区域(ROI)提取主要使用掩模来进行。掩模是二值图像,感兴趣区域的掩模值设置为255,非感兴趣区域的掩模值为0 获取掩模的方法主要有两种 方法一使用opencv中Mat函数方法,调用Mat(Rect).setTo方法设置掩模 Mat Mat::operator()( const Rect& roi ) const //调用Mat(Rect).setTo方法 mask(rect).setTo(255); 方法二在全为0的原始掩模中画一个封闭区域,使用漫水填充算法填充封闭区..

youandme520的专栏 3102
上一篇: OpenCV Error: Assertion failed (size.width>0 && size.height>0) in cv::imshow
下一篇: csdn如何转载别人的文章
upDiff
博客等级 码龄14年 2083粉丝 335原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

upDiff

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值