EmGU(4.7) 和C#中特征检测算法详解集合

news2024/11/18 12:18:25

C#联合Emgu实现计算机视觉任务(特征提取篇)


文章目录

  • C#联合Emgu实现计算机视觉任务(特征提取篇)
  • 前言
  • 一、Emgu库中特征提取有哪些类函数?
  • 二、特征提取函数
    • 1.AgastFeatureDetector类
    • 2.AKAZE 类
    • 3.FastFeatureDetector类
    • 4.GFTTDetector类
    • 5.KAZE类
    • 6.MSER 类
    • 7.ORB类
    • 8.SIFT 类
    • 9.SimpleBlobDetector类
    • 10.StarDetector类
    • 11.MSDDetector类
    • 12.HarrisLaplaceFeatureDetector类
    • 13.BriefDescriptorExtractor 方法
  • 三、SIFT,StarDetector等特征检测类的方法
    • 1.Compute方法
    • 2.Detect方法
    • 3.DetectAndCompute 方法
    • 4.DetectRaw 方法
  • 四、特征匹配类
    • 1.BFMatcher方法
    • 2.FlannBasedMatcher方法
  • 总结


前言

Emgu库是将OpenCV使用.net编程语言(C#)封装成的.net库。在实际软件开发中具有重要用途。
图像特征提取是从原始图像中提取对图像识别、分类、检索等任务有用的信息。这些特征通常具有对变换、光照、尺度等因素的不变性,从而使得后续任务更为稳定和可靠。
针对Emgu库中间不同版本之间Api函数差异大,而且目前缺少结合实际例子的Api学习,本文对Emgu原文档进行解读并配备实例进行演示。

官方文档阅读地址:https://emgu.com/wiki/index.php/Version_History#Emgu.CV-4.7.0
官方Github地址:https://github.com/emgucv/emgucv
早期版本下载链接:https://sourceforge.net/projects/emgucv/


一、Emgu库中特征提取有哪些类函数?

EmGU库中的特征描述符一般是在EmGU.CV.Features2D和XFeatures2D这两个名称空间中,主要是图像用于二维特征检测、提取和匹配。在这两个库中有大家熟悉的 SIFT,ORB,MSER,HarrisLaplace等特征描述符,也包括 BFMatcher和FlannBasedMatcher等特征匹配算法,还有DrawKeypoints,DrawMatches等一些非常实用的方法。下面将给大家详细介绍一下这些类函数的使用。

二、特征提取函数

1.AgastFeatureDetector类

命名空间:Emgu.CV.Features2D
构造函数:AgastFeatureDetector(
int threshold = 10,
bool nonmaxSuppression = true,
AgastFeatureDetector.Type type = AgastFeatureDetector.Type.OAST_9_16)
参数说明
1)阈值threshold
数据类型:System.Int32
2)非极大值抑制 nonmaxSuppression
数据类型:System.Boolean

算法详解

代码示例:

using Emgu.CV;
using Emgu.CV.XFeatures2D;
using Emgu.CV.Features2D;
using Emgu.CV.Structure;
using System.Drawing;
//定义特征检测器和图像
Mat input=new Mat(img_path);
Mat output=new Mat();
AgastFeatureDetector detector=new AgastFeatureDetector(threshold:100,nonmaxSuppression:true);
//返回可迭代的MKeyPoint数组类
MKeyPoint[] modelKeyPoints = detector.Detect(input, null);
//利用Features2DToolbox中绘制DrawKeypoints函数绘制关键点
Features2DToolbox.DrawKeypoints(input, new VectorOfKeyPoint(modelKeyPoints), output, new Bgr(0, 0, 255));
CvInvoke.Imshow("out_img", output);
CvInvoke.WaitKey(0);

实例演示:
AGast检测结果

相关论文:

