贰[2],OpenCV函数解析

news2024/12/25 16:31:07

1,imread:图片读取

CV_EXPORTS_W Mat imread( const String& filename, int flags = IMREAD_COLOR );

//参数1(filename):文件地址
//参数2(flags):读取标志


注:ImreadModes,参数2(flags)枚举定义

enum ImreadModes {
IMREAD_UNCHANGED            = -1, 
       IMREAD_GRAYSCALE            = 0,  
       IMREAD_COLOR                = 1,  
       IMREAD_ANYDEPTH             = 2, 
       IMREAD_ANYCOLOR             = 4, 
       IMREAD_LOAD_GDAL            = 8,  
       IMREAD_REDUCED_GRAYSCALE_2  = 16, 
       IMREAD_REDUCED_COLOR_2      = 17,
       IMREAD_REDUCED_GRAYSCALE_4  = 32, 
       IMREAD_REDUCED_COLOR_4      = 33, 
       IMREAD_REDUCED_GRAYSCALE_8  = 64, 
       IMREAD_REDUCED_COLOR_8      = 65, 
       IMREAD_IGNORE_ORIENTATION   = 128 
     };

/*
IMREAD_UNCHANGED: 如果设置,将加载的图像原样返回(如果有alpha通道,否则会被裁剪)。忽略EXIF方向。
IMREAD_GRAYSCALE: 如果设置,总是将图像转换为单通道灰度图像(编解码器内部转换)。
IMREAD_COLOR: 如果设置,总是将图像转换为3通道BGR彩色图像。
IMREAD_ANYDEPTH: 如果设置,当输入具有相应的深度时,返回16位/32位图像,否则将其转换为8位。
IMREAD_ANYCOLOR: 如果设置,图像以任何可能的颜色格式读取。
IMREAD_LOAD_GDAL: 如果设置,使用gdal驱动程序加载图像。
IMREAD_REDUCED_GRAYSCALE_2 到 IMREAD_REDUCED_GRAYSCALE_8: 这些标志将图像转换为单通道灰度图像,并将图像大小减少一半或四分之一或八分之一。
IMREAD_REDUCED_COLOR_2 到 IMREAD_REDUCED_COLOR_8: 这些标志将图像转换为3通道BGR彩色图像,并将图像大小减少一半或四分之一或八分之一。
IMREAD_IGNORE_ORIENTATION: 如果设置,不根据EXIF的方向标志旋转图像。
*/

2,imwrite:图片保存

CV_EXPORTS_W bool imwrite( const String& filename, InputArray img,
              const std::vector<int>& params = std::vector<int>());
              
//参数1(filename):文件地址
//参数2(img):图片数据
//参数3(params ):为特定格式保存的参数编码


注:**ImwriteFlags** ,参数3(params)枚举定义

enum ImwriteFlags {
       IMWRITE_JPEG_QUALITY        = 1,  
       IMWRITE_JPEG_PROGRESSIVE    = 2,  
       IMWRITE_JPEG_OPTIMIZE       = 3,  
       IMWRITE_JPEG_RST_INTERVAL   = 4, 
       IMWRITE_JPEG_LUMA_QUALITY   = 5,  
       IMWRITE_JPEG_CHROMA_QUALITY = 6,  
       IMWRITE_JPEG_SAMPLING_FACTOR = 7, 
       IMWRITE_PNG_COMPRESSION     = 16, 
       IMWRITE_PNG_STRATEGY        = 17, 
       IMWRITE_PNG_BILEVEL         = 18, 
       IMWRITE_PXM_BINARY          = 32, 
       IMWRITE_EXR_TYPE            = (3 << 4) + 0, 
       IMWRITE_EXR_COMPRESSION     = (3 << 4) + 1, 
       IMWRITE_EXR_DWA_COMPRESSION_LEVEL = (3 << 4) + 2, 
       IMWRITE_WEBP_QUALITY        = 64, /
       IMWRITE_HDR_COMPRESSION     = (5 << 4) + 0, 
       IMWRITE_PAM_TUPLETYPE       = 128,
       IMWRITE_TIFF_RESUNIT        = 256,
       IMWRITE_TIFF_XDPI           = 257,
       IMWRITE_TIFF_YDPI           = 258,
       IMWRITE_TIFF_COMPRESSION    = 259,
       IMWRITE_JPEG2000_COMPRESSION_X1000 = 272,
       IMWRITE_AVIF_QUALITY        = 512,
       IMWRITE_AVIF_DEPTH          = 513,
       IMWRITE_AVIF_SPEED          = 514 
     };

