OpenCv简单应用
基本操作
图像读取:
12345# 图像读取有两种格式# 1.cv2.IMREAD_COLOR 彩色图像# 2.cv2.IMREAD_GRAYSCALE 灰色图像img = cv2.imread("图像路径", 图像读取格式)img.shape # === 例(414,500, 3)
该方法返回值是一个 numpy 数组, 是一个三维数组
其含义分别是 y(竖直 h),x(水平 w), BGR(三原色), 在opencv中的色彩是BGR 不是RGB
图像的显示
12345cv2.imshow("窗口名称", 图像数据)# 窗口等待时间 如果设置为0的话则需要手动关闭 cv2.waitKey(0)# 使用此方法可以在等待结束之后关闭窗口,cv2.destoryAllWindows()
视频的读取
cv2.VideoCapture可以捕捉摄像头,用数字来控制不同的设备,例如0,1
如果是视频文件,直接指定好路径即可
123456789101112131415161718192021222 ...
matplotlib的使用
特点
能够将数据进行可视化,更直观的呈现
使数据更加直观,根据有说服力
导入方式:
1234567891011from matplotlib import pyplot as plt # 产生数据x = range(2,26,2)y = [15,13,14.5,17,20,25,26,26,24,22,18,15]# 开始作图plt.plot(x, y)plt.scatter(x, y)# 展示图plt.show()
可以实现的方法:
设置图片大小(高清无码大图)
1234fig = plt.figure(figsize=(20,8), dpi = 80)# figure 是图形的意思,在这里指的是我们画的图# 通过实例化一个figure并且传递参数,就能够在后台自动使用该figure实例# 在图像模糊的时候可以传入dpi参数,让图片更清晰
保存到本地
123plt.plot()# 开始保存,一定要在图像画完之后在保存plt.savefig("图片想要保存的路径")
描述信息,x轴y轴,这个图的信息
123plt.xla ...
需要准备的东西:
python基础, html, css
web请求过程分析
服务器的渲染:在服务器那边直接把数据和html整合在一起,统一返回给浏览器
在页面源代码中可以看到数据
客户端渲染:
第一次请求只要一个html骨架,第二次请求拿到数据,进行数据展示
在页面源代码中看不到数据
HTTP协议(超文本传输协议)
Http协议吧一条信息分为三大块内容,无论是请求还是相应都是三大块
请求:
1. 请求行 -> 请求方式 请求url地址 协议
2. 请求头 -> 放一些服务器要使用的附加信息
3. 请求体 -> 一般放一些请求参数
相应
1. 状态行 -> 协议 状态码
2. 响应头 -> 放一些客户端要使用的一些附加信息
3. 响应体 -> 服务器返回的真正客户端要使用的内容(Html, json)等
请求头中最常见的一些重要内容(爬虫需要):
User-Agent:请求载体的身份标识(用啥发送的请求)
Referer:防盗链(这次请求是从哪个页面来的,反爬会用到)
cookie:本地字符串数据信息(用户登录信息,反爬的t ...
JAVA笔记
注释需要注意的地方:
/** */这是文档注释,会生成一个html文件来对这个文档进行说明
多行注释中,注释不能嵌套
编译需要注意的
一个java文件中可以生命多个class但是最多只能有一个class被public修饰而且要求声明为public的类的类名必须与源文件相同
程序入口是main()方法,格式是固定的
输出语句
System.out.println(): 输出完之后有换行
System.out.print(): 输出完之后不换行
编译之后会生成一个或多个字节码文件,字节码文件的文件名与java文件中类名相同
JDK = JRE + Java的开发工具(javac.exe.java.exe. javadoc.exe)
JRD = JVM + JAVA 核心类库
配置path环境变量目的是为了在cmd运行框中,任何盘之下都可以进行java语法的调用
命名规范
包名:多单词组成时所有字母都小写:xxxyyyzzz
类名,接口名:多单词组成时所有单词的首字母大写:XxxYyyZzz
变量名,方法名:多单词组成时,第一个单词首字母 ...
最短路径(Dijkstra方法)
求两点之间的最短路径
最短路径(Dijkstra)和最小生成树(prim, kruskal)的区别:
最短路径:是两个点之间的最短路径
最小生成树:是这几个节点之间的链接距离最短,但是不能够保证两点之间的距离一定是最短的
步骤(有向图)
我们的目标图为(使用邻接矩阵的方法):
0
1
2
3
4
5
0
∞
∞
10
∞
30
100
1
∞
∞
5
∞
∞
∞
2
∞
∞
∞
50
∞
∞
3
∞
∞
∞
∞
∞
10
4
∞
∞
∞
20
∞
60
5
∞
∞
∞
∞
∞
∞
我们先创建一个数组
这个数组的每一个元素都是一个节点,每一个元素都要包括:
这个节点是否被选取过了(如果被选取过了就是证明这个节点的最短路径已经找到了)
起始位置到这个节点的距离
这个节点的上一个节点是谁
节点名称
节点状态
节点权重
前一个节点
0
0
∞
null
1
0
∞
null
2
0
∞
null
3
0
∞
null
4
0
∞
null
5
0
∞
null
...
0-1背包问题
蛮力枚举法
依次列出所有可能情况!!!
n表示有n个商品, C表示容量
其中颜色相同的是需要重复计算的
带备忘的递归
为了解决这个问题->需要大量计算重复的过程,这个时候我们可以引进一个“备忘录”,如果遇到需要重复计算的式子的话,我们可以直接重备忘录中获取。
伪代码的实现:
KnapsackMR(i, c)
1输入:商品集合{1,...,i},背包容量c
1输出:最大总价格P[i, c]
1if(c < 0) then 容量为零 返回负无穷
1return 负无穷
1end
1if i ≤ 0 then 如果商品的个数小于零的话,返回零
1return 0
1end
1if P[i, c] ≠ NULL then 如果备忘录中有这个的话就不用计算 直接返回即可
1return P[i, c]
1end
1P1 = KnapsackMR(i-1, c-vi)
1P2 = KnapasckMR(i-1, c)
1p[i, c] <= max{P1 + pi, P2}
1return P[i, c]
计算 ...
最小编辑距离
目的:找出串S经过多少次变化之后成为串T,要让这个次数变的最小
方法:插入,删除,替换
.注意 :这里我们只对串S进行操作
操作方法
删除方法:
S删除最后一位来进行对串T的转换
D[i, j] = D[i-1, j] + 1 ==>这里的含义是:S, T串中分别以i和j结尾的的最小编辑距离,依靠于D[i-1, j] 的最小编辑距离 + 1(删除操作)
插入方法:
在串S的后面插入串T的最后一位(因为是要将串S变为T所以 需要在串S的后面加入T的最后一个元素)
S最后插入一个元素来进行对串T的转换
D[i, j] = D[i, j-1] + 1 ==>这里的含义就是 S, T串中分别以i和j结尾的的最小编辑距离,依靠于串S的i位和串T的j-1为的最小编辑距离 + 1 (串S进行插入操作 插入串T的最后一位)
替换操作
在进行字符串变化操作的时候我们可以通过替换S的最后一个元素为T的最后一个元素,来进行字符串的变换操作
D[i , j] = D[i-1, j-1] + (a = 0 if S[i] == T[j] else ...
钢条切割问题
问题背景
现在有一个长度为10的钢条,可以零成本 将其切割成多段长度更小的钢条,我们先要求出最大收益
钢条长度
0
1
2
3
4
5
6
7
8
9
10
价格p
0
1
5
8
9
10
17
17
20
24
24
如果我们不切割的话可以获得的最大收益为 24
如果我们按照 2 2 6 切割方法,收益为 27
所以不同的切割方法收益不同,我们寻求的就是收益最大的切割方法
问题定义
输入:
钢条的长度n
价格表pl(1≤ l ≤n):表示长度为l的钢条价格
输出:
求得一组切割方法,令收益最大化
问题观察
假设钢条能够至多切割一次:有以下这几种情况
我们就需要从这几种切割情况中寻找出收益最大的,max{p[i] + p[10-i], p[10]}
如果钢条能够切割两次:
我们可以现将钢条切割出一段
然后再剩余的钢条中继续切割
这时候 长度为8的就可以看做切割次数为一 的那一种情况
这里可能存在最优子结构 和重叠子问题
问题结构分析
问题表示:
C[j]:切割长度为j的钢条可得到的最大总收益
递推关系的建立
...
最长公共子序列问题(动态规划)
给定两个序列X和Y:
其公共序列为:
这里我们要找出它的最长子序列,由上面的情况得出最长的公共自序列长度为4 为BCAB
如果我们采用枚举法的话,有如下这种情况:
我们再次观察一下这个公共自序列:
我们发现长一点的数组依靠于短一点的数组:这时候可能会出现最优子结构 和重叠子问题
当一个结构里面包含最优子结构问题和重叠子问题的时候我们就应该想到使用动态规划来解决这个问题
动态分析问题
我们采用C[i, j] 来表示[1…i]和Y[1…j]的最长公共子序列长度
我们从最后一个字母来开始推导,有两种情况,
情况一:
这两个序列的最后一个字母不相同
如果最后两个字母不同的话,可分为两种情况
情况一
C[i, j] = C[i, j -1 ] + 0
情况二
C[i, j] = C[i-1, j] + 0
情况二:
这两个序列的最后一个字母相同。
这里面需要分为三种情况:
第一种:最后这个相同的字符在最长子序列中
第二种:最后这个相同的字符不一定出现在最长子序列中,我们删除第一个序列的最后一个,在和第二个序列相比较
第三种:最后这 ...