OpenCV中关于二维仿射变换函数estimateAffinePartial2D的源码分析
二维仿射变换及其接口
关于二维仿射变化的介绍:https://www.cnblogs.com/yinheyi/p/6148886.html
OpenCV3.4.1
中提供的接口为:estimateAffinePartial2D(),用于计算两个2D点集之间具有4个自由度的最优有限仿射变换。
其函数具体实现位于:./opencv/sources/modules/calib3d/src/ptsetreg.cpp
函数原型:
cv::Mat cv::estimateAffinePartial2D (InputArray from,InputArray to,OutputArray inliers = noArray(),int method = RANSAC,double ransacReprojThreshold = 3,size_t maxIters = 2000,double confidence = 0.99,size_t refineIters = 10
)
函数具体实现:
Mat estimateAffinePartial2D(InputArray _from, InputArray _to, OutputArray _inliers,const int method, const double ransacReprojThreshold,const size_t maxIters, const double confidence,const size_t refineIters)
{Mat from = _from.getMat(), to = _to.getMat();const int count = from.checkVector(2);bool result = false;Mat H;CV_Assert( count >= 0 && to.checkVector(2) == count );if (from.type() != CV_32FC2 || to.type() != CV_32FC2){Mat tmp1, tmp2;from.convertTo(tmp1, CV_32FC2);from = tmp1;to.convertTo(tmp2, CV_32FC2);to = tmp2;}else{// avoid changing of inputs in compressElems() callfrom = from.clone();to = to.clone();}// convert to N x 1 vectorsfrom = from.reshape(2, count);to = to.reshape(2, count);Mat inliers;if(_inliers.needed()){_inliers.create(count, 1, CV_8U, -1, true);inliers = _inliers.getMat();}// run robust estimationPtr<PointSetRegistrator::Callback> cb = makePtr<AffinePartial2DEstimatorCallback>();if( method == RANSAC )result = createRANSACPointSetRegistrator(cb, 2, ransacReprojThreshold, confidence, static_cast<int>(maxIters))->run(from, to, H, inliers);else if( method == LMEDS )result = createLMeDSPointSetRegistrator(cb, 2, confidence, static_cast<int>(maxIters))->run(from, to, H, inliers);elseCV_Error(Error::StsBadArg, "Unknown or unsupported robust estimation method");if(result && count > 2 && refineIters){// reorder to start with inlierscompressElems(from.ptr<Point2f>(), inliers.ptr<uchar>(), 1, count);int inliers_count = compressElems(to.ptr<Point2f>(), inliers.ptr<uchar>(), 1, count);if(inliers_count > 0){Mat src = from.rowRange(0, inliers_count);Mat dst = to.rowRange(0, inliers_count);// H is// a -b tx// b a ty// Hvec model for LevMarq is// (a, b, tx, ty)double *Hptr = H.ptr<double>();double Hvec_buf[4] = {Hptr[0], Hptr[3], Hptr[2], Hptr[5]};Mat Hvec (4, 1, CV_64F, Hvec_buf);createLMSolver(makePtr<AffinePartial2DRefineCallback>(src, dst), static_cast<int>(refineIters))->run(Hvec);// update H with refined parametersHptr[0] = Hptr[4] = Hvec_buf[0];Hptr[1] = -Hvec_buf[1];Hptr[2] = Hvec_buf[2];Hptr[3] = Hvec_buf[1];Hptr[5] = Hvec_buf[3];}}if (!result){H.release();if(_inliers.needed()){inliers = Mat::zeros(count, 1, CV_8U);inliers.copyTo(_inliers);}}return H;
}
代码分析
数据准备工作
- 先看第一段程序,将函数接收的参数
_from
与_to
变为Mat
数据类型
Mat from = _from.getMat(), to = _to.getMat();
const int count = from.checkVector(2);
bool result = false;
Mat H;CV_Assert( count >= 0 && to.checkVector(2) == count );
checkVector():返回符合要求的矩阵中的元素个数
int cv::Mat::checkVector( int elemChannels,int depth = -1,bool requireContinuous = true
)const
参数
- elemChannels:矩阵应具有的通道数或列数。对于二维矩阵,当矩阵只有1列时,它应该有elemChannels通道;当矩阵只有1个通道时,它应该有elemChannels列。对于三维矩阵,它应该只有一个通道。此外,如果平面的数目不是一,则每个平面内的行数必须是1;如果每个平面内的行数不是1,则平面数必须是1。
- depth:矩阵应有的深度
返回值:如果不满足要求,则为-1。否则,它将返回矩阵中元素的数量。注意,一个元素可以有多个通道。
- 第二段程序则是负责将
from
与to
的矩阵类型变为CV_32FC2
if (from.type() != CV_32FC2 || to.type() != CV_32FC2)
{Mat tmp1, tmp2;from.convertTo(tmp1, CV_32FC2);from = tmp1;to.convertTo(tmp2, CV_32FC2);to = tmp2;
}
else
{// avoid changing of inputs in compressElems() callfrom = from.clone();to = to.clone();
}
- 接下来这一段有注释:转成N×1N\times1N×1的向量
// convert to N x 1 vectors
from = from.reshape(2, count);
to = to.reshape(2, count);
reshape()函数原型
Mat cv::Mat::reshape( int cn,int rows = 0
)const
具体实现为:
Mat Mat::reshape(int new_cn, int new_rows) const
{int cn = channels();Mat hdr = *this;if( dims > 2 ){if( new_rows == 0 && new_cn != 0 && size[dims-1]*cn % new_cn == 0 ){hdr.flags = (hdr.flags & ~CV_MAT_CN_MASK) | ((new_cn-1) << CV_CN_SHIFT);hdr.step[dims-1] = CV_ELEM_SIZE(hdr.flags);hdr.size[dims-1] = hdr.size[dims-1]*cn / new_cn;return hdr;}if( new_rows > 0 ){int sz[] = { new_rows, (int)(total()/new_rows) };return reshape(new_cn, 2, sz);}}CV_Assert( dims <= 2 );if( new_cn == 0 )new_cn = cn;int total_width = cols * cn;if( (new_cn > total_width || total_width % new_cn != 0) && new_rows == 0 )new_rows = rows * total_width / new_cn;if( new_rows != 0 && new_rows != rows ){int total_size = total_width * rows;if( !isContinuous() )CV_Error( CV_BadStep,"The matrix is not continuous, thus its number of rows can not be changed" );if( (unsigned)new_rows > (unsigned)total_size )CV_Error( CV_StsOutOfRange, "Bad new number of rows" );total_width = total_size / new_rows;if( total_width * new_rows != total_size )CV_Error( CV_StsBadArg, "The total number of matrix elements ""is not divisible by the new number of rows" );hdr.rows = new_rows;hdr.step[0] = total_width * elemSize1();}int new_width = total_width / new_cn;if( new_width * new_cn != total_width )CV_Error( CV_BadNumChannels,"The total width is not divisible by the new number of channels" );hdr.cols = new_width;hdr.flags = (hdr.flags & ~CV_MAT_CN_MASK) | ((new_cn-1) << CV_CN_SHIFT);hdr.step[1] = CV_ELEM_SIZE(hdr.flags);return hdr;
}
- 以下代码自然是创建内点矩阵
Mat inliers;
if(_inliers.needed())
{_inliers.create(count, 1, CV_8U, -1, true);inliers = _inliers.getMat();
}
运行RANSAC算法
- 然后注意到下面这一行代码,创建了一个智能指针
cb
。
Ptr<PointSetRegistrator::Callback> cb = makePtr<AffinePartial2DEstimatorCallback>();
这一行有点麻烦,接下来追根溯源一下,这一行代码中涉及两个类型:PointSetRegistrator::Callback
、AffinePartial2DEstimatorCallback
。其中,PointSetRegistrator
是一个继承自Algorithm
的虚基类,定义在/opencv/sources/modules/calib3d/src/precomp.hpp
中。
class CV_EXPORTS PointSetRegistrator : public Algorithm
{
public:class CV_EXPORTS Callback{public:virtual ~Callback() {}virtual int runKernel(InputArray m1, InputArray m2, OutputArray model) const = 0;virtual void computeError(InputArray m1, InputArray m2, InputArray model, OutputArray err) const = 0;virtual bool checkSubset(InputArray, InputArray, int) const { return true; }};virtual void setCallback(const Ptr<PointSetRegistrator::Callback>& cb) = 0;virtual bool run(InputArray m1, InputArray m2, OutputArray model, OutputArray mask) const = 0;
};
而AffinePartial2DEstimatorCallback
类继承自Affine2DEstimatorCallback
,具体实现如下
/** Compute* x c -s X t1* = * +* y s c Y t2** - every element in _m1 contains (X,Y), which are called source points* - every element in _m2 contains (x,y), which are called destination points* - _model is of size 2x3, which contains* c -s t1* s c t2*/
class AffinePartial2DEstimatorCallback : public Affine2DEstimatorCallback
{
public:int runKernel( InputArray _m1, InputArray _m2, OutputArray _model ) const CV_OVERRIDE{Mat m1 = _m1.getMat(), m2 = _m2.getMat();const Point2f* from = m1.ptr<Point2f>();const Point2f* to = m2.ptr<Point2f>();_model.create(2, 3, CV_64F);Mat M_mat = _model.getMat();double *M = M_mat.ptr<double>();// we need only 2 points to estimate transformdouble x1 = from[0].x;double y1 = from[0].y;double x2 = from[1].x;double y2 = from[1].y;double X1 = to[0].x;double Y1 = to[0].y;double X2 = to[1].x;double Y2 = to[1].y;/*we are solving AS = B| x1 -y1 1 0 || y1 x1 0 1 |A = | x2 -y2 1 0 || y2 x2 0 1 |B = (X1, Y1, X2, Y2).t()we solve that analytically*/double d = 1./((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2));// solution vectordouble S0 = d * ( (X1-X2)*(x1-x2) + (Y1-Y2)*(y1-y2) );double S1 = d * ( (Y1-Y2)*(x1-x2) - (X1-X2)*(y1-y2) );double S2 = d * ( (Y1-Y2)*(x1*y2 - x2*y1) - (X1*y2 - X2*y1)*(y1-y2) - (X1*x2 - X2*x1)*(x1-x2) );double S3 = d * (-(X1-X2)*(x1*y2 - x2*y1) - (Y1*x2 - Y2*x1)*(x1-x2) - (Y1*y2 - Y2*y1)*(y1-y2) );// set model, rotation part is antisymmetricM[0] = M[4] = S0;M[1] = -S1;M[2] = S2;M[3] = S1;M[5] = S3;return 1;}
};
AffinePartial2DEstimatorCallback
的父类Affine2DEstimatorCallback
继承自PointSetRegistrator::Callback
,具体实现如下。
/** Compute* x a b X c* = * +* y d e Y f** - every element in _m1 contains (X,Y), which are called source points* - every element in _m2 contains (x,y), which are called destination points* - _model is of size 2x3, which contains* a b c* d e f*/
class Affine2DEstimatorCallback : public PointSetRegistrator::Callback
{
public:int runKernel( InputArray _m1, InputArray _m2, OutputArray _model ) const CV_OVERRIDE{Mat m1 = _m1.getMat(), m2 = _m2.getMat();const Point2f* from = m1.ptr<Point2f>();const Point2f* to = m2.ptr<Point2f>();_model.create(2, 3, CV_64F);Mat M_mat = _model.getMat();double *M = M_mat.ptr<double>();// we need 3 points to estimate affine transformdouble x1 = from[0].x;double y1 = from[0].y;double x2 = from[1].x;double y2 = from[1].y;double x3 = from[2].x;double y3 = from[2].y;double X1 = to[0].x;double Y1 = to[0].y;double X2 = to[1].x;double Y2 = to[1].y;double X3 = to[2].x;double Y3 = to[2].y;/*We want to solve AX = B| x1 y1 1 0 0 0 || 0 0 0 x1 y1 1 || x2 y2 1 0 0 0 |A = | 0 0 0 x2 y2 1 || x3 y3 1 0 0 0 || 0 0 0 x3 y3 1 |B = (X1, Y1, X2, Y2, X3, Y3).t()X = (a, b, c, d, e, f).t()As the estimate of (a, b, c) only depends on the Xi, and (d, e, f) onlydepends on the Yi, we do the *trick* to solve each one analytically.| X1 | | x1 y1 1 | | a || X2 | = | x2 y2 1 | * | b || X3 | | x3 y3 1 | | c || Y1 | | x1 y1 1 | | d || Y2 | = | x2 y2 1 | * | e || Y3 | | x3 y3 1 | | f |*/double d = 1. / ( x1*(y2-y3) + x2*(y3-y1) + x3*(y1-y2) );M[0] = d * ( X1*(y2-y3) + X2*(y3-y1) + X3*(y1-y2) );M[1] = d * ( X1*(x3-x2) + X2*(x1-x3) + X3*(x2-x1) );M[2] = d * ( X1*(x2*y3 - x3*y2) + X2*(x3*y1 - x1*y3) + X3*(x1*y2 - x2*y1) );M[3] = d * ( Y1*(y2-y3) + Y2*(y3-y1) + Y3*(y1-y2) );M[4] = d * ( Y1*(x3-x2) + Y2*(x1-x3) + Y3*(x2-x1) );M[5] = d * ( Y1*(x2*y3 - x3*y2) + Y2*(x3*y1 - x1*y3) + Y3*(x1*y2 - x2*y1) );return 1;}void computeError( InputArray _m1, InputArray _m2, InputArray _model, OutputArray _err ) const CV_OVERRIDE{Mat m1 = _m1.getMat(), m2 = _m2.getMat(), model = _model.getMat();const Point2f* from = m1.ptr<Point2f>();const Point2f* to = m2.ptr<Point2f>();const double* F = model.ptr<double>();int count = m1.checkVector(2);CV_Assert( count > 0 );_err.create(count, 1, CV_32F);Mat err = _err.getMat();float* errptr = err.ptr<float>();// transform matrix to floatsfloat F0 = (float)F[0], F1 = (float)F[1], F2 = (float)F[2];float F3 = (float)F[3], F4 = (float)F[4], F5 = (float)F[5];for(int i = 0; i < count; i++ ){const Point2f& f = from[i];const Point2f& t = to[i];float a = F0*f.x + F1*f.y + F2 - t.x;float b = F3*f.x + F4*f.y + F5 - t.y;errptr[i] = a*a + b*b;}}bool checkSubset( InputArray _ms1, InputArray _ms2, int count ) const CV_OVERRIDE{Mat ms1 = _ms1.getMat();Mat ms2 = _ms2.getMat();// check collinearity and also check that points are too closereturn !haveCollinearPoints(ms1, count) && !haveCollinearPoints(ms2, count);}
};
因此,原来AffinePartial2DEstimatorCallback
也是自PointSetRegistrator::Callback
的子类派生而来的。
makePtr()
template<typename T>
Ptr<T> makePtr()
{return Ptr<T>(new T());
}
Ptr:智能指针类型
template<typename _Tp >
using cv::Ptr = typedef std::shared_ptr<_Tp>
- 智能指针
cb
会作为参数传入函数createRANSACPointSetRegistrator
中,即若是以RANSAC
算法解算变换矩阵,则进入代码。这一行会将所有的数据全部代入,包括:cb
、ransacReprojThreshold
、confidence
、maxIters
、from
、to
、H
、inliers
。
result = createRANSACPointSetRegistrator(cb, 2, ransacReprojThreshold, confidence, static_cast<int>(maxIters))->run(from, to, H, inliers);
首先通过createRANSACPointSetRegistrator创建一个RANSAC
点集的注册器,其本质就是创建一个指向RANSACPointSetRegistrator
的匿名指针。
Ptr<PointSetRegistrator> createRANSACPointSetRegistrator(const Ptr<PointSetRegistrator::Callback>& _cb,int _modelPoints, double _threshold,double _confidence, int _maxIters)
{return Ptr<PointSetRegistrator>(new RANSACPointSetRegistrator(_cb, _modelPoints, _threshold, _confidence, _maxIters));
}
终于到了重要的一个类实现:RANSACPointSetRegistrator
,而RANSACPointSetRegistrator
正是继承自PointSetRegistrator
class RANSACPointSetRegistrator : public PointSetRegistrator
{
public:RANSACPointSetRegistrator(const Ptr<PointSetRegistrator::Callback>& _cb=Ptr<PointSetRegistrator::Callback>(),int _modelPoints=0, double _threshold=0, double _confidence=0.99, int _maxIters=1000): cb(_cb), modelPoints(_modelPoints), threshold(_threshold), confidence(_confidence), maxIters(_maxIters) {}int findInliers( const Mat& m1, const Mat& m2, const Mat& model, Mat& err, Mat& mask, double thresh ) const{cb->computeError( m1, m2, model, err );mask.create(err.size(), CV_8U);CV_Assert( err.isContinuous() && err.type() == CV_32F && mask.isContinuous() && mask.type() == CV_8U);const float* errptr = err.ptr<float>();uchar* maskptr = mask.ptr<uchar>();float t = (float)(thresh*thresh);int i, n = (int)err.total(), nz = 0;for( i = 0; i < n; i++ ){int f = errptr[i] <= t;maskptr[i] = (uchar)f;nz += f;}return nz;}bool getSubset( const Mat& m1, const Mat& m2, Mat& ms1, Mat& ms2, RNG& rng, int maxAttempts=1000 ) const{cv::AutoBuffer<int> _idx(modelPoints);int* idx = _idx.data();const int d1 = m1.channels() > 1 ? m1.channels() : m1.cols;const int d2 = m2.channels() > 1 ? m2.channels() : m2.cols;int esz1 = (int)m1.elemSize1() * d1;int esz2 = (int)m2.elemSize1() * d2;CV_Assert((esz1 % sizeof(int)) == 0 && (esz2 % sizeof(int)) == 0);esz1 /= sizeof(int);esz2 /= sizeof(int);const int count = m1.checkVector(d1);const int count2 = m2.checkVector(d2);CV_Assert(count >= modelPoints && count == count2);const int *m1ptr = m1.ptr<int>();const int *m2ptr = m2.ptr<int>();ms1.create(modelPoints, 1, CV_MAKETYPE(m1.depth(), d1));ms2.create(modelPoints, 1, CV_MAKETYPE(m2.depth(), d2));int *ms1ptr = ms1.ptr<int>();int *ms2ptr = ms2.ptr<int>();for( int iters = 0; iters < maxAttempts; ++iters ){int i;for( i = 0; i < modelPoints; ++i ){int idx_i;for ( idx_i = rng.uniform(0, count);std::find(idx, idx + i, idx_i) != idx + i;idx_i = rng.uniform(0, count) ){}idx[i] = idx_i;for( int k = 0; k < esz1; ++k )ms1ptr[i*esz1 + k] = m1ptr[idx_i*esz1 + k];for( int k = 0; k < esz2; ++k )ms2ptr[i*esz2 + k] = m2ptr[idx_i*esz2 + k];}if( cb->checkSubset(ms1, ms2, i) )return true;}return false;}bool run(InputArray _m1, InputArray _m2, OutputArray _model, OutputArray _mask) const CV_OVERRIDE{bool result = false;Mat m1 = _m1.getMat(), m2 = _m2.getMat();Mat err, mask, model, bestModel, ms1, ms2;int iter, niters = MAX(maxIters, 1);int d1 = m1.channels() > 1 ? m1.channels() : m1.cols;int d2 = m2.channels() > 1 ? m2.channels() : m2.cols;int count = m1.checkVector(d1), count2 = m2.checkVector(d2), maxGoodCount = 0;RNG rng((uint64)-1);CV_Assert( cb );CV_Assert( confidence > 0 && confidence < 1 );CV_Assert( count >= 0 && count2 == count );if( count < modelPoints )return false;Mat bestMask0, bestMask;if( _mask.needed() ){_mask.create(count, 1, CV_8U, -1, true);bestMask0 = bestMask = _mask.getMat();CV_Assert( (bestMask.cols == 1 || bestMask.rows == 1) && (int)bestMask.total() == count );}else{bestMask.create(count, 1, CV_8U);bestMask0 = bestMask;}if( count == modelPoints ){if( cb->runKernel(m1, m2, bestModel) <= 0 )return false;bestModel.copyTo(_model);bestMask.setTo(Scalar::all(1));return true;}for( iter = 0; iter < niters; iter++ ){int i, nmodels;if( count > modelPoints ){bool found = getSubset( m1, m2, ms1, ms2, rng, 10000 );if( !found ){if( iter == 0 )return false;break;}}nmodels = cb->runKernel( ms1, ms2, model );if( nmodels <= 0 )continue;CV_Assert( model.rows % nmodels == 0 );Size modelSize(model.cols, model.rows/nmodels);for( i = 0; i < nmodels; i++ ){Mat model_i = model.rowRange( i*modelSize.height, (i+1)*modelSize.height );int goodCount = findInliers( m1, m2, model_i, err, mask, threshold );if( goodCount > MAX(maxGoodCount, modelPoints-1) ){std::swap(mask, bestMask);model_i.copyTo(bestModel);maxGoodCount = goodCount;niters = RANSACUpdateNumIters( confidence, (double)(count - goodCount)/count, modelPoints, niters );}}}if( maxGoodCount > 0 ){if( bestMask.data != bestMask0.data ){if( bestMask.size() == bestMask0.size() )bestMask.copyTo(bestMask0);elsetranspose(bestMask, bestMask0);}bestModel.copyTo(_model);result = true;}else_model.release();return result;}void setCallback(const Ptr<PointSetRegistrator::Callback>& _cb) CV_OVERRIDE { cb = _cb; }Ptr<PointSetRegistrator::Callback> cb;int modelPoints;double threshold;double confidence;int maxIters;
};
因此,最终是通过RANSACPointSetRegistrator
类指针调用run
方法,从而筛选出数据的内点。而我们需要学习的正是这个run
方法,揭开它神秘的面纱。
bool run(InputArray _m1, InputArray _m2, OutputArray _model, OutputArray _mask) const CV_OVERRIDE
首先分析一下参数,_m1
是from
,_m2
是to
,也就是求解from
到to
的变换矩阵,_model
为变换矩阵H
,_mask
为内点inliers
(1)数据准备
bool result = false;
Mat m1 = _m1.getMat(), m2 = _m2.getMat();
Mat err, mask, model, bestModel, ms1, ms2;int iter, niters = MAX(maxIters, 1);
int d1 = m1.channels() > 1 ? m1.channels() : m1.cols;
int d2 = m2.channels() > 1 ? m2.channels() : m2.cols;
int count = m1.checkVector(d1), count2 = m2.checkVector(d2), maxGoodCount = 0;RNG rng((uint64)-1);CV_Assert( cb );
CV_Assert( confidence > 0 && confidence < 1 );CV_Assert( count >= 0 && count2 == count );
if( count < modelPoints )return false;Mat bestMask0, bestMask;if( _mask.needed() )
{_mask.create(count, 1, CV_8U, -1, true);bestMask0 = bestMask = _mask.getMat();CV_Assert( (bestMask.cols == 1 || bestMask.rows == 1) && (int)bestMask.total() == count );
}
else
{bestMask.create(count, 1, CV_8U);bestMask0 = bestMask;
}
(2)count
等于modelPoints
,直接通过cb
调用runKernel
。
if( count == modelPoints )
{if( cb->runKernel(m1, m2, bestModel) <= 0 )return false;bestModel.copyTo(_model);bestMask.setTo(Scalar::all(1));return true;
}
(3)迭代计算
for( iter = 0; iter < niters; iter++ )
{int i, nmodels;if( count > modelPoints ){bool found = getSubset( m1, m2, ms1, ms2, rng, 10000 );if( !found ){if( iter == 0 )return false;break;}}nmodels = cb->runKernel( ms1, ms2, model );if( nmodels <= 0 )continue;CV_Assert( model.rows % nmodels == 0 );Size modelSize(model.cols, model.rows/nmodels);for( i = 0; i < nmodels; i++ ){Mat model_i = model.rowRange( i*modelSize.height, (i+1)*modelSize.height );int goodCount = findInliers( m1, m2, model_i, err, mask, threshold );if( goodCount > MAX(maxGoodCount, modelPoints-1) ){std::swap(mask, bestMask);model_i.copyTo(bestModel);maxGoodCount = goodCount;niters = RANSACUpdateNumIters( confidence, (double)(count - goodCount)/count, modelPoints, niters );}}
}
根据内点计算变换矩阵
- 再回到最初的
estimateAffinePartial2D
函数中,会发现后续正是利用内点来计算二维仿射变换矩阵。即如下代码
if(result && count > 2 && refineIters)
{// reorder to start with inlierscompressElems(from.ptr<Point2f>(), inliers.ptr<uchar>(), 1, count);int inliers_count = compressElems(to.ptr<Point2f>(), inliers.ptr<uchar>(), 1, count);if(inliers_count > 0){Mat src = from.rowRange(0, inliers_count);Mat dst = to.rowRange(0, inliers_count);// H is// a -b tx// b a ty// Hvec model for LevMarq is// (a, b, tx, ty)double *Hptr = H.ptr<double>();double Hvec_buf[4] = {Hptr[0], Hptr[3], Hptr[2], Hptr[5]};Mat Hvec (4, 1, CV_64F, Hvec_buf);createLMSolver(makePtr<AffinePartial2DRefineCallback>(src, dst), static_cast<int>(refineIters))->run(Hvec);// update H with refined parametersHptr[0] = Hptr[4] = Hvec_buf[0];Hptr[1] = -Hvec_buf[1];Hptr[2] = Hvec_buf[2];Hptr[3] = Hvec_buf[1];Hptr[5] = Hvec_buf[3];}
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.exyb.cn/news/show-4497356.html
如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!移动设备App测试总结
本文是移动设备App测试的总结,好在工作中测试有个参考。 一、测试需要覆盖的方面 服务器接口测试 UI测试 UI测试的目标是确保用户界面会通过测试对象的功能来为用户提供相应的访问或浏览功能。确保用户界面符合公司或行业的标准。包括用户友好性、人性化、易操作…...

1108 String复读机 (20 分)
给定一个长度不超过 104 的、仅由英文字母构成的字符串。请将字符重新调整顺序,按 StringString.... (注意区分大小写)这样的顺序输出,并忽略其它字符。当然,六种字符的个数不一定是一样多的,若某种字符已经…...

罗切斯特大学将研究未来执行军事任务的量子计算
罗切斯特大学的专家将开发受量子启发的求解器系统,以解决军事任务中的实际问题。 美国军事研究人员需要使用量子启发求解器系统的量子计算技术,将高性能计算性能提高至少两个数量级的新方法。于是,他们从纽约的罗切斯特大学找到了解决方案。美…...

复读机相加
...

华为mt2l01 android5.1,华为 MT2_5.1.1 ROM 刷机包 电信Flyme 5.1.5.27R自用稳定
ROM介绍解决了移植分辨率问题完美适配mate2解决了图标只显示四分之一问题解决了Flyme5开机动画对720P屏幕匹配不好的问题解决充电过程中操作不灵敏问题集成完整的root权限修复xposed框架问题完美兼容开启系统硬件加速提高系统滑动响应减少拨号后出现的延时绝对精简删除所有无用…...

android+rom+bootloader+flash,【教程】Nexus、Pixel手机解锁bootloader+刷TWRP Recovery + 刷机(含修改ROM boot.img) + RO
一、Nexus 解锁bootloader当 DEVICE STATE - 显示 “locked” 说明 bootloader已锁,需要解锁才能刷机解锁步骤如下:1、打开手机 设置-关于手机-点击版本号N次,以打开“开发者选项”2、返回上一步,开发者选项-打开USB 调试…...

ENC数据解密
ENC数据解密 1. ENC的定义 ENC字面含义是电子航海图(Electronic Navigational Charts),特指由国家海道测量机构或国家海道测量机构授权的公司或机构按国际海道测量组织(International Hydrographic Organization,IHO)颁布的《数…...

CentOS7安装Docker最新版本
Linux安装Docker 1.环境查看2. 安装 2.1 卸载旧版本2.2 设置存储库2.3 安装最新版本Docker引擎和容器2.4 安装指定版本 3.启动Docker4. 验证5.卸载6.配置阿里云镜像加速器7. 设置Docker默认存储目录 Linux 版本: CentOS 7.9 Docker指定版版或最新版本 参考官网: https://docs.…...

android path 合并_Android合并布局
{"optioninfo":{"dynamic":"true","static":"true"},"simplifiedDisplay":"newSimpleInfoCard","newCard":[],"card":[],"search":[],"infoCard":[{"ba...

如何使用计算机来线性拟合,实验数据的线性拟合及计算机处理.pdf
维普资讯第 3O卷第 1期 武 汉 工 程 大 学 学 报 VoI_30 NO.12008年 O1月 J. Wuhan Inst. Tech. Jan. 2008文章编号:l004—4736(2008)0l—O117一O3实验数据的线性拟合及计算机处理何菊明,王 芙(…...

基于Androidstudio的宠物交友app
需求信息: 客户端: 1:登录注册:用户可以通过自己的信息进行账号的注册 2:宠物信息:列表显示发布的宠物想,可以通过条件对宠物信息进行筛选,以及沟通意向点亮 3:宠物圈&am…...

java log4j扩展_扩充Log4j日志级别的方法
我们的项目需要记不同类型,不同格式,不同级别的日志。一般来说很容易想到Log4j,的确用它来写日志很方便,但是我们的项目对日志的需求有一点超出了它本身的处理能力:log4j只有debug,info,warn,error四种级别定义&#x…...

gff3转mysql_PASA的使用
前文讲述了:PASA的安装,配置与主程序使用参数。本文则重点讲述PASA的几种平行的用法:最简单地理解PASA的用法:PASA是通过调用 blat 或 gsnap 来将 transcripts sequences 比对到 genome 上,从而进行基因的结构注释(gff…...

什么是libtorch:
已知 以往的深度学习是以python作为编程语言; 但它的深度学习训练以C后端为基础(这些C后端提供了 诸如 Tensor 这种class ; CUDA优化方法 ; Auto Differentiation 等等 ) libtorch就是直接以这些C后端作为基础,使得…...

python进阶练习之——复读机相加
题目 求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制。程序分析 用字符串解决。a=input...

1108. String复读机(20分)
给定一个长度不超过 104 的、仅由英文字母构成的字符串。请将字符重新调整顺序,按 StringString.... (注意区分大小写)这样的顺序输出,并忽略其它字符。当然,六种字符的个数不一定是一样多的,若某种字符已经…...

RC、DC、PrimeTime等综合时序工具保存session的办法
rc保存sessionpt保存sessiondc保存session 保存session的意义,是为了对综合或者时序分析环境保存下来,方便进一步的分析,特别是report命令的执行。 因为综合、时序分析的过程,耗时很长,所以这个方法,用于综…...

自己写一个数据库连接工具类
最近刚复习了一下JDBC相关的知识,这里来写一个mysql数据库连接工具类来练习一下。 在jdbc连接数据库时,Connection对象是非常稀有的资源,用完后必须马上释放,如果Connection不能及时、正确的关闭,极易导致系统宕机。C…...

Monkey命令
Monkey介绍 Monkey就是猴子,Monkey测试,就像一只猴子,在电脑面前,乱敲键盘测试。。 Monkey程序模拟用户触摸屏幕,滑动Trackball、按键等操作来对设备上的程序进行压力测试,检测程序多久的时间会发生异常 …...
小米MIX线刷兼救砖_解账户锁_纯净刷机包_教程
确保你的手机已经解BL锁了,如果没有解BL锁的话 查看教程 手机先关机,并且手机先不要用数据线连接电脑,先断开数据线。 一:下载刷机包并解压 点击下载 二:打开rom文件夹里找到《Fastboot刷机工具.exe》直接双击打开开运…...

腾讯实习面试经验 客户端开发岗位
4月14日,我只是在官网填了一下个人信息,还没有上传简历,当晚就给我打过电话来问我是否还在考虑实习,要不要来面试。总体来说节奏紧凑,三轮技术面一轮hr面在3天内面完并确认。 一面 似乎是普通员工来面的,…...

多屏系统拼接通用方法探究
最近在项目中需要用WinForm程序发送串口命令控制多个显示屏的拼接和视频信号的切换。显示屏控制可以使用厂家软件,但由于和控制视频信号切换的矩阵不是一个厂家,所以用户要求单独编写一个程序同时对矩阵和显示屏进行控制。矩阵厂家提供了二次开发文档&am…...

Qt——定时器QTimer
目录 一.定时事件timerEvent 二.QTimer对象 QTimer是qt中的单次和重复定时器。 其主要有两种定时方式,一种是定时事件,一种是通过信号与槽。 一.定时事件timerEvent 在需要定时器的类中使用startTimer(x)进行定时设置和启动。 int id startTimer(x…...

1108 String复读机(JAVA)
给定一个长度不超过 104 的、仅由英文字母构成的字符串。请将字符重新调整顺序,按 StringString.... (注意区分大小写)这样的顺序输出,并忽略其它字符。当然,六种字符的个数不一定是一样多的,若某种字符已经…...

接入友盟厂商push通道遇到的坑
目录 调试友盟Push问题的检查清单 客户端、服务端数据协议 客户端接入方式 小米厂商通道 华为厂商通道 魅族厂商通道 VIVO厂商通道 OPPO厂商通道 支持桌面角标的厂商 吐槽一下集成友盟厂商通道时发现的问题 调试友盟Push问题的检查清单 过滤UmengPushAgent开头的日志…...

一篇看懂图像分类基础知识
作者:LSC 来源:投稿 编辑:学姐 基础知识 1. 具体领域划分 (1)多类别图像分类 (2)细粒度图像分类 (3)多标签图像分类 (4)弱监督与无监督图像分类 (5)零样本图像分类 2.图像分类问题的3层境界 多类别图像分类在不同物种的层次上识别&…...

360手机刷机:360N6pro刷机
360手机刷机:360N6pro刷机 360手机刷机: N5、N5S、N6、N6Lite、N6PRO、N7、N7Lite、N7PRO、Q5、Q5Plus 【前言】 以下,为摘录整合记录,仅供参考;不管何种刷机,须提前数据备份;目前360手机,官…...

QQ复读机java脚本怎么用_求大神指教 应用转生的QQ复读机 可以复制名片数据代码不知道怎么改 在线等大神 挺急的...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼{ "styleId":22, "bgId":3807, "cardId":3807, "renderInfo":{ "bg":[ { "type":"image_view", "scale_type":"center_crop", "…...

c语言刷题
求方程5X-4Y2,在|X|<100,|Y|<50内的整数解中|X||Y|最大值。 答案为(86) #include<stdio.h>> main() { int a,b,max0,s0; for(a-100;a<100;a) for(b-50;b<50;b)if(a((4*b)2)/5.0){if(a<0)a-a;if(b<0)b-b; sab; if(…...

代码编写过程 - 正确率折线图
获取绘图函数 首先,看到需要画acc和loss图。先去参考现成的,于是打开猫12分类,找到生成折线图的地方。 发现框内的两个函数绘制了折线图。既然是作为函数出现,说明已经有一定的封装,考虑能不能把整个函数搬走用。 由…...

光电效应测普朗克常数实验,科大奥瑞平台计算Python程序
# 利用最小二乘法Xi, Yi, XX, YY, XY 0, 0, 0, 0, 0for i in range(0, int(N)):Xi x[i]Yi y[i]XX x[i]*x[i]YY y[i]*y[i]XY x[i]*y[i]a (Yi*Xi - N*XY)/(Xi*Xi - N*XX)b (Yi - a*Xi)/Nr abs(Yi*Xi/N-XY)/math.sqrt((XX-Xi*Xi/N)*(YY-Yi*Yi/N)) # 进行绘制图像 mpl.rc…...

rhel5安装kvm
环境:CPU:Intel core2 E6750,内存:2G 安装过程: 1.安装rhel5.1 x64版本,安装时选择所有开发相关内容; 2.升级内核到当时最新版本(从 [urlhttp://www.kernel.org]www.kernel.org[/url] 下载2.6.25.7,目的是为了更好支持kvm),升级过程如下: a.下载解压缩 b.# make mrproper c.# m…...

个人项目总结(wepy)
事件冒泡 e.target.dataset获取的是一个对象,如果我们要获取index索引需要:Object.values(e.target.dataset)微信小程序需要通过this.setData({msg:})来动态改变data,如果需要改变的data是一个数组的其中一项,需要:th…...

量子力学与量子计算(1)——热辐射与普朗克能量子假设
热辐射:任何温度下,宏观物体都要向外辐射电磁波;电磁波能量的多少,以及电磁波按波长的分布都与温度有关。这种由物体温度决定的电磁辐射称为热辐射。 理论和实验表明:物体辐射电磁波的同时,也吸收电磁波&a…...
R︱mlr包挑选最适机器学习模型+变量评估与选择(案例详解)
一、R语言的mlr packages选择最适机器学习模型install.packages("mlr")之后就可以看到R里面有哪些机器学习算法、在哪个包里面。a<-listLearners()这个包是听CDA网络课程《R语言与机器学习实战》余文华老师所述,感觉很棒,有待以后深入探讨。…...

复读机(二)
题目描述 输入一个正整数 nn 。 编写程序,利用循环语句,重复输出 nn 行 TDOG 输入格式 一行一个整数 nn 输出格式 nn 行 TDOG 样例数据 样例输入#1 3样例输出#1 TDOG TDOG TDOG样例输出#2 7样例输出#2 TDOG TDOG TDOG TDOG TDOG TDOG TDOG数…...

实践 | 基于卷积神经网络实现美食分类 |图像分类
文章目录前言数据集加载一、数据准备二、模型配置三、实例化&模型训练四、模型评估前言 如何根据据图像的视觉内容为图像赋予一个语义类别是图像分类的目标,也是图像检索、图像内容分析和目标识别等问题的基础。 本实践旨在理解和掌握如何使用飞桨动态图搭建一…...

浙大计算机科学基础题型,浙江大学2019年《计算机学科专业基础》(878)考试大纲...
浙江大学2019年考研大纲已发布,报考浙江大学的考生要认真看大纲。9月15日统考新大纲即将公布,新东方在线名师将及时为大家解读大纲,洞悉增改考点,《2019考研大纲变动对比手册》,参与活动瓜分百万许愿豪礼。2019年浙江大…...

1.CTF-Web
使用的MP,MK编辑器 网络安全好不好 要看linux牛不牛 大部分平台都在linux上 C java python需要有点基础,没有基础不建议报班 CTF-Web web漏洞挖掘与利用 基础划分 java web --->web漏洞挖掘 web服务器安全检测 web代码审计 web常见漏洞 web的补丁方法…...

记录一次调试支付宝支付报错 cURL error 60: SSL certificate problem: unable to get local issuer certificate
1,报错原因:因为没有配置信任的服务器HTTPS验证。默认情况下,cURL被设为不信任任何CAs,因此浏览器无法通过HTTPs访问你服务器。 2、 解决方法:① 进入https://curl.se/docs/caextract.html, *注意:双引号要…...

2018年浙江网新恒天软件公司秋季校招宣讲会个人经历总结(测试岗-应届生)
笔者是一名**大学的大四学生,有幸在前几天收到浙江网新恒天的OFFER,投递得是软件测试一岗。说起面试经历,现在想起仍感觉这是自己是比较幸运的一次经历,用我那位带我一同参加宣讲会的室友的话说,就是“无心插柳柳成荫”…...

【DevOps】(五)Jenkins构建给企业微信推送消息
第一步:企业微信添加群机器人 获取webhook地址 https://qyapi.weixin.qq.com/cgi-bin/webhook/send?keyc81c32131fefewfsefesfs jenkins插件 全局配置 任务配置 开始通知...

2.1.3 毫米波雷达
更多内容,请关注: github:Autopilot-Updating-Notes gitee: Autopilot-Updating-Notes 毫米波雷达(RADAR),和激光雷达的原理类似,是工作在毫米波波段(millimeter wave ÿ…...

e-32是c语言中的指数嘛,求物理中的常数,比如Na.c.e.k常数,应该有三十二个谢谢回答...
真空中的光速:c2.99792458*10^8m/s真空磁导率:μ12.566370614*10^(-7)N/A^2[或H/m](即4π*10^(-7))真空电容率:ε1/(μc^2)8.854187817*10^(-12)A*s/(V*m)[或F/m]普朗克常数:h6.6260755*10^(-34)J*s4.1356692*10^(-15)eV*s约化普朗…...

复读机复读机复读机复读机
新闻事业:一切新闻机构及其各项业余活动的总称 六种新闻制服理论(都是政治层面来说) 集权主义理论自由主义理论社会责任论民主参与论党报理论发展新闻学 传媒角色: 监测(传播信息,发布信息)促…...

纯电动汽车各零部件建模机理及BMS、再生制动和电机驱动扭矩策略,逻辑清晰公式明晰
纯电动汽车各零部件建模机理及BMS、再生制动和电机驱动扭矩策略,逻辑清晰公式明晰。 主要从前向和后向仿真两大类分别阐述建模机理和控制策略。 前向模型主要参考Cruise建模及相关文献,后向模型主要参考ADVISOR建模且对其自带的纯电动汽车模型进行注释分…...

PyType_Type和PyBaseObject_Type
PyType_Type和PyBaseObject_Type一. 类型的类型—PyType_Tpye二. 类型之基—PyBaseObject_TypePyObject和PyTypeObject内容的最后指出下图中对实例对象和类型对象的理解是不完全正确的, 浮点类型对象全局唯一,Python在C语言层面实现过程中将其定义为一个…...

头歌实训项目【复读机的毁灭】
#include <iostream> using namespace std;class Repeater {//复读机基类的声明 public:virtual void Play();virtual ~Repeater(){cout << "砰!" << endl;}}; //复读机基类的定义 void Repeater::Play() {}class ForRepeater : public…...

360手机刷机:360N6lite刷机
360手机刷机:360N6lite刷机 360手机刷机: N5、N5S、N6、N6Lite、N6PRO、N7、N7Lite、N7PRO、Q5、Q5Plus 【前言】 以下,为摘录整合记录,仅供参考;不管何种刷机,须提前数据备份;目前360手机,官…...

如何修改MySQL监听IP地址
Mysql默认在本地环路地址127.0.0.1的3306端口监听,要使用其它IP地址需要修改配置文件。 1.编辑 vi /etc/mysql/mysql.conf.d/mysqld.cnf (ubuntu mysql5.7 默认配置文件位置) 在[mysqld]节中增加下面一行: bind-address0.0.0.0 #全部地址或者指定的i…...

同为PM,项目经理和产品经理那个才是未来的CEO?【大海午餐9】
项目经理VS产品经理谁才是未来的CEO 产品岗位基本就是CEO的学前班? 从实践上看,随着移动互联网的兴起,产品岗位基本就是CEO的学前班,这个定位是来自于众多的明星产品和创始人的光环,你能说的出来的优秀产品࿰…...

Python上传文件到百度网盘(一)
前言 最近由于突发奇想要下载某网站电影,当然资源也是爬来的,然后是一堆M3u8格式的URL,为了保证防止资源后续失效的情况,打算先下载下来,然后加密压缩(~。~你懂的)&…...

高级PHP工程师
高级PHP工程师所要具备的特性,仅供大家参考。 1、经常阅读手册,常用的函数基本都熟悉,比如:时间函数,数组函数,文件函数,MySQL函数,GD库,session。环境的独立安装&#x…...

复读机(100)
文章目录分析代码分析 输入两个整数n和a 在n的for循环中,如果i1对a取余为零,那么输出gugugu,否则输出输入的字符串。 代码 #include<stdio.h> #include<iostream> #include<bits/stdc.h> using namespace std;int main(…...

[NPUCTF2020]Mersenne twister 已知明文推测随机数seed
from hashlib import * from itertools import * from binascii import hexlify , unhexlifyflag"npuctf{123456789012345678}" seed73991 assert len(flag) 26 assert flag[:7] npuctf{ assert flag[-1] }XOR lambda s1 ,s2 : bytes([x1 ^ x2 for x1 ,x2 in zi...

双绞线的种类和用途
双绞线的英文名字叫Twist-Pair。是综合布线工程中最常用的一种传输介质。 双绞线采用了一对互相绝缘的金属导线互相绞合的方式来抵御一部分外界电磁波干扰。把两根绝缘的铜导线按一定密度互相绞在一起,可以降低信号干扰的程度,每一根导线在传输中辐射的电…...

初级算法之链表
剑指 Offer 18. 删除链表的节点 给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。 返回删除后的链表的头节点。 思路: 对链表进行遍历,遇到要删除的结点就可以用percur;curcur.next;来进行删除,per.nextper.next.next; /*** Definition f…...

关于找工作,说点对后人有用的话(内附机器学习算法岗面经)
作者:理性思考 链接:https://www.nowcoder.com/discuss/123128?typepost&ordertime&pos&page4&channel1009&source_idsearch_post 来源:牛客网 0、写在前面 大家好,相信大家对于我这个ID并不陌生了&#x…...

2月15日工作记录
* * 2014-02-15 14:59:01.750 (SQLCLUSTER\clusteradmin) * 2014-02-15 14:59:01.750 [INFO] [CConnPointEnum::HrAddConnection] punk 0x10ab60 added to the connection point enumerator. (hr00000000) 2014-02-15 14:59:01.750 [INFO] [CConnPointEnum::HrAddConnection]...

Python爬虫(二)--获取页面元素的href属性
网页中单一类型数据的全部信息: 网页由多种元素组成,一个元素可能有多个属性,例如class,id,name,text,href,value等,本文以提取网页所有超链接信息为实例。相关步骤可参考Python爬虫(一) from bs4 import…...

诸曼华中职计算机vb程序设计教学策略研究,中职学校编程语言教学的实施策略.doc...
中职学校编程语言教学的实施策略精品论文 参考文献中职学校编程语言教学的实施策略郑 晴 辽宁省鞍山市广播电视学校 114200 编写程序是学习计算机很重要的一部分,但对于中等职业学校计算机专业的学生来讲,由于编程语言具有抽象化、模块化、推理能力很…...

[半监督学习] AggMatch: Aggregating Pseudo Labels for Semi-Supervised Learning
受立体匹配(Stereo Matching)中代价聚合(cost aggregation)和 Transformers 中 self-attention 的启发, 提出一个聚合模块, 它通过考虑实例之间的相似性来聚合标记和未标记数据的初始伪标签. 为了扩大当前 mini-batch 之外的聚合候选数据, 利用一个队列来记录训练期间上个 batc…...

VB和COM的宝书
VB和COM的宝书关键字:Advanced Visual Basic、VB、COM、高级、书评难度:高级 Matthew Curland的《Advanced Visual Basic》,一本不折不扣的VB宝书。一个星期前我终于收到从 上海新风雨网络书城(http://www.cnforyou.comÿ…...

多线程学习系列二(使用System.Threading)
一、什么是System.Threading.Thread?如何使用System.Threading.Thread进行异步操作 System.Threading.Thread:操作系统实现线程并提供各种非托管API来创建和管理线程,CLR封装这些非托管线程,在托管代码中通过System.Threading.Th…...

【转】VB和COM的宝书
Matthew Curland的《Advanced Visual Basic》,一本不折不扣的VB宝书。一个星期前我终于收到从 上海新风雨网络书城(http://www.cnforyou.com)邮购的这本书的中译本《高级Viusual Basic编程》。 中国电力出版社2001年5月出版,时隔近…...

数模论文
小区开放对道路通行的影响 摘要 本文首先对小区开放的评价指标进行了研究,开放小区可由路网的负荷度,排队长度,道路通行能力,流量通行能力比率 ,控制延误,空间伸缩指数等分析指标来判断。在规定范围内可以…...

.NET本质论 方法
方法和JIT编译 CLR只执行本机的机器代码.如果一个方法体由CIL组成,那么它就必须在调用之前被转换为本机的机器码(将MSIL编译为本机代码,运行库提供了两种方式.一种就是在安装与部署时的预编译(由NGEN.EXE和MSCORPE.DLL产生).另一种就是用实时(JIT)编译器动态地将其转换为本机代…...

JUC面试(一)——JUCJMMvolatile 1.0
JUC&JMM JMM JUC(java.util.concurrent) 进程和线程 进程:后台运行的程序(我们打开的一个软件,就是进程),资源分配单位线程:轻量级的进程,并且一个进程包含多个线程…...

【.Net实用方法总结】 整理并总结System.IO中Path类及其方法介绍
🐋作者简介:博主是一位.Net开发者,同时也是RPA和低代码平台的践行者。 🐬个人主页:会敲键盘的肘子 🐰系列专栏:.Net实用方法总结 🦀专栏简介:博主针对.Net开发和C站问答过…...

5.Django路由path和re_path详解
假设现在有个需求: 需要通过URL进行参数传递,我们该怎么做呢? 其中有个方法就是本文要讲的内容——path和进阶版的re_path。 urls.py文件中的path和re_path 1.path的基本规则: path(test/<xx>/,views.test)第一个参数——test/<xx>/:使用尖括号…...

Android开发之Path详解
目录一、xxxTo方法1、lineTo(float x, float y)2、moveTo(float x, float y)3、arcTo3.1、arcTo(RectF oval, float startAngle, float sweepAngle)3.2、arcTo(RectF oval, float startAngle, float sweepAngle,boolean forceMoveTo)3.3、arcTo(float left, float top, float r…...

node之Path介绍
path 为 Node.js 常用的内置 npm 模块,主要为了更加方便的处理文件与目录路径,通常可通过 const path require(path) 引用。 Windows vs. POSIX POSIX 称之为可移植操作系统接口(Portable Operating System Interface of UINX,…...
【Uipath杂谈】用Datatable处理数据(二)
在上一篇博客中,我花费了很大的力气去提取一个excel表中的数据,可能很多人不明白我为什么要做这件事 上次的实践结果: 但其实这只是第一步,最终我是需要根据这个数据得到下面的结果 Uipath绝对不是简单的提取数据,而是…...

Ubuntu 更改环境变量 PATH
1、什么是环境变量(PATH) 在Linux中,在执行命令时,系统会按照PATH的设置,去每个PATH定义的路径下搜索执行文件,先搜索到的文件先执行。 我们知道查阅文件属性的指令ls 完整文件名为:/bin/ls(这是绝对路径),…...

204:vue+openlayers 学习Attribution各种API,示例展示自定义版权信息
第204个 点击查看专栏目录 本示例的目的是介绍如何在vue+openlayers项目中个性化修改版权信息,这里主要涉及到Attribution各种属性的设置,所以这里先列出属性的信息,然后用示例来展示如何使用。 名称类型说明classNamestring (默认为“ol-attribution”)CSS 类名。targetH…...
Cookie中path总结
一、Cookie中的path cookie中的path是cookie生效的范围,一般场景下cookie是服务器返回给客户端的一段数据,并且在该cookie的作用域内,每次请求都会在请求头中自动带上该cookie。而path就是这个cookie的作用域范围。 /fileUp/userLogin下创建…...

vscode 增加includepath
方法一: 按下ctrlshift p打开命令,搜索下面关键字 c/c edit configration 修改下面includepath栏, 按上面的说明提示修改 "configurations": [ { "name": "Win32", "includePath": [ "${…...
自定义View中Canvas之Path的详解
上一篇Canvas的绘制图形只能绘制一些常规的,比如点、线、圆、椭圆、矩形等的。如果想要绘制更复杂的图形,那么就得靠Path了。 Path的定义: Path类将多种符合路径(多个轮廓,如直线段、二次曲线、立方曲线等)…...

linux中PATH环境变量的作用和使用方法
关于PATH的作用: PATH说简单点就是一个字符串变量,当输入命令的时候LINUX会去查找PATH里面记录的路径。比如在根目录/下可以输入命令ls,在/usr目录下也可以输入ls,但其实ls这个命令根本不在这个两个目录下,事实上当你输入命令的时候LINUX会去…...

奔向光明阿波罗(5)
目录 1.创始人的技术信仰 2.技术优势奠定的品牌基因 3.躬身入局的品牌传播者 4.下半场的艰难曙光 5.对现状和未来的思考 对现状和未来的思考 经公开资料整理分析,目前,社会需求正在促使自动驾驶在多场景开花结果,在全球主要国家的战略规划下…...

c语言贪吃蛇作业报告,贪吃蛇设计报告
北京工业大学耿丹学院c语言设计课程报告课程设计名称:高级语言程序设计专业班级:计算机科学与技术1姓名:吴双学号:1508092012016年4月24日一设计题目………………………………………………………………二总体设计………………………...

Android/Linux 子系统Graphics图形栈入门普法介绍
Android/Linux 子系统Graphics图形栈入门普法介绍 写在最前面 由于工作原因,最近在公司做了一个关于Android/Linux 子系统Graphics图形栈入门相关知识的培训介绍,个人感觉对于想要了解入门这块的朋友还是有一定帮助的。由于博客不能直接放入pptÿ…...

组织行为学笔记:第十三章 技术与人
一、技术的效用 技术的性质 技术的三个特征: 专门性:专业化,分工明细 整体性:将过细的分工回归成整体 变革性:技术的变革接着带来社会的变革,新的管理方法,奖酬指导等 技术与教育 现代社会…...

组织行为学对项目管理的意义(2):人格的大五模型 .
人格可以理解为情绪,思维方式,习惯的复合体,具体左右一个人对周围人事所作出的反应。 在组织行为学里有好多对人格特质进行描述的模型,其中比较有名的一个是大五模型(五维度人格模型)。 在大五模型里用五个…...

中国大学MOOC消费者行为学考试题库(含答案)
选择题(搜题答案解析在优题宝) 1、下列有关消费者行为研究的行为主义范式的说法,正确的有(C) A、强调消费行为的主观性和象征性 B、强调消费者行为的理性. C、其价值在于可以改变或维持消费者行为 D、其价值在于可以洞察、理解消费者行为…...

大工17秋《计算机文化基础》在线测试1,大工17秋《组织行为学》在线测试1答案...
大工17秋《组织行为学》在线测试1一、单选题:1.根据气质的分类,较适合做推销工作的人员的气质类型是( )。 (满分:3)A.胆汁质B.多血质C.抑郁质D.黏液质正确答案:[hide]——B——[/hide]2.组织行为学在中观层面所要研究的主要内容是( )。 (满分:3)A.个体心…...

组织行为学笔记:第六章 组织气氛与行为模式
一、组织气氛 组织气氛就是组织内部一般的人际环境,他萦绕在组织之中,影响着组织内发生的每一件事物,同时组织内出现的任何事物几乎对气氛发生影响。 有的组织热闹喧嚣,效率很高,有的自在休闲,有的富有人…...

组织行为学笔记:第十二章 组织结构和组织设计
一、古典组织理论 任何一个单位都要处理诸如权力,责任,分工,专业化以及各部分之间相互依存,相互联系等基本要素。 工作分工 部门领导把自己单位的工作分成不同层次与职能,然后把人员,资源分配到划分成不…...

组织行为学笔记:第十一章 组织培育和组织训练
组织培育是一种着眼于提高整个组织素质,运用团体活动的程序,以实现预期变革的干涉战略。 组织培育要求改善信仰,态度,观念,结构和实际行动,从而使组织能够更好地选择技术,跟上改革的步伐。 组…...

组织行为学笔记:第七章 领导与监督
一、领导的性质 领导是管理的组成部分,但不是管理的全部。管理者需要计划,组织,指挥,协调,控制,而领导者则是能够影响别人追随自己。 一个强有力的领导者,可能是一个软弱无能的管理者ÿ…...

中国人民大学李育辉_《组织行为学》_10. 模块导论:为什么团队一定需要领导力?
10. 模块导论:为什么团队一定需要领导力? 1.这个模块,叫做“领导团队”,为什么要用这个词呢? 《任天堂哲学》作者:商业记者井上理,采访的人:任天堂总裁宫本茂 许多老师讲领导力的时候…...

组织行为学笔记:第三章 激励机制
激励模式: 人的某些功能不需要激励就能完成,但是几乎所有自觉的行为无不来自激励或动机。管理的职责就在于识别,促发雇员的动机,使之导向任务的完成。 动机表现为人的需要,这种需要是个人的,内在的&#…...

算法记录Day49|leetcode121. 买卖股票的最佳时机 、122.买卖股票的最佳时机II
一、leetcode121. 买卖股票的最佳时机 1.题目描述: 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算…...

组织行为学笔记:第十四章 工作生活质量
一、对生活质量的理解 高度专业化的传统工作设计确曾为社会带来效益,其弊端在于以付出极大的人的精神损耗为代价。 各类组织在关心技术成果的同时,日益注意到人性方面的效果。 工作生活质量的基本目的就是造就一种不仅对生产,而且对人来说…...

组织行为学(学习笔记)
大五人格模型 情绪稳定性外倾性经验开发放性随和性责任心...

从计算机应用基础中学到了什么,计算机应用基础教学心得体会.docx
计算机应用基础教学心得体会《计算机应用基础》教学心得体会《计算机应用基础》教学心得体会 近年来,我国职业中学发展很快,而学生生源质量一直没有明显提高,学生的学习态度不端正、自我控制能力不强是大部分职业中学学生存在的问题。学生…...

小学计算机科学教案,小学信息技术教案三篇
【导语】教学是一种创造性劳动。写一份优秀教案是设计者教育思想、智慧、动机、经验、个性和教学艺术性的综合体现。无忧考网准备了以下教案,希望对你有帮助!《玩“纸牌”游戏——初步认识软件》认知目标:1、具体认识计算机的硬件和软件2、掌握游戏软件的…...

ESP-IDF:企业链表例程,实现初始化,插入,打印等功能。
例程: 简单地写一下企业链表,实现初始化,插入,打印等功能。 /企业链表/ typedef struct LINKNODE09 { // 定义节点 LINKNODE09 *next; } linknode09; // 定义表头 typedef struct LINKLIST09 { // 定义表头 linknode09 head; in…...

甘教课标版小学生计算机课,测评:《第6课 制作简单的表格教案》小学信息技术甘教课标版五年级上册教案4696(2)...
5.如果应改变表格的长度跟高度,则把鼠标移到表格的竖线和横线上,当鼠标变成“‖”和“”时,按住滑鼠左键,拖动鼠标,即可拖动半径和高度。 6.在表格中输入火车时刻表。师:下面我们在表…...

初三计算机考试2021,2021年初三信息技术教学计划
作为初三信息技术教师,要引导学生正确地认识到信息技术对社会发展、科学进步、日常生活与学习的影响,养成利用信息技术促进学习和改善生活的意识和态度。下面是学习啦小编整理的2021年初三信息技术教学计划,希望对大家有所帮助!2021年初三信息…...

小学计算机教案怎么写,小学信息技术四年级教学计划范文
四年级学生对学习计算机有一定的基础,而信息技术教师的教学任务是努力让每个学生都能学到知识,提高计算机的应用能力,为下阶段的计算机学习打下较扎实的基础。下面是学习啦小编整理的小学信息技术四年级教学计划范文,希望对大家有…...

五年级计算机课程内容,五年级信息技术教学计划
五年级信息技术教学计划有条件的学生家中有电脑,对计算机的知识已经有了一些了解,操作较熟练,但是大部分学生刚开始接触计算机,纯粹是上课时间学习,课后就没有巩固的机会。下面是五年级信息技术教学计划,欢…...
你用过的每款APP都具有这一特点,但你却不知道……
全文共4225字,预计学习时长13分钟图源:Unsplash现代人离不开手机。每天清晨,当我睡眼惺忪的醒来,便开始点击手机,关闭嗡嗡作响的闹钟提示音。我的闹钟是我以前喜欢的一首歌,但现在却十分讨厌,因…...
高效方法 | Jupyter Notebook 比你想象中的还要强大
欢迎关注天善智能,我们是专注于商业智能BI,人工智能AI,大数据分析与挖掘领域的垂直社区,学习,问答、求职一站式搞定! 对商业智能BI、大数据分析挖掘、机器学习,python,R等数据领域感…...
危机过后,「表格文档协同」需要具备什么能力?
2003 年被称为中国协同办公的元年。因为“非典”的影响,各企事业单位要求在家办公,这直接催生了视频会议和互联网的发展,造就了互联网的黄金十年。 但当年的危机结束之后,协同办公 Saas 类软件产品并未迎来长远的发展,…...
【数据追梦人】毕业6年自学代码,2周面试30家企业,1年376张报表,选择决定人生!
起初看到“数据追梦人”活动时候,我就在不理解数据和追梦有什么关系,数据不就是简单的从抽取、清洗、分析、报表、可视化等处理过程吗?然后我就草草关闭了页面继续了我的工作。周末在家中休息时,刷抖音看到一个衡水中学学霸饱含激…...

用计算机处理表格说课稿,信息技术《表格的编辑与格式化》说课稿
信息技术《表格的编辑与格式化》说课稿我说课的内容是高教版《计算机应用基础》3.5.2表格的编辑与格式化。现就教材、教法、学法及教学过程进行分析说明。一、教材分析:表格的编辑与格式化这一内容是在学生学会了如何创建规范表格的前提下进行学习的。学好这部分内容…...

计算机上网题通讯录小组,计算机兴趣小组计划、教案 总结.doc
计算机兴趣小组计划、教案 总结计算机社团活动计划 教案 总结新的一学期开始了,在中小学信息技术学习中涌现出许多学生计算机爱好者,这些学生不满足课堂所学,对计算机的许多专业知识和应用技术(尤其是电子游戏)表现出浓厚的兴趣。为了对这些学…...

C# 实现 qq 微信 旺旺 qq群消息群发,同步聊天记录课程
转载于:https://www.cnblogs.com/code68/p/11015342.html...

淘宝群发思路
<a href"wangwang:SendIM?ilovebbq88&uid_tilovebbq88&Message123">淘宝旺旺</a> 1向系统发送该连接 2激或旺旺,打开消息输入窗口 3使用FindWindowEx函数来找到这个窗口 4找到输入消息的控件(复制剪贴板里的消息至该控件) 5模拟…...

C# WebQQ协议群发机器人(二)
本文出处http://blog.csdn.net/zhujunxxxxx/ 如需转载请注明出处! 接着上一篇http://blog.csdn.net/zhujunxxxxx/article/details/38931287我讲的内容 假设有人须要源代码能够联系我 qq: 10588690。可是不是无偿提供,请大家理解。 上面实现的都是与群操作…...

张一鸣10年面试过2000人:混得好的年轻人都有这 5 种特质!
张一鸣算是 80 后中绝对的佼佼者。 1983年出生的张一鸣 ,在2005年从南开大学毕业后,至今参与创办了 5 家公司,2013年,他先后入选《福布斯》“中国30位30岁以下的创业者”和《财富》“中国40位40岁以下的商业精英”,是目…...

Spring Boot(五十三):SpringBoot Actuator之实现
1 场景介绍 对于一个大型的几十个、几百个微服务构成的微服务架构系统,在线上时通常会遇到下面一些问题,比如: 1. 如何知道哪些服务除了问题,如何快速定位? (健康状况) 2. 如何统一监控各个微服务的性能指标…...

杜拉拉升职记经典语录
杜拉拉升职记经典语录 1、真正的外企,富高科技含量的500强跨国企业,不需要背《陋室铭》,更不会有性骚扰,而且老板肯定很忙,没有兴趣让我伺候他吹牛两小时,就算老板吹牛吧,一定也吹得非常…...

敏捷开发:做一个合格的Scrum Master
转载:http://www.jianshu.com/p/72a5c42cec8b 在Scrum敏捷开发中有三种主要的角色:Product Owner(产品负责人,简称"PO"); Scrum Master(敏捷教练); Team(团队)…...

python与数据挖掘张良均实验答案3.5_Python与数据挖掘/大数据技术丛书:张良均//杨海宏//何子健//杨坦//杨征等 : 电子电脑 :计算机技术
导语内容提要随着云时代的来临,大数据技术将具有越来越重要的战略意义。作为数据存储和挖掘分析的前沿技术,大数据分析已广泛应用于各行业及业务职能领域,尤其是物联网、云计算、移动互联网等战略性新兴产业,帮助企业用户在合理时…...

python语言在实践中的应用有科学计算_Python程序设计与科学计算:尹永学//黄海涛 : 电子电脑 :计算机技术 :程序与语言
导语内容提要本书由高校教师与算法工程师合zuo编写,兼顾理论与实践,层次脉络清晰,循序渐进地展开各个知识点,适合教学与自学。本书除了介绍Python程序设计方法与Python科学计算的工具包以外,还给出了数学建模的实战案例…...

perform a synchronous read request on this thread.
// regain critsec to replace on done list { CAutoLock l(&m_csLists); PutDoneItem(preq); if(--m_cItemsOut 0) { if(m_bWaiting) m_evAllDone.Set(); } } } } // the...

cass等距离等分线段的命令键_教你用CAD将线段等分,弧线也可定距等分!
定距等分的命令是:MEASURE ,快捷键是 me。定数等分的命令是:DIVIDE.,快捷键是 div。注意了,命令不分大小写。如下图,是一根长为300mm 的线段,弧线也可以哦~!选择“格式”——“点样式…...

【迁移学习(Transfer L)全面指南】方差、协方差和Pearson相关系数的关系
方差用于反应数据的离散程度,期望用于反应数据的聚合情况。 协方差用于反映两个维度之间的数据偏离期望值的相关性,若同时偏离,即为正相关,数据上现象为:(某维度偏离点-均值)*(另一维度-均值)>0,同时也…...

基于opencv的边缘检测方法
1、梯度运算 用OpenCV的形态变换( 膨胀、腐蚀、开运算和闭运算)函数morphologyEx 梯度运算即膨胀结果-腐蚀结果: 【注意】对于二值图像来说,必须是前景图像为白色,背景为黑色,否则需要进行反二值化处理 …...

RocketMQ支持哪几种类型的消息
一.普通消息 对于普通消息,RocketMQ提供了三种发送方式:同步发送,可靠异步发送和单项发送。 1.同步发送 可靠同步发送指消息发送方发送数据后,在收到接收方的响应后才会发送下一个消息。 2.异步发送 可靠异步发送指发送方发出消息后,不等待接收方响应,接着发送下一个…...

ElasticSearch - SpringBoot整合ES之指定搜索结果返回的字段
文章目录1. 数据准备2. ElasticSearch 搜索结果返回指定的字段3. SpringBoot整合ES 搜索结果返回指定的字段4. 源码接口Elasticsearch的搜索结果可以通过以下参数进行控制:from:指定搜索结果的起始位置,默认为0。 size:指定返回的…...

arcpy基础篇(5)-使用栅格数据
栅格数据是一个独特的空间数据类型。ArcPy中有一个名为arcpy.sa的空间分析模块,该模块将地图代数全部整合到Python环境中,从而提高了脚本运行效率 1.列出栅格要素 ListRaster函数是以Python列表的形式返回工作空间中的栅格要素,该函数语法如…...

2023最全最牛的Jmeter接口测试教程及接口测试详情,你不知道的东西太多了!
下边是详细的jmeter接口测试入门到精通的详细教程,还有视频版本教您实战操作! 2023年B站最新Jmeter接口测试实战教程,精通接口自动化测试只需要这一套视频_哔哩哔哩_bilibili2023年B站最新Jmeter接口测试实战教程,精通接口自动化…...

redis 存储一个map 怎么让map中其中一个值设置过期时间,而不是过期掉整个map?
文章目录 redis 存储一个map 怎么让map中其中一个值设置过期时间,而不是过期掉整个map?Java 中 怎么 实现?方案一: Jedis方案二: Lettuce方案三: Redisson方案四: Jedisson方案五: RedisTemplate那种方式 效率最高 ?拓展:结语redis 存储一个map 怎么让map中其中一个值设置过…...

10、CLASSIFIER-FREE DIFFUSION GUIDANCE
简介 论文:https://arxiv.org/pdf/2207.12598.pdf 分类器指导将扩散模型的得分估计与图像分类器的梯度相结合,因此需要训练与扩散模型分开的图像分类器。 实验证明,在没有分类器的情况下,指导确实可以由纯生成模型执行 在无分…...

软件测试金三银四快速入职之如何解决HR已读不会的问题?
目录 前言 一、简历到面试分两个阶段 二、重视简历 三、简历优化 四、工作经历 五、项目经验 六、自我评价荣誉, 前言 金三银四现在正是很多人在面试找工作的时候,很多人在面试的时候都会遇到Hr已读不会的问题。今天就主要来讲一下如何解决下面几个问题&…...

开发人员项目开发的步骤
开发人员项目开发的步骤 前言 项目开发目的分析与确定 在开发商将开发项目确定下来之后,需要与需求方进行讨论,确定需求方对于软件开发需要实现的目标及其具体需要的功能等等,并进行可⾏性分析(技术、成本、法律法规)…...

Linux 终端、进程组、会话、守护进程
文章目录一、终端概念终端概念控制终端二、进程组概念进程组概述进程组相关 API会话会话概念会话相关 API创建会话注意事项守护进程守护进程介绍守护进程模型守护进程参考代码守护进程相关 API参考文章一、终端概念 终端概念 1、终端(Terminal) 终端是…...

【MySQL高级篇】第7章_InnoDB数据存储结构
第7章_InnoDB数据存储结构 1. 数据库的存储结构:页 1.1 磁盘与内存交互基本单位:页 1.2 页结构概述 1.3 页的大小 不同的数据库管理系统(简称DBMS)的页大小不同。比如在 MySQL 的 InnoDB 存储引擎中,默认页的大小是 …...

工具篇 | 10 | 抓包工具
1 前期准备 作为测试开发,为什么要使用抓包工具呢,因在调试过程中,会碰到一些问题,不确定是前端的问题,还是后端的问题,就需要通过一种工具来检测,数据的流转,如web界面或者客户端操作,点击了一个按钮或者浏览一个页面,调用了那些接口,那些参数,请求参数,返回结果…...

Notes04:GPIO功能框图详解
GPIO功能框图详解野火霸道开发板学习笔记信息说明GPIO功能框图输出部分推挽输出推挽输出模型分析推挽输出总结开漏输出开漏输出模型分析开漏输出总结输出数据寄存器(ODR)位设置清除寄存器(BSRR)位清除寄存器(BRR)输入部分输入数据寄存器(IDR)TTL肖特基触发器部分模型分析上拉/下…...

2023系统分析师---系统规划
一、系统规划的步骤 初步调查:根据企业战略目标,分析企业现状以及系统运行状况确定系统目标:确定系统的服务范围质量等分析子系统的组成:系统划分并指定子系统功能拟定系统的实施方案:分析子系统优先级,确…...

Leetcode.1814 统计一个数组中好对子的数目
题目链接 Leetcode.1814 统计一个数组中好对子的数目 Rating : 1738 题目描述 给你一个数组 nums,数组中只包含非负整数。定义 rev(x)的值为将整数 x各个数字位反转得到的结果。比方说 rev(123) 321, rev(120) 21。我们称满足下面条件的下…...

[RK356x Linux] 开发之GPIO使用以及gpio-leds驱动讲解
文章目录一、GPIO 介绍二、RK3568 GPIO 状况三、GPIO 引脚计算四、ITX-3568JQ LED4.1 LED 原理图4.2 LED 设备树4.3 LED 使用五、gpio-leds驱动5.1 介绍5.2 数据结构5.3 驱动分析一、GPIO 介绍 GPIO全称为 General Purpose Input/Output,即通用输入输出端口。它是一…...

5.38 综合案例2.0 -语音助手(短信,蓝牙,M2M设备间通信)
综合案例2.0 - 语音助手案例说明原理器件语音助手功能实现1,ASRPRO-2m模块下载代码连线模块编程说明2,模块与开发板接线3,语音助手代码功能1:语音发短信说明功能2:控制蓝牙设备说明蓝牙灯接线图蓝牙灯代码功能3&#x…...

MySQL与分布式:主从复制
文章目录MySQL与分布式一、Linux下载 MySQL二、主从复制①修改配置文件②配置主机③配置从机④查看同步状态提示:以下是本篇文章正文内容,mysql 系列学习将会持续更新 MySQL与分布式 前面我讲解了 Redis 在分布式场景的下的相关应用,接着我们…...

conda@config命令@package cache包缓存共享@Channels@conda install pyside6
文章目录refs检查基本信息config add pkgs_dirs查看condarc源文件按字段查询全部信息conda Channelconda-forge 通道安装packgeconda install cupy不恰当的url Channel导致的错误Channel指定使用完整的url链接conda installconda临时换源conda install 安装pyside6🎈…...

线性动态规划问题
文章目录1. 三角形中最小路径之和2. 最长递增子序列3. 最长公共子序列1. 三角形中最小路径之和 给定一个三角形 triangle ,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层…...

oracle jdbc 处理块 预处理块
DML DML(Data Manipulation Language 数据操控语言)用于操作数据库对象中包含的数据,也就是说操 作的单位是记录。 insert 添加记录时需要满足一下条件 类型 长度 兼容: 字段 兼容值 值满足约束 :主键 (唯一非空) 非空(必填) 唯一(不重复…...

关于函数递归调用导致的StackOverflow那点事
身为工程师,Stack Overflow这网站大家应该都是熟到不能再熟。如果没有他帮忙解决各种莫名其妙的错误或者bug,可能连设定个开发环境都要搞半天,更不用说要开发了,产出直接降低好几倍,不如直接下班算了。 但今天要谈的不是那个Stack Overflow,而是要讲程序在使用內存时,因…...

Pandas数据框、序列定义及数据处理应用在线实验闯关
Pandas数据框、序列定义及数据处理应用在线实验闯关 文章目录 Pandas数据框、序列定义及数据处理应用在线实验闯关一、序列和数据框1、任务描述2、相关知识定义列表和元组序列定义方法构造数据框3、任务实现二、外都数据文件读取1、任务描述2、相关知识读取文件分块读取数据3、…...

简介SpringBoot
目录 一、简介SpringBoot 二、SpringBoot项目的创建与使用 1、创建SpringBoot项目 2、使用SpringBoot项目 三、 SpringBoot中的配置文件 .properties配置文件 读取配置文件信息 .yml配置文件 读取配置文件信息 四、SpringBoot中的日志文件 1、日志文件简介 2、…...

【91数据恢复】.[killhackfiles@cock.li].Devos勒索病毒数据恢复
目录 前言:简介 一、什么是.[killhackfilescock.li].Devos勒索病毒? 二、.[killhackfilescock.li].Devos勒索病毒是如何传播感染的? 三、感染了.[killhackfilescock.li].Devos后缀勒索病毒文件怎么恢复? 四、.[killhackfiles…...

TS接口类型
40. TS接口 1. 定义 TypeScript 中的接口是一种抽象结构,用于定义对象的类型。接口定义了对象应该包含的属性和方法,但不提供实现。 TypeScript 的接口类似于其他编程语言中的接口或抽象类,但不同于它们,接口可以描述对象的形状…...

基于java中的Springboot框架实现网上商城电商系统
基于java中的Springboot框架实现网上商城电商系统开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Mav…...

第四朵“云”!全托管的时序数据云平台 TDengine Cloud 正式支持阿里云
3 月 13 日,全托管的时序数据处理云服务平台 TDengine Cloud 正式支持阿里云,这是继 Microsoft Azure、AWS、Google Cloud 后 TDengine Cloud 上线的第四朵公有云。在去年,TDengine 成功打造 TDengine Cloud 平台并率先上线海外云市场&#x…...

关于docker mysql 请求速度慢的问题
一,问题描述: 请求mysql 数据库,请求速度很慢,需要六七秒,数据量也不大。使用的是docker 容器启动的mysql 二,问题原因: 网上说的是因为MySQL的dns导致,我实测也是有效果的…...

matplotlib 绘图入门
参考:十分钟|matplotlib上手,开启你的python可视化 01 title设置 import matplotlib.pyplot as plt plt.title(“title”)#括号当中输入标题的名称 plt.show() 如果title是中文,matplotlib会乱码,这时需要加上下面这段代码&…...

Dubbo之外,一文看懂jdk、dubbo、spring中的SPI
文章目录前言JDK中的SPI示例总结Dubbo中的SPI基本使用示例AOP示例IOC示例自适应扩展示例小总结Spring中的SPI使用示例总结最终对比唠唠叨叨本专栏对应Dubbo版本:2.7.8。 官方文档地址:https://dubbo.apache.org/zh/docsv2.7/dev/ 官方GitHub地址…...

【业务安全-02】业务逻辑漏洞之越权操作
越权越权即越权查看被人的信息,又分为水平越权和垂直越权,但是两者的本质都是一样的,只是越权的身份权限不一样而已水平越权:相同级别的用户,如用户A访问用户B垂直越权:普通用户到管理员,普通用…...

golang语言面试总结
Golang面试总结(六) 对已经关闭的channel进行读写,会怎么样? 当channel被关闭后,如果继续往里面写数据,程序会直接panic退出。如果是读取关闭后的channel,不会产生panic,还可以读到…...

vue 数据传递方式
1、props $ emit 适用于父子组件子组件使用; props 接收来自父组件的数据父组件绑定, v-on:事件名 监听事件, 子组件使用 this.$emit(‘事件名’) 派发事件; 缺点:如果组件嵌套的比较深就比较麻烦; // Parent.vue <div class"parent"><Child :…...

Android音频子系统(十三)------audio音频测试工具
你好!这里是风筝的博客, 欢迎和我一起交流。 测试音频延时的话,一般使用WALT来测试是最为准确的,他是借助了外部硬件来捕获音频信号,某宝上有卖: 就是有丢丢小贵,本打工人还是想想白嫖的法子……...

diskgenius磁盘管理和数据恢复软件进行数据恢复的注意事项
DiskGenius是一款功能强大的磁盘管理和数据恢复软件,它可以帮助用户对磁盘进行分区、格式化、修复、备份以及数据恢复等操作,同时还提供了丰富的功能和工具,让用户可以轻松地进行数据管理和恢复。 DiskGenius提供了多种数据恢复方式…...

【算法基础】约数(计算约数 约数个数 约数之和 最大公约数)
一、约数 1. 试除法求约数 最朴素的办法是遍历1 ~ n(不是从2开始),如果能被n整除,就输出。但是,类比质数的求法,约数都是成对出现的,因此只需要遍历到根号n即可。for(int i = 1; i <= x / i; ++i),但是需要注意的是,如果这个数是个平方数,则存在正好卡在 x / i …...

Powershell 分隔多条命令
1. Background 在使用 Cmd 或 Bash 等命令行时,有时候会想要在一行同时输入多条命令来顺序执行,而且这样的场景多为在命令1执行完毕后,才会执行命令2,若执行失败则不会继续执行后续命令。 2. Description Cmd 或者 Bash 可以使…...

蓝桥杯备赛 [day01]|python|门牌制作|迷宫|乘积尾零
目录 一、比赛介绍 二、 填空题和手算 2.1 手算技巧 (1)巧用编辑器 法一 法二 法三 (2)心算手数 (3)巧用Excel 一共有多少个星期一? (4)巧用Python 一共有多少个星期一? python-datetime库 乘积末尾有多少个零ÿ…...

可观测性-可视化-Grafana的表格(table)类型图表中,在列上要显示“多少天前”
在Grafana的表格(table)类型图表中,在列上要显示“多少天前” 需求:在Grafana的表格(table)类型图表中,在列上要显示“多少天前” 先来看下效果图 前提:首先measurement中要有业务…...

不要让ChatGPT成为你的智商税
难处 我相信有部分人苦于政策,但是又没有途径,没法享受到chatGpt带来的便利。 我也相信有不少无良的人,在百度浏览器的各个官网搞什么接入openaiAPI的网站,欺骗广大人民交那么几十块。 这种行为本身不合理,也不合法…...

div固定到浏览器底部
在设计网站的时候,如果你某个页面的内容没有满屏,那你的footer会离浏览器底部很远,整体看起来很难看,这里用css提供一种方法来将footer固定在浏览器底部。 1.footer部分位于底部 1.footer部分位于底部,但不悬浮&…...

STC12+TM1638用3个IO口实现24个独立按键显示
STC12+TM1638用3个IO口实现24个独立按键显示 ✨在采用测试STC单片机测试过程中发现,该程序只有在STC12上跑能运行,分别尝试烧录到STC15、STC8上面会出现大部分按键会失灵,只有个别按键按了有效。部分代码从Arduino平台移植过来的,纯粹的按键扫描功能在STC12上测试没有问题,…...

Linux(网络基础---网络层)
文章目录0. 前言1. IP协议1-1 基本概念1-2 协议头格式2. 网段划分2-1 基本概念2.2 IP地址分五大类2-3 特殊的IP地址2-4 IP地址的数量限制2-5 私有IP地址和公网IP地址2-6 路由0. 前言 前面我们讲了,应用层、传输层;本章讲网络层。 应用层:我…...

Java stream性能比较
环境 Ubuntu 22.04IntelliJ IDEA 2022.1.3JDK 17CPU:8核 ➜ ~ cat /proc/cpuinfo | egrep -ie physical id|cpu cores physical id : 0 cpu cores : 1 physical id : 2 cpu cores : 1 physical id : 4 cpu cores : 1 physical id : 6 cpu cores : 1 physical id …...

JS判断是否为base64字符串如何转换为图片src格式
需求背景 : 如何判断后端给返回的 字符串 是否为 base-64 位 呢 ? 以及如果判断为是的话,如何给它进行转换为 img 标签可使用的那种 src 格式 呢 ? 1、判断字符串是否为 base64 以下方法,可自行挨个试试,…...

Java单例模式写法
目录单例模式饿汉模式实现单例懒汉模式实现单例单线程版多线程版多线程版优化小结单例模式 单例模式能保证某个类在程序中只存在唯一一份实例, 而不会创建出多个实例. 为什么要保证只存在一份对象呢? 因为有些对象管理的内存数据可能会很多, 可能有些项目里就一个对象运行起来…...

【Java】对象的构造和初始化
对象的构造和初始化如何初始化对象构造方法概念特性默认初始化就地初始化如何初始化对象 在Java方法内部定义一个局部变量时,必须要初始化,否则会编译失败。 要让上述代码通过编译,非常简单,只需在正式使用a之前,给a设…...
Python解题 - CSDN周赛第38期
又来拯救公主了。。。本期四道题还是都考过,而且后面两道问哥在以前写的题解里给出了详细的代码(当然是python版),直接复制粘贴就可以过了——尽管这样显得有失公允,考虑到以后还会出现重复的考题,所以现在…...

AcWing 3382. 整数拆分
乍一眼看到还以为做个解空间树和dfs就做出来了...#include <bits/stdc.h> using namespace std; const int MOD1e9;int n,ans; void dfs(int x){if(x<0)return;if(x0)ans;for(int i1;i<x;ii<<1)dfs(x-i); }int main(){cin>>n;dfs(n);cout<<ans;r…...

AirPlay Deamon学习(Linux Daemon)
关于deamon在Linux中是守护进程,而我在做苹果物联网apple tv投屏airplay调用的是apple 底层deamon代码,特做次文档学习,该文章分为对Linux Daemon的学习和AirPlay Deamon学习 一,守护进程概述 Linux Daemon(守护进程&…...

Linux: config: CONFIG_AS_AVX2;as-instr
文章目录 配置as-instr日志配置 这个不是配置的,它是根据binutils是否支持相应的指令来做的。所以还不能只是依赖于config文件来判断有没有配置相关的宏定义。 arch/x86/Makefile# #does binutils support specific instructions?avx2_instr :=$(call as-instr,vpbroadcas…...

LeetCode2094. 找出 3 位偶数(python)
题目 给你一个整数数组 digits ,其中每个元素是一个数字(0 - 9)。数组中可能存在重复元素。 你需要找出 所有 满足下述条件且 互不相同 的整数: 该整数由 digits 中的三个元素按 任意 顺序 依次连接 组成。 该整数不含 前导零 该整…...

【错误包】「go语言」项目中设计适合自己的错误包——通过AST自动生成代码和MD文档
文章目录一、如何设计errors错误包1. go的error和其他语言的trycatch的区别2. 常用的errors、fmt和pkgerrors错误处理包3. 使用errors打印调用栈4. 使用wrapf保存和打印error错误栈5. 如何设计错误码更加科学二、自定义错误包1. 自定义错误码2. errors实现withcode模式和实现co…...

【CSAPP】进程 | 上下文切换 | 用户视角下的并发进程
💭 写在前面:本文将学习《深入理解计算机系统》的第六章 - 关于异常控制流和系统级 I/O 的 进程部分。CSAPP 是计算机科学经典教材《Computer Systems: A Programmers Perspective》的缩写,该教材由Randal E. Bryant和David R. OHallaron 合著…...

数组模拟单链表
实现一个单链表,链表初始为空,支持三种操作: 向链表头插入一个数; 删除第 k个插入的数后面的数; 在第 k个插入的数后插入一个数。 现在要对该链表进行 M次操作,进行完所有操作后,从头到尾输出整…...

03 - 初识Linux进程
---- 整理自狄泰软件唐佐林老师课程 查看所有文章链接:(更新中)Linux系统编程训练营 - 目录 文章目录1. 进程理论状态切换1.1 问题1.2 进程生命周期1.3 Linux进程基本概念1.4 Linux进程生命周期1.5 Linux进程状态剖析1.6 Linux进程必知必会1.…...

2023年产品经理需要考的证书——NPDP,含金量高,666
产品经理国际资格认证NPDP是国际公认的唯一的新产品开发专业认证,集理论、方法与实践为一体的全方位的知识体系,为公司组织层级进行规划、决策、执行提供良好的方法体系支撑。 【认证机构】 产品开发与管理协会(PDMA)成立于1979年…...

OSPF+MGRE实验
实验要求: 1、左边三台设备配置OSPF 10,区域0; 2、右边为OSPF 1 中间是Area0,下挂Area1和Area2 3.两个进程之间有ISP设备,需要访问公网 4.OSPF 1区域零中,中心设备不启动动态路由协议,配置MGRE …...

模块化技术
前端模块化1.什么是前端模块化将复杂的程序根据规则或者规范拆分成若干模块,一个模块包括输入和输出模块化的内部数据和实现是私有的,对外暴露一些接口与其他模块进行通信2.前端模块化的背景前端模块化是一种标准,不是实现理解模块化是理解前…...