/*
IMWRITE_JPEG_QUALITY:用于JPEG图像,表示质量等级,值范围从0到100,其中100表示最高质量。默认值为95。
IMWRITE_JPEG_PROGRESSIVE:启用JPEG渐进式扫描,值为0或1,默认值为False。
IMWRITE_JPEG_OPTIMIZE:优化JPEG图像,值为0或1,默认值为False。
IMWRITE_JPEG_RST_INTERVAL:JPEG图像中重新同步标记的间隔,值范围从0到65535,默认值为0(无重新同步)。
IMWRITE_JPEG_LUMA_QUALITY:单独的亮度质量级别,值范围从0到100,默认值为-1(不使用)。
IMWRITE_JPEG_CHROMA_QUALITY:单独的色度质量级别,值范围从0到100,默认值为-1(不使用)。
IMWRITE_JPEG_SAMPLING_FACTOR:用于JPEG的采样因子,参见cv::ImwriteJPEGSamplingFactorParams。
IMWRITE_PNG_COMPRESSION:用于PNG的压缩级别,值范围从0到9。较高的值表示较小的尺寸和更长的压缩时间。当指定此标志时,策略更改为IMWRITE_PNG_STRATEGY_DEFAULT(Z_DEFAULT_STRATEGY)。默认值为1(最佳速度设置)。
IMWRITE_PNG_STRATEGY:PNG的压缩策略,可以是cv::ImwritePNGFlags中的一个值,默认值为IMWRITE_PNG_STRATEGY_RLE。
IMWRITE_PNG_BILEVEL:二进制级别的PNG,值为0或1,默认值为0。
IMWRITE_PXM_BINARY:对于PPM、PGM或PBM,可以是一个二进制格式标志,值为0或1。默认值为1。
*/

3,imshow:图片显示

CV_EXPORTS_W void imshow(const String& winname, InputArray mat);

//参数1(winname):窗口名称
//参数2(img):图片数据

4,cvtColor:颜色空间转换


实现**RGB**颜色空间转**HSV/HSI/灰度**等颜色空间。

CV_EXPORTS_W void cvtColor( InputArray src, 
                            OutputArray dst, 
                            int code, 
                            int dstCn = 0 );

//参数1(src):原图
//参数2(dst):处理后的图
//参数3(code):颜色空间转换标识符
//参数4(dstCn):处理后图片的通道数,=0,则和原图相同。


注:**ColorConversionCodes** ,参数3(code)对应枚举定义

enum ColorConversionCodes {
    COLOR_BGR2BGRA     = 0, //!< add alpha channel to RGB or BGR image
    COLOR_RGB2RGBA     = COLOR_BGR2BGRA,
    ......
};

5,ellipse:画椭圆


两个重载函数
函数1:

CV_EXPORTS_W void ellipse(InputOutputArray img, Point center, Size axes,
                        double angle, double startAngle, double endAngle,
                        const Scalar& color, int thickness = 1,
                        int lineType = LINE_8, int shift = 0);
                        
//参数1(img):待绘制的图像
//参数2(center):椭圆中心点
//参数3(axes):长短轴尺寸
//参数4(angle):角度
//参数5(startAngle) :弧度段起始角度
//参数6(endAngle) :弧度段结束角度
//参数7(color):椭圆颜色
//参数8(thickness ):画笔线宽
//参数9(lineType ):画笔线类型     
//参数10(shift ):绘制精度,默认为0(单精度) 


注:startAngle=0,endAngle=360,整个椭圆

函数2:

CV_EXPORTS_W void ellipse(InputOutputArray img, const RotatedRect& box, const Scalar& color,
                        int thickness = 1, int lineType = LINE_8);
                        
//参数1(img):待绘制的图像
//参数2(center):椭圆的形状,RotatedRect,有三个属性:angle center size
//参数3(color):椭圆颜色
//参数4(thickness ):线宽
//参数5(lineType ):线类型


