自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(14)
  • 收藏
  • 关注

原创 基于SVM对Iris进行分类

数据集使用UCI Machine Learning的Iris数据集,下载的文档iris.data内容如图:每一行有五项,前四项代表鸢尾花的性状,第五项代表鸢尾花的种类,有“Iris-setosa”,“Iris-versicolor”,“Iris-virginica”共三类。实现代码(python)import pandas as pdimport numpy as npfrom sklearn.svm import SVCfrom sklearn.model_selection import

2021-12-31 11:11:20 2755

原创 状态压缩动态规划

什么是状态压缩动态规划状态压缩动态规划可以简单粗暴地分为两个步骤:状态压缩状态压缩就是利用二进制数只含0和1的特点来表示是否选择某一项的方法。比如有3个小球,编号分别为1、2、3,那么选择的方案就有:000,001,010,011,100,101,110,111这8种。我们很容易发现它们在十进制中是连续的,并且最大值为2^n - 1。这使得我们能够很容易地表示各种选择的状态并遍历它们。动态规划此时,再根据状态压缩的前提,定义合适的dp数组并找到状态转移方程,就是我们熟悉的dp操作了。注:重

2021-08-30 12:32:17 1053

原创 Detours使用方法,简单明了

什么是Detoursdetours是微软提供的一套工具,主要用于win32 API的拦截。准备工作(环境)首先下载detours的资源,地址:https://github.com/microsoft/detours下载到本地后解压至任意文件夹;打开cmd终端进到这个文件夹下,键入nmake;编译完成后:新建一个工程,将include中的detours.h移动至工程文件下;将lib.X64(X86也有对应目录)下的detours.lib移动至工程文件下;示例代码:#include &l

2021-08-14 23:01:46 7585 4

原创 灰度值为负?问题可能出在这里

最近做机器视觉实验的时候偶尔会出现灰度值为负的情况,但总是不了了之,刚刚我正写着新的报告的时候:没有办法,索性趁这次机会弄个明白,我的错误代码简化如下:IplImage* num; char str[100]; //存储路径 sprintf(str, "C:/Users/Faccy/Desktop/机器视觉/实验图片/8/8-1.bmp"); num = cvLoadImage(str, 0); int w = num->width, h = num->height; for (

2021-05-19 17:16:47 3214 1

原创 从零开始的OTSU阈值分割算法

OTSU阈值分割OTSU阈值分割,我们先直接讲操作:找到图像灰度值的最大和最小值。遍历最小值到最大值,以每一个值为阈值进行分割。找到使得式子:w0*w1*(u0-u1)*(u0-u1)的值最大的阈值,就是我们要找的最佳阈值。是不是觉得整个过程还是挺简单的?然后我们再来看看式子中的每个变量分别代表什么:在步骤3进行分割的时候,大于阈值的像素部分,我们称为前景;小于等于阈值的则称为背景。w0 :前景中的像素对于总像素数的占比。w1 :背景中的像素对于总像素数的占比。u0 :前景部分的像素

2021-05-12 11:17:28 2615 1

原创 迭代阈值分割

迭代阈值分割迭代阈值分割是通过迭代找出合适的阈值,再根据得到的阈值进行分割的方法。迭代找阈值的主要步骤:定义精度dt,即前后两个阈值的差值小于dt时认为找到了合适的阈值。定义初始阈值T0,一般用灰度均值。根据当前阈值T,大于T的灰度值分为一组,取其平均值m1;小于T的灰度值分为另一组,同样取其平均值m2 。得到新的阈值T = (m1 + m2) / 2 。重复步骤3和步骤4知道前后阈值差小于dt 。具体代码:(OpenCV)double dt = 5; //预定义阈值差(精度) do

2021-05-11 15:20:51 3066 1

原创 数组名和数组名取址的区别

数组名arr和数组名&arr取址的区别今天无意中看到的问题,先输出看看:int arr[5] = { 1,2,3,4,5 };cout << arr << endl;cout << &arr << endl;cout << arr + 1 << endl;cout << &arr + 1 << endl;可以看到它们输出的地址相同,但是对两个地址进行+1操作后得到的结果却

2021-05-04 13:49:53 206

原创 AD620的简单使用指南