Adaptive and generic corner detection based on the accelerated segment test. In Proceedings of the European onference on Computer Vision (ECCV’10).`下载地址

2.AKAZE 类

命名空间:Emgu.CV.Features2D
构造函数:AKAZE(
AKAZE.DescriptorType descriptorType = AKAZE.DescriptorType.Mldb,
int descriptorSize = 0,
int descriptorChannels = 3,
float threshold = 0.001f,
int nOctaves = 4,
int nOctaveLayers = 4,
KAZE.Diffusivity diffusivity = KAZE.Diffusivity.PmG2
)
参数说明
1)提取的描述符的类型descriptorType(可选)
数据类型: Emgu.CV.Features2D.AKAZE.DescriptorType
2)描述符的大小(以位为单位)descriptorSize
数据类型:System.Int32
3)描述符中的通道数 descriptorChannels
数据类型:System.Int32
4)检测器对接受点的响应阈值 threshold
数据类型:System.Single
5)图像的最大八度演变 nOctaves
数据类型:System.Int32
6)每个级别的默认子级别数 nOctaveLayers
数据类型:System.Int32
7)扩散系数类型 diffusivity
数据类型:Emgu.CV.Features2D.KAZE.Diffusivity

算法详解

代码如下(示例):

同第一个方法,修改检测器
AKAZE detector = new AKAZE();

实例演示:
在这里插入图片描述


3.FastFeatureDetector类

命名空间:Emgu.CV.Features2D
构造函数:FastFeatureDetector(
int threshold = 10,
bool nonmaxSupression = true,
FastFeatureDetector.DetectorType type = FastFeatureDetector.DetectorType.Type9_16
)
参数说明:同AgastFeatureDetector类
threshold 指中心像素和围绕该像素的圆上的像素的强度之差的阈值。

算法详解

代码如下(示例):

同第一个方法,修改检测器
FastFeatureDetector detector = new FastFeatureDetector();

实例演示:
FastDete

4.GFTTDetector类

命名空间:Emgu.CV.Features2D
构造函数:GFTTDetector(
int maxCorners = 1000,
double qualityLevel = 0.01,
double minDistance = 1,
int blockSize = 3,
bool useHarrisDetector = false,
double k = 0.04
)
参数说明
1)要检测的最大特征数 maxCorners
数据类型:System.Int32
2) 最大最小特征值的乘数;指定图像角点的最低可接受范围 qualityLevel
数据类型:System.Double
算法详解
3)限制的,指定返回拐角之间可能的最小距离;使用欧几里得距离。minDistance
数据类型:System.Double
4)平均块的大小,传递给函数cvCornerMinEigenVal或cvCornerHarris blockSize
数据类型:System.Int32
5)如果为真,将使用Harris 角点检测器 useHarrisDetector
数据类型:System.Boolean

代码如下(示例):

同第一个方法,修改检测器
 GFTTDetector detector = new GFTTDetector(maxCorners: 20);

实例演示:
GFTT

5.KAZE类

命名空间:Emgu.CV.Features2D
构造函数:KAZE(
bool extended = false,
bool upright = false,
float threshold = 0.001f,
int octaves = 4,
int sublevels = 4,
KAZE.Diffusivity diffusivity = KAZE.Diffusivity.PmG2
)
参数说明
1) 设置为启用扩展(128字节)描述符的提取 extended
数据类型:System.Boolean
2) 设置为启用直立描述符(非旋转不变)。upright
数据类型:System.Boolean
其他参数同上

代码如下(示例):

同第一个方法,修改检测器
KAZE detector = new KAZE();

实例演示:
KAZE

6.MSER 类

命名空间:Emgu.CV.Features2D
构造函数:MSER(
int delta = 5,
int minArea = 60,
int maxArea = 14400,
double maxVariation = 0.25,
double minDiversity = 0.2,
int maxEvolution = 200,
double areaThreshold = 1.01,
double minMargin = 0.003,
int edgeBlurSize = 5
)
参数说明

  1. delta
    数据类型:System.Int32
  2. 修剪小于最小/最大面积的区域 minArea /maxArea
    数据类型:System.Int32
  3. 修剪面积与其子面积相似的区域 maxVariation
    数据类型:System.Double
  4. 回溯到 cut off mser with diversity minDiversity
    数据类型:System.Double
  5. 对于彩色图像,进一步操作 maxEvolution
    数据类型:System.Int32
  6. 导致重新初始化的区域阈值 areaThreshold
    数据类型:System.Double
  7. 忽略太小的边距 minMargin
    数据类型:System.Double
  8. 边缘模糊的光圈大小 edgeBlurSize
    数据类型:System.Int32

代码如下(示例):

同第一个方法,修改检测器
MSER detector = new MSER();

实例演示:
在这里插入图片描述

7.ORB类

命名空间:Emgu.CV.Features2D
构造函数:ORB(
int numberOfFeatures = 500,
float scaleFactor = 1.2f,
int nLevels = 8,
int edgeThreshold = 31,
int firstLevel = 0,
int WTK_A = 2,
ORB.ScoreType scoreType = ORB.ScoreType.Harris,
int patchSize = 31,
int fastThreshold = 20
)
参数说明

  1. 所需特征的数量 numberOfFeatures
    数据类型:System.Int32
  2. 用它来划分从一个金字塔级别到下一个级别的维度 scaleFactor
    数据类型:System.Single
  3. 比例金字塔中的级别数 nLevels
    数据类型:System.Int32
  4. 这些点应该离边界有多远 edgeThreshold
    数据类型:System.Int32
  5. 给出图像的级别。如果为1,则意味着我们还将查看图像。scaleFactor的倍数更大 firstLevel
    数据类型:System.Int32
  6. 描述符的每个单元使用了多少个随机点 WTK_A
    数据类型:System.Int32
  7. 块的大小patchSize
    数据类型:System.Int32
  8. FAST 阈值 fastThreshold
    数据类型:System.Int32

代码如下(示例):

同第一个方法,修改检测器
ORB detector = new ORB();

实例演示:
ORB

8.SIFT 类

命名空间:Emgu.CV.Features2D
构造函数:SIFT(
int nFeatures = 0,
int nOctaveLayers = 3,
double contrastThreshold = 0.04,
double edgeThreshold = 10,
double sigma = 1.6
)
参数说明

  1. 所需特征数量,等于0不影响使用 nFeatures
    数据类型:System.Int32
  2. Octave层数。使用3作为默认值 nOctaveLayers
    数据类型:System.Int32
  3. 对比度阈值。使用0.04作为默认值 contrastThreshold
    数据类型:System.Double
  4. 检测器参数。使用10.0作为默认值 edgeThreshold
    数据类型:System.Double

代码如下(示例):

同第一个方法,修改检测器
SIFT detector = new SIFT();

实例演示:
SiFT

9.SimpleBlobDetector类

命名空间:Emgu.CV.Features2D
构造函数:SimpleBlobDetector(
SimpleBlobDetectorParams parameters = null
)
参数说明
SimpleBlobDetectorParams SimpleBlob检测器的参数,用SimpleBlobDetectorParams定义
详细参数可以看这个链接Click
代码如下(示例):

同第一个方法,修改检测器
SimpleBlobDetectorParams blobDetectorParams = new SimpleBlobDetectorParams();
blobDetectorParams.blobColor = 255;
blobDetectorParams.MinThreshold = 0.2;
SimpleBlobDetector detector = new SimpleBlobDetector(blobDetectorParams);

实例演示:Blob

10.StarDetector类

命名空间:Emgu.CV.XFeatures2D
构造函数:StarDetector(
int maxSize = 45,
int responseThreshold = 30,
int lineThresholdProjected = 10,
int lineThresholdBinarized = 8,
int suppressNonmaxSize = 5
)
参数说明
1)特征的最大尺寸。支持以下参数值:4、6、8、11、12、16、22、23、32、45、46、64、90、128 maxSize
数据类型:System.Int32
2) 阈值为近似拉普拉斯算子,用于消除弱特征。它越大,检索到的特征就越少responseThreshold
数据类型:System.Int32
3)拉普拉斯算子消除边缘的另一个阈值。阈值越大,你得到的点就越多lineThresholdProjected
数据类型:System.Int32
4)用于消除边缘的特征大小的另一个阈值。阈值越大,你得到的点就越多。lineThresholdBinarized
数据类型:System.Int32
5)抑制非最大的值 suppressNonmaxSize
数据类型:System.Int32

代码如下(示例):

同第一个方法,修改检测器
StarDetector detector=new StarDetector();

实例演示:
Start

11.MSDDetector类

命名空间:Emgu.CV.XFeatures2D
构造函数:MSDDetector(
int patchRadius,
int searchAreaRadius,
int nmsRadius,
int nmsScaleRadius,
float thSaliency,
int kNN,
float scaleFactor,
int nScales,
bool computeOrientation
)
参数说明

  1. patchRadius 数据类型:System.Int32
  2. searchAreaRadius 数据类型:System.Int32
  3. nmsRadius 数据类型:System.Int32
  4. nmsScaleRadius 数据类型:System.Int32
  5. thSaliency 数据类型:System.float
  6. kNN 数据类型:System.float
  7. scaleFactor 数据类型:System.Int32
  8. nScales 数据类型:System.Int32
  9. computeOrientation System.Boolean

代码如下(示例):

同第一个方法,修改检测器
 MSDDetector detector = new MSDDetector(patchRadius: 3, searchAreaRadius: 5, nmsRadius: 5,  nmsScaleRadius: 0, thSaliency: 250.0f, kNN: 4, scaleFactor: 1.25f, nScales: -1 , computeOrientation: false);

实例演示:
在这里插入图片描述

12.HarrisLaplaceFeatureDetector类

命名空间:Emgu.CV.XFeatures2D
构造函数:HarrisLaplaceFeatureDetector(
int numOctaves,
float cornThresh,
float DOGThresh,
int maxCorners,
int numLayers)
参数说明
1)标度空间金字塔中的octaves 数量 numOctaves
数据类型:System.Int32
2)Harris 角度度量的阈值 cornThresh
System.float
3)高斯差量表选择的阈值 DOGThresh
System.float
4)要考虑的最大拐角数 maxCorners
数据类型:System.Int32
5)每octave的中间octave numLayers
代码如下(示例):

同第一个方法,修改检测器
 HarrisLaplaceFeatureDetector detector = new HarrisLaplaceFeatureDetector(numOctaves:6,cornThresh:0.01f,DOGThresh:0.01f,maxCorners:5000,numLayers:4);

13.BriefDescriptorExtractor 方法

使用方式:

public BriefDescriptorExtractor(int descriptorSize = 32)
descriptorSize 描述符的大小。它可取16、32或64

三、SIFT,StarDetector等特征检测类的方法

1.Compute方法

使用方式:

public void Compute( IInputArray image, VectorOfKeyPoint keyPoints, IOutputArray descriptors ) 根据给定的关键点位置计算图像上的描述符

代码如下(示例):

using Emgu.CV;
using Emgu.CV.XFeatures2D;
using Emgu.CV.Features2D;
using Emgu.CV.Structure;
using System.Drawing;
//定义特征检测器和图像
 Mat input = new Mat(path);
 Mat descriptors=new Mat();
 AKAZE detector = new AKAZE();
 //返回可迭代的MKeyPoint数组类
 MKeyPoint[] modelKeyPoints = detector.Detect(input, null);
 //利用Compute计算特征描述符 ,descriptors的大小为num_points*dim的二维特征矩阵
 detector.Compute(input, new VectorOfKeyPoint(modelKeyPoints), descriptors);
 CvInvoke.WaitKey(0);

2.Detect方法

使用方式:

public MKeyPoint[] Detect(IInputArray image, IInputArray mask = null) 返回图像中检测的关键点 ,
返回值类型为MKeyPoint,可迭代的对象,包括:Angle;ClassId;Octave;Point;Response ;Size 六个字段成员

3.DetectAndCompute 方法

使用方式:

public void DetectAndCompute( IInputArray image,
IInputArray mask,
VectorOfKeyPoint keyPoints,
IOutputArray descriptors,
bool useProvidedKeyPoints )

参数说明

1)image 输入图像 类型:Emgu.CV.IInputArray
2)mask 掩膜图像,不需要可选择null值 类型:Emgu.CV.IInputArray
3)keyPoints 检测到的关键点将存储在此矢量中 类型:Emgu.CV.Util.VectorOfKeyPoint
4)descriptors 关键点描述符 类型:Emgu.CV.IOutputArray
5)useProvidedKeyPoints 如果为true,则该方法将跳过检测阶段,并计算所提供关键点的描述符

4.DetectRaw 方法

使用方式:

public void DetectRaw( IInputArray image, VectorOfKeyPoint keypoints, IInputArray mask = null )

参数说明 同上

四、特征匹配类

1.BFMatcher方法

使用方式:

public BFMatcher( DistanceType distanceType, bool crossCheck = false)

参数说明

1)距离类型 distanceType
数据类型 Emgu.CV.Features2D.DistanceType
2)指定是否需要交叉检查。使用false作为默认值。crossCheck
数据类型:System.Boolean

代码如下(示例):

Mat mat_father = new Mat(path1);
Mat mat_son= new Mat(path2);
Mat father_descriper = new Mat();
Mat son_descriper = new Mat();
Mat result = new Mat();
VectorOfVectorOfDMatch matches_result = new VectorOfVectorOfDMatch();
KAZE detector = new KAZE();            
BFMatcher matcher = new BFMatcher(DistanceType.L2);
MKeyPoint[] modelKeyPoints_father = detector.Detect(mat_father, null);
MKeyPoint[] modelKeyPoints_son = detector.Detect(mat_son, null);
detector.Compute(mat_father, new VectorOfKeyPoint(modelKeyPoints_father), father_descriper);
detector.Compute(mat_son, new VectorOfKeyPoint(modelKeyPoints_son), son_descriper);

matcher.KnnMatch(son_descriper, father_descriper, matches_result, k:2);

Features2DToolbox.DrawMatches(mat_father,
                              new VectorOfKeyPoint(modelKeyPoints_father),
                              mat_son,
                              new VectorOfKeyPoint(modelKeyPoints_son),
                              matches_result,
                              result,
                              new MCvScalar(0, 0, 125),
                              new MCvScalar(255, 255, 0),
                              null);
CvInvoke.Imshow("result", result);
CvInvoke.WaitKey(0);

实例演示:
在这里插入图片描述

2.FlannBasedMatcher方法

使用方式:

public FlannBasedMatcher(
IIndexParams indexParams,
SearchParams search
)
定义参数
索引参数的类型 Flann.SearchParams searchpar = new .Flann.SearchParams();
搜索参数 Flann.KdTreeIndexParams indexpar=new Flann.KdTreeIndexParams(trees:5);

代码如下(示例):

修改匹配函数即可
Emgu.CV.Flann.SearchParams searchpar = new Emgu.CV.Flann.SearchParams();
Emgu.CV.Flann.KdTreeIndexParams indexpar = new Emgu.CV.Flann.KdTreeIndexParams(trees: 5);
FlannBasedMatcher matcher = new FlannBasedMatcher(indexpar, searchpar);

MKeyPoint[] modelKeyPoints_father = detector.Detect(mat_father, null);
MKeyPoint[] modelKeyPoints_son = detector.Detect(mat_son, null);
detector.Compute(mat_father, new VectorOfKeyPoint(modelKeyPoints_father), father_descriper);
detector.Compute(mat_son, new VectorOfKeyPoint(modelKeyPoints_son), son_descriper);
matcher.Add(father_descriper);
matcher.KnnMatch(son_descriper, matches,k);

Features2DToolbox.DrawMatches(mat_father,
                              new VectorOfKeyPoint(modelKeyPoints_father),
                              mat_son,
                              new VectorOfKeyPoint(modelKeyPoints_son),
                              matches_result,
                              result,
                              new MCvScalar(0, 0, 125),
                              new MCvScalar(255, 255, 0),
                              null);
CvInvoke.Imshow("result", result);
CvInvoke.WaitKey(0);

总结

`在本文中,我们对Emgu最新版本中关于特征点检测,提取以及匹配的算法进行注释说明,并配备了实例演示代码,不足之处,望请指正。

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

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