注:**LineTypes** 参数5(lineType)枚举定义

enum LineTypes {
    FILLED  = -1,
    LINE_4  = 4, //!< 4-connected line
    LINE_8  = 8, //!< 8-connected line
    LINE_AA = 16 //!< antialiased line
};

6,circle:画圆

CV_EXPORTS_W void circle(InputOutputArray img, Point center, int radius,
                       const Scalar& color, int thickness = 1,
                       int lineType = LINE_8, int shift = 0);
                       
//参数1(img):待绘制的图像
//参数2(center):圆心坐标
//参数3(color):圆的半径
//参数4(color):椭圆颜色
//参数5(thickness ):画笔线宽
//参数6(lineType ):画笔线类型     
//参数7(shift ):绘制精度,默认为0(单精度)


注:thickness =-1,为实心圆

7,fillPoly:画多边形


两个重载函数
函数1:

CV_EXPORTS_W void fillPoly(InputOutputArray img, InputArrayOfArrays pts,
                           const Scalar& color, int lineType = LINE_8, int shift = 0,
                           Point offset = Point() );
                          
 //参数1(img):待绘制的图像
//参数2(pts):顶点集
//参数3(color):椭圆颜色
//参数4(lineType ):画笔线类型   
//参数5(shift ):绘制精度,默认为0(单精度)
//参数6(offset ):绘制的偏移量,默认为(0,0)

函数2:

CV_EXPORTS void fillPoly(InputOutputArray img, const Point** pts,
                         const int* npts, int ncontours,
                         const Scalar& color, int lineType = LINE_8, int shift = 0,
                         Point offset = Point() );

//参数1(img):待绘制的图像
//参数2(pts):顶点集
//参数3(npts):多边形顶点数
//参数4(ncontours):多边形数量
//参数5(color):椭圆颜色
//参数6(lineType ):画笔线类型   
//参数7(shift ):绘制精度,默认为0(单精度)
//参数8(offset ):绘制的偏移量,默认为(0,0)

8,line:画线

CV_EXPORTS_W void line(InputOutputArray img, Point pt1, Point pt2, const Scalar& color,
                     int thickness = 1, int lineType = LINE_8, int shift = 0);
//参数1(img):待绘制的图像
//参数2(pt1):线起点
//参数3(pt2):线终点
//参数4(color):线颜色
//参数5(thickness ):画笔线宽
//参数6(lineType ):画笔线类型     
//参数7(shift ):绘制精度,默认为0(单精度)

9,LUT:查表


查表变换,用于大数据图像的图元进行批量操作,牺牲空间换取时间

CV_EXPORTS_W void LUT(InputArray src, InputArray lut, OutputArray dst);
//参数1(src):原图
//参数2(lut):表
//参数3(dst):处理后的图

 10,getTickCount:获取电脑当前时钟数

CV_EXPORTS_W int64 getTickCount();

11,getTickFrequency:获取CPU,1秒的走过的时钟周期

CV_EXPORTS_W double getTickFrequency();

//double start = cv::getTickCount();
//double interval = cv::getTickCount() - start;
//double second=interval  / cv::getTickFrequency(); // 结果单位:秒

12,addWeighted:图像混合

CV_EXPORTS_W void addWeighted(InputArray src1, double alpha, InputArray src2,
                              double beta, double gamma, OutputArray dst, int dtype = -1);
//参数1(src1):图像1
//参数2(alpha):图像1权重
//参数3(src2):图像2
//参数4(beta):图像2权重
//参数5(gamma):加到权重总和上的值
//参数6(dst):处理后图像
//参数7(dtype ):图像深度,-1和图像1的深度相同
//输出图像图元i,dst[i] = src1[i] * alpha + src2[i ] * beta + gamma;


注:图像1(src1)和图像2(src2)类型和尺寸需要相同

13,split:通道分离

CV_EXPORTS_W void split(InputArray m, OutputArrayOfArrays mv);

//参数1(m):多通道图像
//参数2(mv):单通道图像数组

14,merge:通道合并

CV_EXPORTS_W void merge(InputArrayOfArrays mv, OutputArray dst)