AD620的简单使用指南AD620是一个经常使用的运算放大器,我们先来看看它的引脚:2,3引脚分别为反向放大电路输入端,正向放大电路输入端;6为输出端;7,4分别接正负电压;1,8之间接电阻,用来调整AD620的放大倍数;5为输出的参考基准,没有特别要求时我们直接接地。那么电路图就是这个样子:我们看到输入端之间的电压差为0.3V,而输出端是3V,也就是说电压差被放大了十倍,那么这个十倍是怎么来的呢?我们看下面的式子。这个式子中,G就是代表的放大倍数,RG则是引脚1和8之间的电阻阻值,图中电阻

2021-04-23 19:18:15 22237 11

原创 并查集

并查集并查集的全称是合并-查找集合,顾名思义它的主要功能就是合并查找。合并:合并两个不相交的集合;查找:查找两个元素是否在同一个集合中。并查集是一个集合,但是其逻辑上的结构却类似一个树,主要表现为:每一个元素都对应着一个parent结点。我们查找的实质,就是查找元素对应的根结点;合并的操作,也是对被合并的集合元素的根进行修改。(在实际操作中,我们会让parent直接对应根结点,后文在“路径压缩”中会讲到)但是在实际操作中,我们只需要把parent值存在数组中,只要做到“心中有树”即可。我们用一个简

2021-04-23 18:37:06 141

原创 KMP算法

KMP算法KMP算法是用于解决字符串匹配的经典算法,就是判断一个字符串是否是另一个字符串的子串。例如现在我们有两个字符串,字符串s: "aabaabaaf"和字符串t: “aabaaf”,我们该如何判断字符串t是否是字符串s的一个子串呢?如果使用暴力匹配,即两个for循环,暴力的时间复杂度是两个字符串长度的乘积。而KMP算法有什么不同呢:就比如字符串s和t的匹配中,当我们匹配到第六个字符时,发现b和f并不匹配,此时按照暴力法我们应该将s的下标+1,继续从t的开头开始匹配;但是如果是KMP算法,就会保

2021-04-23 18:36:10 71

原创 01背包(动态规划解法)

01背包(动态规划解法)01背包是一个很经典的问题,题目如下:有n件物品和一个最多能装重量为W 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品只能用一次,问怎样装载能使背包里物品的价值最大。这里我们用一组简单的数据来进行示例:假设背包最大容量为5物品重量价值物品0115物品1220物品2325物品3430它与普通背包的区别在于,每个物品要么放,要么不放,而普通背包是可以放一部分的,因而普通背包可以通

2021-04-23 18:35:07 2506 1

原创 动态规划

什么是动态规划我们首先看一下递归求斐波那契数列的函数:int fib(int n){ if(n==1||n==2) return 1; else return fib(n-1)+fib(n-2);}假设我们输入的参数是5,那么求解过程为:会发现其中有重复的计算,如fib(3)就算了两次,如果我们将规模扩大,那么重复的计算会更多。为了避免重复计算,我们可以创建一个全局数组,存储fib(n)的值,当需要fib(n)时,可直接参与运算,而不需要再次递

2021-04-23 18:30:54 238

原创 二分法

二分法二分法的思想很简单,确定好上下界,取中间的数,看是否符合条件,若是则将下界更新为中间数后的一位。即每次循环都将当前范围分成两份,然后抛弃不符合题意的一半,显然它的时间复杂度为O(log 2n) 。它适用于较长的数组,并且数组元素必须是排好序的。比如给出一个数组array[10]={1,2,3,4,5,6,7,8,9,10};查找数组中是否含有8,是则输出“Yes”,否则输出“No”。首先它是排好序的,符合条件,我们使用二分法:定义上下界分别为10和1,中间数为(1+10)/2=5,5<8

2021-04-23 18:29:12 248

原创 快速幂

快速幂快速幂的主要作用是求ab对mod取模,尤其适合于指数b和mod很大的情况,它的原理也十分简单,我们举一个简单的例子:210%100如果用循环乘法来实现,一共要执行10次乘法,然后再对100取余数;而快速幂的思想则是减少执行的次数,把210变成(2*2)5,这样做的好处是用一次底数的平方,减少了一半的执行量,指数b越大,减少的操作越多。我们继续,45还能不能继续这样变换呢?当然可以,但是因为5是奇数,我们不能将它直接除以2,但是可以提出一个41,这样我们又可以对剩下的44进行操作了,一直继续下去

2021-04-23 18:27:44 125

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除