相关文章

Docker部署(2)——实现两个容器互相访问并运行项目

一、拉取MySQL镜像,并启动镜像对应的容器 由于上一篇文章实现了拉取jdk8的环境,同时将jar包打成了一个镜像。但是要想真正的把项目运行起来(此处仅以单体项目为例)还需要MySQL的容器提供数据支持(当然这里面方法有多种…

深蓝学院C++基础与深度解析笔记 第 4 章 表达式

第 4 章 表达式 一、表达式基础 A、表达式: 由一到多个操作数组成&#xff0c;可以求值并 ( 通常会 ) 返回求值结果: #include <iostream> int main(){int x;x 3; }最基本的表达式&#xff1a;变量、字面值通常来说&#xff0c;表达式会包含操作符&#xff08;运算符…

Vue3项目中引入ElementUI使用详解

目录 Vue3项目中引入 ElementUI1.安装2.引入2.1 全局引入2.2 按需引入viteWebpack 3.使用 Vue3项目中引入 ElementUI ElementUI是一个强大的PC端UI组件框架&#xff0c;它不依赖于vue&#xff0c;但是却是当前和vue配合做项目开发的一个比较好的ui框架&#xff0c;其包含了布局…

TensorFlow详细配置(Python版本)

文章目录 TensorFlow详细配置(Python版本)安装Python环境&#xff08;Python全家桶 Anaconda3&#xff09;环境配置TensorFlow官网对照表CUDA安装cuDNN 安装TensorFlow安装Jupyter Notebook使用方法其他问题 TensorFlow详细配置(Python版本) 安装Python环境&#xff08;Python…

51 最佳实践-安全最佳实践-qemu-ga

文章目录 51 最佳实践-安全最佳实践-qemu-ga51.1 概述51.2 操作方法 51 最佳实践-安全最佳实践-qemu-ga 51.1 概述 qemu-ga&#xff08;Qemu Guest Agent&#xff09;它是运行在虚拟机内部的守护进程&#xff0c;它允许用户在host OS上通过QEMU提供带外通道实现对guest OS的多…

【面试】线上Java程序占用 CPU 过高请说一下排查方法?

文章目录 前言模拟一个高 CPU 场景排查步骤第一步&#xff0c;使用 top 找到占用 CPU 最高的 Java 进程第二步&#xff0c;用 top -Hp 命令查看占用 CPU 最高的线程第三步&#xff0c;保存线程栈信息第四步&#xff0c;在线程栈中查找最贵祸首的线程 前言 这个问题可以说是 Ja…

【java】JDK21 要来了

文章目录 前言更丝滑的并发编程模式虚拟线程&#xff08;Virtual Threads&#xff09;结构化并发&#xff08;Structured Concurrency&#xff09;作用域值&#xff08;Scoped Values&#xff09; 试验一下虚拟线程的例子结构化编程的例子Scoped Values 的例子 前言 不过多久&…

算法与数据结构——递归算法+回溯算法——八皇后问题

八皇后问题 八皇后问题是一个经典的回溯算法问题&#xff0c;目的是在88的国际象棋棋盘上放置八个皇后&#xff0c;使得没有皇后可以互相攻击&#xff08;即没有两个皇后在同一行、同一列或同一对角线上&#xff09;。 回溯算法是一种解决问题的算法&#xff0c;它通过尝试所有…

软件质量保障QA

软件质量保障 目录概述需求&#xff1a; 设计思路实现思路分析1.alibaba guileline2.ckeckstyle3.findBugs4.PMD5.SourceMononiot 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness…

2014年全国硕士研究生入学统一考试管理类专业学位联考英语(二)试题

2014年全国硕士研究生入学考试英语(二)试题 Section I Use of English Directions:   Read the following text. Choose the best word(s) for each numbered blank and mark A, B, C or D on ANSWER SHEET. (10 points)   Thinner isn’t always better. A number of st…

软考A计划-网络工程师-交换机与路由器的配置

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff…

MyBatis­-Plus入门

目录 1.特性&#xff1a; 2.mybatis-plus 快速使用 3.mybatis与mybatis-plus实现方式对比 4.BaseMapper接口介绍 5.mybatis-plus中常用的注解 7.全局ID生成策略 8.逻辑删除&#xff08;1&#xff1a;局部逻辑删除&#xff1b;2&#xff1a;全局逻辑删除&#xff09; 8.…

Java代码质量分析Sonar

目录 1. sonar安装1.1 简介1.1.1 客户端1.1.2 sonar 版本区分1.1.2.1 社区版1.1.2.2 开发者版1.1.2.3 企业版 1.2 安装部署1.2.1 修改文件句柄数1.2.2 创建挂载目录1.2.3 创建docker-compose.yml1.2.4 启动1.2.4.1 访问测试 1.2.5 安装插件1.2.5.1 汉化插件 1.3 静态分析插件介…

新手快速搭建springboot项目

一、创建项目 1.1、创建项目 1.2、配置编码 1.3、取消无用提示 1.4、取消无用参数提示 二、添加POM父依赖 <!-- 两种方式添加父依赖或者import方式 --> <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-p…

redis-conf

1 大小写不敏感 2 包含文件 3 网络 4 通用配置 5 快照 6 复制 -----待补充 7 安全 security 8 限制 clients 9 APPEND ONLY MODE aof模式

OpenCV项目开发实战-- 将一个三角形变形为另一个三角形 ( C++ / Python )代码实现

文末附基于Python和C++两种方式实现的测试代码下载链接 图 1:左图中蓝色三角形内的所有像素都已转换为右图中的蓝色三角形。 在本教程中,我们将看到如何将图像中的单个三角形变形为不同图像中的另一个三角形。 在计算机图形学中,人们一直在处理扭曲三角形,因为任何 3D 表…

hadoop集群三之hive安装

这里记录下自己使用虚拟机详细安装hive的过程&#xff0c;在安装hive之前需要保证咋们已经安装好了hadoop&#xff0c;没有的话可以参考我之前的安装的流程 安装mysql # 更新密钥 rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022# 安装Mysql yum库 rpm -Uvh http…

初识 Linux 进程

问题 strace 输出中的 execve(...) 究竟是什么&#xff1f; 进程生命周期 操作系统内部定义了进程的不同状态 Linux 进程基本概念 进程是 Linux 任务的执行单元&#xff0c;也是 Linux 系统资源的分配单元 每个 Linux 应用程序运行后由一个或多个进程构成 每个 Linux 进程可…

对称密钥【密码学】(四)

一、前言 在使用单向散列函数校验数据完整性时&#xff0c;需要保证原始的散列值不能被更改。 因此&#xff0c;在很多场景下&#xff0c;我们并不能仅仅通过单向散列函数来解决完整性问题&#xff0c;还需要其他技术来解决这个问题&#xff0c;如加密技术。 本篇博客就来介绍…

CloudFlare系列--使用第三方来自定义CSDN的IP(蓝精灵)

原文网址&#xff1a;CloudFlare系列--使用第三方来自定义CSDN的IP(蓝精灵)_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍CloudFlare的CDN如何自定义第三方IP。 概述 CloudFlare官网接入域名的方式只能是 NS 接入&#xff0c;这样默认DNS服务器只能改为CloudFlare的DNS服…