//参数1(mv):单通道图像数组
//参数2(m):多通道图像

15,dft:离散傅里叶变换

CV_EXPORTS_W void dft(InputArray src, OutputArray dst, int flags = 0, int nonzeroRows = 0);

//参数1(src):原图
//参数2:处理图像
//参数3:转换标志
//参数4:非零行

注:**DftFlags** 参数3(flags)枚举定义

enum DftFlags {
    DFT_INVERSE        = 1,
    DFT_SCALE          = 2,
    DFT_ROWS           = 4,
    DFT_COMPLEX_OUTPUT = 16,
    DFT_REAL_OUTPUT    = 32,
    DFT_COMPLEX_INPUT  = 64,
    DCT_INVERSE        = DFT_INVERSE,
    DCT_ROWS           = DFT_ROWS
};

/*
DFT_INVERSE: 这个值用于指示需要进行逆DFT变换,逆DFT变换是将频域表示转换回时域表示的过程。
DFT_SCALE: 这个值用于指示在进行DFT变换后需要对输出进行缩放。在某些情况下,为了保持数据的精度,需要在变换后对输出进行缩放,输出的结果都会以l/N进行缩放,通常会结合DFT_INVERSE一起使用。
DFT_ROWS: 这个值用于指示在进行DFT变换时,按行进行运算。对输入矩阵的每行进行正向或反向的变换,此标识符可以在处理多种矢量的时候用于减小资源开销,这些处理常常是三维或高维变换等复杂操作
DFT_COMPLEX_OUTPUT: 这个值用于指示DFT变换的输出结果是复数形式的。在频域变换中,输出通常可以是实数或复数形式。
DFT_REAL_OUTPUT: 这个值用于指示DFT变换的输出结果是实数形式的。在某些情况下,我们可能只关心频域表示的实部,而不需要虚部,这时可以使用这个选项。
DFT_COMPLEX_INPUT: 这个值用于指示输入给DFT变换的数据是复数形式的。在频域变换中,输入数据可以是实数或复数形式。
DCT_INVERSE: 这个值与DFT_INVERSE相同,用于指示需要进行逆DCT变换。逆DCT变换是将频域表示转换回时域表示的过程。
DCT_ROWS: 这个值与DFT_ROWS相同,用于指示在进行DCT变换时,按行进行运算。
*/

16,getOptimalDFTSize:获取傅里叶最佳尺寸

CV_EXPORTS_W int getOptimalDFTSize(int vecsize);

//参数1(vecsize):尺寸,即图片的rows,cols
//离散傅里叶变换的运行速度与图片的尺寸有很大关系。当图像的尺寸是 2、 3、 5的整数倍时,计算速度最快。

17,copyMakeBorder:扩展图像边界

CV_EXPORTS_W void copyMakeBorder(InputArray src, OutputArray dst,
                                 int top, int bottom, int left, int right,
                                 int borderType, const Scalar& value = Scalar() );

//参数1(src):原图
//参数2(dst):处理后图
//参数3(top):原图像上方扩充的像素
//参数4(bottom):原图像下方扩充的像素
//参数5(left):原图像左方扩充的像素
//参数6(right):原图像右方扩充的像素
//参数7(borderType):边界类型
//参数8(value):当 borderType取值为 BORDER CONSTANT时,这个参数表示边界值

18,magnitude:计算二位矢量幅值

dst(i)=\sqrt{x(i)^2+y(i)^2}

CV_EXPORTS_W void magnitude(InputArray x, InputArray y, OutputArray magnitude);

//参数1(x):矢量浮点型X坐标值,实部
//参数1(y):矢量浮点型Y坐标值,虚部
//参数1(magnitude):输出的幅值

19,normalize:矩阵归一化

normalize函数的作用是将数据归一化到指定的范围,将数据的分布变得更加集中,减少数据的波动性,同时也可以提高模型的训练速度和准确性

CV_EXPORTS_W void normalize( InputArray src, InputOutputArray dst, double alpha = 1, double beta = 0,
                             int norm_type = NORM_L2, int dtype = -1, InputArray mask = noArray());

