特征匹配 SIFT原理 单应性匹配

参考:https://blog.csdn.net/jancis/article/details/80824793https://blog.csdn.net/qq_45769063/article/details/108773998 概念先导特征匹配一幅图像中总存在着其独特的像素点,这些点我们可以认为就是这幅图像的特征,称为特征点。而CV中很重要的图像特征匹配就是以特征点为基础而进行的,一般来讲进行特征匹配的步骤如下: 图像预处理 创建特征检测器 获取特征点及特征描述符 创建特征匹配器 选取优良匹配点 绘制相应的匹配线 本文重点介绍检测算法SIFT和匹配算法单应性检测 尺度空间 高斯金字塔     Read more
NENEIIII's avatar
NENEIIII Apr 17, 2021

Python打包exe的问题记录

pyinstaller常用命令 打包步骤 先cd到项目目录下,在命令行中先用python xxx.py测试,看看有没有缺什么模块—— 很多时候会出现错误:ImportError: No module named xxx(但在IDE中可以运行,这时由于路径的原因) 解决:在报错模块中添加 import sys import os curPath = os.path.abspath(os.path.dirname(__file__)) rootPath = os.path.split(curPath)[0] sys.path.append(rootPath) 运行通过后 执行pyinstaller -F xx.py --workpath temp --distpath Release (最开始不要隐藏命令行 不然出错情况看不到) 即不要添加 -w workpath:可以自定义临时文件(一些缓存)的路径,文件名是temp(自定) distpath:可以自定义生成的文件路径,文件名是release(自定) 不自定义路径的话,默认在当前路径下生成 把生成的exe拖进来运行测试 问题记录 exe在运行时出现错误**”Failed to execute script xxx.exe”** 问题解决方案 exe过大 压缩exe的大小     Read more
NENEIIII's avatar
NENEIIII Apr 10, 2021

Pyqt5自定义下拉框点击事件

实现功能在信息管理模块中,我需要增加删除用户的功能,每次点击下拉框时可以实时扫描当前用户信息(每个用户是单独放在文件夹内,相当于扫描一个大文件夹下的文件夹名),然后选择对应的id进行删除。 comboBox初步想法是为cBox添加点击事件,每次点击都调用一个函数去扫描指定文件夹下的文件名。 QComboBox类中的常用方法如表 方法 描述 addItem() 添加一个下拉选项 addItems() 从列表中添加下拉选项 Clear() 删除下拉选项集合中的所有选项 count() 返回下拉选项集合中的数目 currentText() 返回选中选项的文本 itemText(i) 获取索引为i的item的选项文本 currentIndex() 返回选中项的索引 setItemText(int index,text) 改变序列号为index的文本 QComboBox类中的常用信号 信号 含义 Activated 当用户选中一个下拉选项时发射该信号 currentIndexChanged 当下拉选项的索引发生改变时发射该信号 highlighted 当选中一个已经选中的下拉选项时,发射该信号     Read more
NENEIIII's avatar
NENEIIII Apr 07, 2021

Opencv主要模块和基本操作

主要模块OpenCV中的函数接口大体可以分为如下部分: - core:核心模块,主要包含了OpenCV中最基本的结构(矩阵,点线和形状等),以及相关的基础运算/操作。 - imgproc:图像处理模块,包含和图像相关的基础功能(滤波,梯度,改变大小等),以及一些衍生的高级功能(图像分割,直方图,形态分析和边缘/直线提取等)。 - highgui:提供了用户界面和文件读取的基本函数,比如图像显示窗口的生成和控制,图像/视频文件的IO等。 如果不考虑视频应用,以上三个就是最核心和常用的模块了。针对视频和一些特别的视觉应用,OpenCV也提供了强劲的支持: - video:用于视频分析的常用功能,比如光流法(Optical Flow)和目标跟踪等。 - calib3d:三维重建,立体视觉和相机标定等的相关功能。 - features2d:二维特征相关的功能,主要是一些不受专利保护的,商业友好的特征点检测和匹配等功能,比如ORB特征。     Read more
NENEIIII's avatar
NENEIIII Apr 07, 2021

利用Pytorch训练自己的网络模型

通过继承nn.Module类来实现 在_init_构造函数中申明各个层的定义. 在forward中实现层之间的连接关系,实际上就是前向传播的过程. 注意:pytorch里面一般是没有层的概念,层也是当成一个模型来处理的 例如: # 全连接层 class Linear(Module): __constants__ = ['bias'] def __init__(self, in_features, out_features, bias=True): super(Linear, self).__init__() self.in_features = in_features self.out_features = out_features self.weight = Parameter(torch.Tensor(out_features, in_features)) if bias: self.bias = Parameter(torch.Tensor(out_features)) else: self.register_parameter('bias', None) self.reset_parameters() def reset_parameters(self): init.kaiming_uniform_(self.weight, a=math.sqrt(5)) if self.bias is not None: fan_in, _ = init._calculate_fan_in_and_fan_out(self.weight) bound = 1 / math.sqrt(fan_in) init.uniform_(self.bias, -bound, bound) # 卷积层 class Conv2d(_ConvNd): def __init__(self, in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True, padding_mode='zeros'): kernel_size = _pair(kernel_size) stride = _pair(stride) padding = _pair(padding) dilation = _pair(dilation) super(Conv2d, self).__init__( in_channels, out_channels, kernel_size, stride, padding, dilation, False, _pair(0), groups, bias, padding_mode) 基本步骤简单来讲就是:先继承,再构建组件,最后组装 其中基本组件可从 torch.nn 中获取,或者从 torch.nn.functional 中获取,同时为了方便重复使用组件,可以使用 Sequential 容器将一系列组件包起来,最后在 forward() 函数中将这些组件组装成你的模型     Read more
NENEIIII's avatar
NENEIIII Mar 17, 2021