//参数1(src):原矩阵
//参数2(dst):处理后的矩阵
//参数3(alpha):归一化的参数
//参数4(beta):归一化的参数
//参数5(norm_type):归一化类型
//参数6(dtype):矩阵类型
//参数7(mask):掩膜
enum NormTypes {
                NORM_INF       = 1,
                 NORM_L1        = 2,
                 NORM_L2        = 4,
                 NORM_L2SQR     = 5,
                 NORM_HAMMING   = 6,
                 NORM_HAMMING2  = 7,
                 NORM_TYPE_MASK = 7, 
                 NORM_RELATIVE  = 8, 
                 NORM_MINMAX    = 32 
               };

NORM_INF: 这可能是无穷范数(L-inf norm),在数学中常用于量化向量或矩阵的“大小”。对于向量,它计算的是向量元素绝对值的最大值;对于矩阵,它计算的是矩阵中所有子矩阵元素绝对值的最大值。
NORM_L1: 这可能是L1范数(L-1 norm),它计算的是向量元素绝对值的总和。
NORM_L2: 这是L2范数(L-2 norm),也称为欧几里得范数,它计算的是向量元素平方和的平方根。
NORM_L2SQR:这可能是L2平方范数(L-2 squared norm),它计算的是向量元素平方和。
NORM_HAMMING 和 NORM_HAMMING2:可能是某种类型的哈明范数(Hamming norm),它通常用于量化矢量或矩阵中非零元素的数量。
NORM_TYPE_MASK:这可能是一个位掩码,用于选择上述范数类型的一部分。
NORM_RELATIVE:这可能是一个标志,表示使用相对范数(relative norm),即根据向量的大小来计算范数。
NORM_MINMAX:这可能是最小最大范数(min-max norm),它把向量映射到0和1之间。

20,blur:均值滤波

CV_EXPORTS_W void blur( InputArray src, OutputArray dst,
                        Size ksize, Point anchor = Point(-1,-1),
                        int borderType = BORDER_DEFAULT );

//参数1(src):原图
//参数2(dst):处理后的图像
//参数3(ksize):核的尺寸,正奇数
//参数4(anchor):锚点,默认值 Point(-l-l)表示这个锚点在核的中心
//参数5(borderType):边框类型

21,boxFilter:方框滤波

CV_EXPORTS_W void boxFilter( InputArray src, OutputArray dst, int ddepth,
                             Size ksize, Point anchor = Point(-1,-1),
                             bool normalize = true,
                             int borderType = BORDER_DEFAULT );

//参数1(src):原图
//参数2(dst):处理后的图像
//参数3(ddepth):处理后图像深度,-1代表使用原图深度
//参数4(ksize):核的尺寸,正奇数
//参数5(anchor):锚点,默认值 Point(-l-l)表示这个锚点在核的中心
//参数6(normalize):归一化处理
//参数7(borderType):边框类型

22,GaussianBlur:高斯滤波

CV_EXPORTS_W void GaussianBlur( InputArray src, OutputArray dst, Size ksize,
                                double sigmaX, double sigmaY = 0,
                                int borderType = BORDER_DEFAULT );

//参数1(src):原图
//参数2(dst):处理后图像
//参数3(ksize):内核大小,正奇数
//参数4(sigmaX):X方向上的高斯核标准偏差
//参数5(sigmaY):Y方向上的高斯核标准偏差
//参数6(borderType ):边框类型

 23,medianBlur:中值滤波

CV_EXPORTS_W void medianBlur( InputArray src, OutputArray dst, int ksize );

//参数1(src):原图
//参数2(dst):处理后图像
//参数3(ksize):内核大小,正奇数

24,bilateralFilter:双边滤波

CV_EXPORTS_W void bilateralFilter( InputArray src, OutputArray dst, int d,
                                   double sigmaColor, double sigmaSpace,
                                   int borderType = BORDER_DEFAULT );

//参数1(src):原图
//参数2(dst):处理后图像
//参数3(d):表示在过滤过程中每个像素邻域的直径
//参数4(sigmaColor):颜色空间滤波器的sigma值。这个参数的值越大,就表明该像素邻域内有越宽广的颜色会被混合到一起,产生较大的半相等颜色区域
//参数5(sigmaSpace):坐标空间中滤波器的sigma值,坐标空间的标注方差。它的数值越大,意味着越远的像素会相互影响,从而使更大的区域中足够相似的颜色获取相同的颜色。当 d>0时, d指定了邻域大小且与sigmaSpace无关。否则, d正比于sigmaSpace
//参数6(borderType):边框类型

25,dilate:膨胀(形态学滤波)

CV_EXPORTS_W void dilate( InputArray src, OutputArray dst, InputArray kernel,
                          Point anchor = Point(-1,-1), int iterations = 1,
                          int borderType = BORDER_CONSTANT,
                          const Scalar& borderValue = morphologyDefaultBorderValue() );


//参数1(src):原图
//参数2(dst):处理后图像
//参数3(kernel):内核,可以是正方向或者矩形,可以通过cv2.getStructuringElement()函数创建
//参数4(anchor ):锚点
//参数5(iterations):迭代次数,如连续膨胀几次
//参数6(borderType ):边框类型
//参数7(borderValue ):边界值

26,getStructuringElement:获取内核

CV_EXPORTS_W Mat getStructuringElement(int shape, Size ksize, Point anchor = Point(-1,-1));

//参数1(shape):设定卷积核的形状,有三个可选值:MORPH_RECT(返回矩形卷积核)、MORPH_CROSS(返回十字形卷积核)和MORPH_ELLIPSE(返回椭圆形卷积核)
//参数2(ksize):表示卷积核有x行,y列
//参数3(anchor ):设定锚点的位置,一般设为(-1,-1),表示锚点位于核中心。

注:参数1(shape)枚举定义

enum MorphShapes {
    MORPH_RECT    = 0, 
    MORPH_CROSS   = 1, 
    MORPH_ELLIPSE = 2 
};

27,erode:腐蚀(形态学滤波)

CV_EXPORTS_W void erode( InputArray src, OutputArray dst, InputArray kernel,
                         Point anchor = Point(-1,-1), int iterations = 1,
                         int borderType = BORDER_CONSTANT,
                         const Scalar& borderValue = morphologyDefaultBorderValue() );

//参数1(src):原图
//参数2(dst):处理后图像
//参数3(kernel):内核,可以是正方向或者矩形,可以通过cv2.getStructuringElement()函数创建
//参数4(anchor ):锚点
//参数5(iterations):迭代次数,如连续腐蚀几次
//参数6(borderType ):边框类型
//参数7(borderValue ):边界值

28,morphologyEx:形态学滤波

CV_EXPORTS_W void morphologyEx( InputArray src, OutputArray dst,
                                int op, InputArray kernel,
                                Point anchor = Point(-1,-1), int iterations = 1,
                                int borderType = BORDER_CONSTANT,
                                const Scalar& borderValue = morphologyDefaultBorderValue() );


//参数1(src):原图
//参数2(dst):处理后图像
//参数3(op):形态学操作的类型,可以是腐蚀、膨胀、开运算、闭运算、顶帽、黑帽等
//参数4(kernel):内核,可以是正方向或者矩形,可以通过cv2.getStructuringElement()函数创建
//参数5(anchor ):锚点
//参数6(iterations):迭代次数
//参数7(borderType ):边框类型
//参数8(borderValue ):边界值

注:参数3(op)枚举定义

enum MorphTypes{
    MORPH_ERODE    = 0, 
    MORPH_DILATE   = 1, 
    MORPH_OPEN     = 2, 
    MORPH_CLOSE    = 3, 
    MORPH_GRADIENT = 4, 
    MORPH_TOPHAT   = 5, 
    MORPH_BLACKHAT = 6, 
    MORPH_HITMISS  = 7  
};

/*
    MORPH_ERODE    //腐蚀
    MORPH_DILATE   //膨胀
    MORPH_OPEN     //开运算
    MORPH_CLOSE    //闭运算
    MORPH_GRADIENT //梯度
    MORPH_TOPHAT   //顶帽
    MORPH_BLACKHAT //白帽
    MORPH_HITMISS  //Hit-or-Miss 运算,是一种特殊的形态学运算,通常用于检测满足特定形状的物体
*/

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

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

相关文章

SOEM源码解析——ec_init(初始化单网卡主站)

0 工具准备 1.SOEM-master-1.4.0源码1 ec_init总览 /** Initialise lib in single NIC mode:初始化库在单网卡模式* param[in] ifname Dev name, f.e. "eth0" 设备名* return >0 if OK* see ecx_init*/ int ec_init(const char * ifname) {return ecx_init(&…

构建高性能嵌入式系统的技术要求

目录 关键的技术要求 硬件设计 嵌入式操作系统&#xff08;Embedded Operating System&#xff09; 内存管理 电源管理 通信接口 实时性能 软件优化 安全性 关键的技术要求 硬件设计&#xff1a; 处理器选择&#xff1a; 选择适当的处理器架构&#xff0c;考虑性能、功…

点大商城V2版 2.5.2.1 全开源独立版 多小程序端+unipp安装教程

点大商城V2是一款采用全新界面设计支持多端覆盖的小程序应用&#xff0c;支持H5、微信公众号、微信小程序、头条小程序、支付宝小程序、百度小程序&#xff0c;本程序是点大商城V2独立版&#xff0c;包含全部插件&#xff0c;代码全开源&#xff0c;并且有VUE全端代码。分销&am…

MMDetection 系列(一): 初步入门配置文件

参考文档 不得不知的 MMDetection 学习路线(个人经验版) 轻松掌握 MMDetection 整体构建流程(一) 学习配置文件 MaskRCNN 配置文件的逻辑 整体来说&#xff0c;配置文件包含以下几个部分&#xff1a; 数据集和评测器配置模型配置训练和测试的配置优化相关配置钩子配置(TODO…

Web测试与APP测试详解

前言 单纯从功能测试的层面上来讲的话&#xff0c;App 测试、Web 测试在流程和功能测试上是没有区别的&#xff0c;但由于系统结构方面存在差异&#xff08;web 项目&#xff0c;b/s 架构&#xff1b;app 项目&#xff0c;c/s 结构&#xff09;在测试中还是有不同的侧重点内容…

使用opencv和dlib库(C++代码)实现人脸活体检测(眨眼、张嘴、摇头检测)

前言 本文章使用opencv和dlib库,使用C++代码实现了人脸活体检测,包括眨眼检测、张嘴检测以及摇头检测,可以对静态图片和活体进行有效区分。效果展示 Dlib库介绍 dlib是一个开源的C++机器学习库,它提供了一系列用于图像处理、人脸检测、人脸识别、物体检测、图像标注等功能的…

stable diffusion公司发布4款LLM大语言模型,为何大家都喜爱LLM?

stable diffusion模型是Stability AI开源的一个text-to-image的扩散模型&#xff0c;其模型在速度与质量上面有了质的突破&#xff0c;玩家们可以在自己消费级GPU上面来运行此模型&#xff0c;本模型基于CompVis 和 Runway 团队的Latent Diffusion Models。本期我们不介绍stabl…

口才不好可以做管理岗吗?

口才不好也可以选择管理岗位 口才是很重要的职场技能之一&#xff0c;但是并不代表没有口才就不能从事管理工作。管理岗位需要的不仅是口才&#xff0c;还包括组织能力、决策能力、问题解决能力等多种素质。下面我从以下几个方面来分析一下&#xff0c;口才不好的人也有可能选…

MySQL(8):聚合函数

聚合函数介绍 聚合函数&#xff1a; 对一组数据进行汇总的函数&#xff0c;输入的是一组数据的集合&#xff0c;输出的是单个值。 聚合函数类型&#xff1a;AVG(),SUM(),MAX(),MIN(),COUNT() AVG / SUM 只适用于数值类型的字段&#xff08;或变量&#xff09; SELECT AVG(…

C++prime之输入输出文件

作为一种优秀的语言&#xff0c;C必然是能操作文件的&#xff0c;但是我们要知道&#xff0c;C是不直接处理输入输出的&#xff0c;而是通过一族定义在标准库中的类型来处理IO的。 ‘流’和‘缓冲区’ ‘流’和‘缓冲区’ C程序把输入输出看作字节流&#xff0c;并且其只检查…

【数据集处理】基于Python处理EAR5数据

基于Python处理EAR5数据 1 EAR5数据简介2 数据集处理准备工作&#xff1a;xarray库安装2.1 数据预处理-剔除异常值 参考 1 EAR5数据简介 ERA5是ECMWF&#xff08;欧洲中期天气预报中心&#xff09;对1950年1月至今全球气候的第五代大气再分析数据集。 包含了四个基本变量(日…

[SSD综述 1.4] SSD固态硬盘的结构和原理导论

依公知及经验整理,原创保护,禁止转载。 专栏 《SSD入门到精通系列》 <<<< 返回总目录 <<<< ​ 前言 机械硬盘的存储系统由于内部结构, 其IO访问性能无法进一步提高,CPU与存储器之间的性能差距逐渐扩大。以Nand Flash为存储介质的固态硬盘技术的发展,…

【Python实例】netCDF数据介绍及处理

netCDF数据处理 netCDF数据介绍1 netCDF数据结构1.1 维度(Dimensions)1.2 变量&#xff08;Variables&#xff09;1.3 坐标变量&#xff08;Coordinate Variables)1.4 属性&#xff08;Attributes&#xff09; 2 netCDF数据处理方法1&#xff1a;利用netCDF4打开nc格式数据2.1.…

Python基础入门例程33-NP33 乘法与幂运算(运算符)

最近的博文&#xff1a; Python基础入门例程32-NP32 牛牛的加减器&#xff08;运算符&#xff09;-CSDN博客 Python基础入门例程31-NP31 团队分组&#xff08;列表&#xff09;-CSDN博客 Python基础入门例程30-NP30 用列表实现队列&#xff08;列表&#xff09;-CSDN博客 目…

水经微图Web版从入门到精通

我们在《47GB水经微图从入门到精通视频教程》和《163M水经微图从入门到精通文档教程》中&#xff0c;为大家分享了水经微图PC版的教程。 这里&#xff0c;我们再为大家分享水经微图Web版的文档教程。 水经微图Web版教程 水经微图Web版的教程&#xff0c;主要包括基础名词、…

【日常记录】关于LinkedHashMap中key为数字字符串根据compareTo排序的问题

今天在修复Bug的时候&#xff0c;在项目中发现有这样一段代码&#xff08;为了方便&#xff0c;下面用一个例子进行演示&#xff09;。 项目中使用了LinkedHashMap key为Long类型&#xff0c;value为String类型。 并且&#xff0c;LinkedHashMap 使用Stream流 对key进行升序的排…

Java web(六):FilterListenerAJAX

文章目录 一、Filter1.1 基本介绍1.2 过滤器的执行流程1.3 拦截路径配置1.4 过滤器链1.5 案例 二、Listener三、AJAX3.1 快速入门3.2 Axios异步框架 四、 JSON4.1 JSON基础语法4.2 Fastjson 五、 案例JSONAxiosServlet Java web的三大组件&#xff1a;Servlet、Filter、Listene…

2023最新版本 FreeRTOS教程 -5-切断驱动和应用的直接关联与多输入的编码思路

在多输入的场景方便添加新的设备如图 总体的思路框图 函数讲解&#xff08;图片太抽象通过这个函数理解&#xff09; 写入自己的队列 统一数据(建议读取自己的队列 再统一到应用的队列 这里图方便省略了) 通过统一的数据做出执行操作 验证 队列为空直接阻塞 通过三个按…

AST注入-从原型链污染到RCE

文章目录 概念漏洞Handlebarspug 例题 [湖湘杯 2021 final]vote 概念 什么是AST注入 在NodeJS中&#xff0c;AST经常被在JS中使用&#xff0c;作为template engines(引擎模版)和typescript等。对于引擎模版&#xff0c;结构如下图所示。 如果在JS应用中存在原型污染漏洞&…

Linux网络配置、ping不通外网解决办法

有很多说服务当中有五项才是对的&#xff0c;也不一定&#xff0c;我这里也只有四项&#xff0c;所以在尝试一些其他办法后再决定重新安装vmware吧&#xff0c;最开始我也ping不成功&#xff0c;查看也是四项&#xff0c;重新装了一次还是四项&#xff0c;找了一些办法&#xf…