- 博客(70)
- 收藏
- 关注
原创 53. 最大子数组和
对于这道题的动态规划解法,最关键的问题是从逻辑上把该问题划分为一个最适合的子问题集。如何理解最适合,最适合代表这种划分方法能带来解决该题最小的时间复杂度和空间复杂度。对于这道题而言,这个最适合的子问题集是用f(i)代表以第 i 个数结尾的「连续子数组的最大和」,那么我们只需要求出每个位置的 f(i),然后返回 f 数组中的最大值即可。这个划分方法很值得寻味,需要找到或是理出其背后的根源思想。...
2022-01-06 19:00:55 109
原创 hw3_CNN问题记录
问题1:为什么变换要先把图片转成PIL类型图片再操作?# Dataset# training 时做 data augmentationtrain_transform = transforms.Compose([ transforms.ToPILImage(), transforms.RandomHorizontalFlip(), # 随机将图片水平翻转 transforms.RandomRotation(15), # 随机旋转图片 transforms.ToTe
2021-03-29 16:14:18 260 1
原创 《Head First 设计模式》笔记12 复合模式
认识模型 - 视图 - 控制器模式(MVC)你是用户——你和视图交互。 视图是模型的窗口。当你对视图做一些事时(比方说,按下“播放”按钮),视图就告诉控制器你做了什么。控制器会负责处理。**控制器要求模型改变状态。**控制器解读你的动作。如果你按下某个按钮,控制器会理解这个动作的意义,并告知模型如何做出对应的动作。**控制器也可能要求视图做改变。**当控制器从视图接收到某一动作,结果可能是它也需要告诉视图改变其结果。比方说,控制器可以将界面上的某些按钮或菜单项变成有效或无效。**当模型状态改变时,
2021-03-05 12:06:46 139 1
原创 《Head First 设计模式》笔记10 状态模式
糖果公司示例:这种弱智的代码写法在变更来临时:所以,我们要重新代码结构:使用状态模式重新设计糖果机器:状态模式:允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。...
2021-03-02 00:28:52 87
原创 《Head First 设计模式》笔记9 迭代器与组合模式
迭代器模式:提供一种方法顺序访问一个聚合对象中的各个原色,而又不暴露其内部的表示。对象村餐厅&煎饼店的迭代器模式实例:迭代器模式类图:设计原则:一个类应该只有一个引起变化的原因。如果我们允许我们的聚合实现他们内部的集合,以及相关的操作和遍历的方法,又会如何?我们已经知道这会增加聚合中的方法个数,但又怎样呢?为什么这么做不好?我们知道避免类内的改变,因为修改代码很容易造成许多潜在的错误。如果有一个类具有两个改变的原因,那么这会使得将来该类的变化几率上升,而当它真的改变时,你的设计中同时有
2021-02-26 14:33:38 127
原创 《Head First 设计模式》笔记8 模板方法模式
模板方法带来的一些好处:上图中的几个好处持怀疑态度。首先代码复用是最无所谓的一件事,我到目前认为纯粹为了复用而使用模板方法是一件很愚蠢的事。这个模板方法的一个麻烦之处在于,如果茶和咖啡在boilWater()或pourInCup()两个方法上出现了分歧,即代码不再一模一样,那么茶和咖啡就需要重新在子类各自实现自己的方法。模板方法模式:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。问题:为什么“算法的结构”就必须不.
2021-02-25 12:47:39 80
原创 《Head First 设计模式》笔记5 单件模式
单件模式:确保一个类只有一个实例,并提供一个全局访问点。单件模式基本实现:单件模式类图:经典的单件模式在加入多线程后会失效,改善方法:
2021-02-25 12:09:06 107
原创 《Head First 设计模式》笔记7 适配器模式与外观模式
面向对象适配器:火鸡和鸭子示例:适配器模式:将一个类的接口转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。适配器模式类图:
2021-02-24 18:54:25 130
原创 《Head First 设计模式》笔记6 命令模式
一个命令模式示例:示例类图:类图中包含一个遥控器类、一个Command接口、一个LightOnCommand具体命令类和一个Light灯设备类。Light的每一个操作对应实现一个Command具体类,Command具体类遵循Command接口。遥控器类的实现也仅针对Command接口编写。这样就做到了遥控器类和具体命令类均只依赖于Command接口,而不依赖彼此的实现,从而遥控器和命令解耦。结果就是任何具体的Command类,只要遵循Command接口,都可以直接插入遥控器中使用。真正执行命
2021-02-23 19:35:57 105
原创 《Head First 设计模式》笔记4 工厂模式
问题:实现的代码里不能有new,一出现new,一旦加入新的具体类,就必须改变代码。也就是说,你的代码并非”对修改关闭”。想用新的具体类型来扩展代码,必须重新打开它。由此提出一个疑问:如何将实例化具体类的代码从应用中抽离,或者封装起来,使他们不会干扰应用的其他部分?...
2021-02-22 17:14:30 138
原创 《Head First 设计模式》笔记3 装饰者模式
开放—关闭原则:类应该对扩展开放,对修改关闭。对扩展开放:欢迎用任何你想要的行为来扩展我们的类。如果你的需要或需求有所改变,那就来吧!动手扩展吧!对修改关闭:我们花了许多时间得到了正确的代码,还解决了所有的bug,所以不能让你修改现有代码。我们必须关闭代码以防止被修改。简单说就是,在不修改代码的情况下,进行功能扩展。在上一章学到的观察者模式即遵循了这个原则:通过加入新的观察者,我们可以再任何时候扩展Subject,而且不需要向主题中添加代码。星巴兹遇到的问题:类数量爆炸、基类加入的新功能并不适用于所
2021-02-21 17:12:28 181
原创 《Head First 设计模式》笔记2 观察者模式
观察者模式:定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。主题(subject)只知道观察者(observer)实现了某个接口(也就是observer接口)。主题不需要知道观察者的具体类是谁、做了些什么或其他任何细节。任何时候我们都可以增加新的观察者。因为主题唯一依赖的东西是一个实现observer接口的对象列表,所以我们可以随时增加观察者。事实上,在运行时我们可以随意增删观察者,主题不会受到任何影响。优点:有新类型的观察者出现时,主题的代码不需
2021-02-21 12:12:51 91
原创 《Head First 设计模式》笔记1 设计模式入门
设计原则1:找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起。换句话说,如果每次新的需求一来,都会使某方面的代码发生变化,那么你就可以确定,这部分的代码需要被抽出来,和其他稳定的代码有所区别。设计原则2:针对接口编程,而不是针对实现编程。在新的设计中,鸭子的子类将使用接口(FlyBehavior与QuackBehavior)所表示的行为,所以实际的“实现”不会被绑死在鸭子的子类中。当某一种行为需要修改时,我们仅修改一次该行为所对应的行为类即可,而不用把每个使用该种行为
2021-02-20 17:26:50 90
原创 《python+opencv3.3视频教学 基础入门》分水岭算法 笔记
OpenCV教程:https://docs.opencv.org/master/d3/db4/tutorial_py_watershed.html图像二值化后,背景为黑,前景为白,用这个二值图像去做Distance Transform,就会得到距离矩阵,这个矩阵的尺寸和二值图像大小相同,而其中的每一个值代表的是该像素点到最近的黑色像素点的远近度,越远,值越高,距离矩阵中该点越亮。我们再将距离矩阵二值化后,就得到了前景种子图像,图像中每一个白色区域必定处于原图的前景中,也因此每一个白色区域是一个种子,分
2020-12-23 17:18:32 128
原创 sklearn 《Text feature extraction》笔记
官方教程见:https://scikit-learn.org/stable/modules/feature_extraction.html#text-feature-extraction6.2.3节1 The Bag of Words representation(词带表示法)文本分析是机器学习算法的一个主要应用领域。然而原始数据、符号序列不能直接反馈给算法本身,因为大多数算法希望得到的是固定大小的数字特征向量,而不是长度可变的原始文本文档。为了解决这个问题,scikit-learn提供了最常见
2020-12-11 22:31:31 483
原创 PyQt5《Menus and toolbars in PyQt5》 笔记
PyQt5 toolbarimport sysfrom PyQt5.QtWidgets import QMainWindow, QAction, qApp, QApplicationfrom PyQt5.QtGui import QIconclass Example(QMainWindow): def __init__(self): super().__init__() self.initUI() def initUI(self):
2020-12-11 16:20:26 95 1
原创 C++ Primer 数组 笔记
数组定义时的编译器扩展因为数组中元素的个数是属于数组类型的一部分,编译的时候维度应该是已知的,所以说,定义数组时数组的维度必须是一个常量表达式,如下:unsigned cnt = 42; // 不是常量表达式constexpr unsigned sz = 42; // 常量表达式,关于constexpr,参见2.4.4节int arr[10]; // 含有10个整数的数组int *parr[sz]; // 含有42个整形指针的数组string bad[cnt]; // 错误:
2020-12-08 20:50:44 125
原创 《python+opencv3.3视频教学 基础入门》其他形态学操作 笔记
顶帽顶帽是原图像与开操作之间的差值图像(右图),最后得到的是原图中各个小块的高亮区,即提取出了原图中的高亮斑点。黑帽黑帽是闭操作图像与原图像的差值图像,可以提取出原图中的黑色斑点。形态学梯度形态学梯度包含:基本梯度、内部梯度、外部梯度基本梯度是用膨胀后的图像减去腐蚀后的图像得到差值图像,也是opencv中支持的计算形态学梯度的方法,而此方法得到的梯度又被称为基本梯度。内部梯度是用原图像减去腐蚀之后的图像得到的差值图像,称为图像的内部梯度。外部梯度图像膨胀之后再减去原来的图像得到的差值图像
2020-12-01 21:38:40 121
原创 《python+opencv3.3视频教学 基础入门》开闭操作 笔记
开操作(Open)先腐蚀后膨胀。对于开操作,选择不同形状的核,可以得到不同的效果。如设置核为(15, 1),即水平线状的核,则在开操作后可以提取出二值图像中的水平线,如下:同理,设置核为(1, 15),即竖直线状的核,则在开操作后可以提取出二值图像相中的竖直线,如下:不止直线,斜线经过开操作后也可以被消掉:使用cv.morphologyEx()设置不同的结构元素,如cv.MORPH_ELLIPSE,圆形,可以把二值图像中类似圆形的白色区域保留下来,消除其他的,如下:注意:结构元素(核)的
2020-12-01 20:03:41 113
原创 《python+opencv3.3视频教学 基础入门》膨胀与腐蚀 笔记
参考:https://blog.csdn.net/alw_123/article/details/83868878https://www.jianshu.com/p/fc07d3065cf1import cv2 as cvimport numpy as np# 腐蚀(图像黑色区域侵蚀白色区域)def erode_demo(image): print(image.shape) gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY) re
2020-12-01 15:52:44 97
原创 《python+opencv3.3视频教学 基础入门》对象测量 笔记
弧长与面积轮廓发现计算每个轮廓的弧长与面积,像素单位多边形拟合获取轮廓的多边形拟合结果approxPolyDP():contour、epsilon越小越折线越逼近真实形状、close是否为闭合区域API参考:https://www.jianshu.com/p/0205c963104d几何矩计算视频源码:import cv2 as cvimport numpy as npdef measure_object(image): # 先弱化一下噪声,如果轮廓识别时识别到了噪声,因为
2020-12-01 14:22:10 114 1
原创 《python+opencv3.3视频教学 基础入门》轮廓发现 笔记
轮廓发现轮廓发现是基于图像边缘提取的基础寻找对象的轮廓的方法。所以边缘提取的阈值选定会影响Uzi中轮廓发现结果。APIfindContours() 发现轮廓drawContours() 绘制轮廓注:虽然轮廓发现是基于图像边缘提取的结果来进行发现的,但是在图像边缘提取这一步我们可以只做到计算出梯度,然后用梯度图直接做轮廓发现,这样可以保留更多的图像信息。注:图像中的蓝色在转为灰度图时像素值可能会较小,导致Canny检测不到边缘,可以尝试把Canny的低阈值调小一些。视频源码:import cv
2020-12-01 10:44:41 117
原创 《python+opencv3.3视频教学 基础入门》霍夫变换(圆检测) 笔记
OpenCV官方指导:https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_imgproc/py_houghcircles/py_houghcircles.html注:因为霍夫圆检测对噪声比较敏感,所以首先要对图像做中值滤波。基于效率考虑,OpenCV中实现的霍夫变换圆检测是基于图像梯度实现的,分为两步:1. 检测边缘,发现可能的圆心。2. 基于第一步的基础上从候选圆心开始计算最佳半径大小。视频源码:impor
2020-11-30 21:11:29 191
原创 《python+opencv3.3视频教学 基础入门》霍夫变换(直线检测) 笔记
参考:https://blog.csdn.net/saltriver/article/details/80547245**如果x-y图像空间中有很多点在k-b空间中相交于一点(即x-y图像空间中有很多的点同属于一对儿k-b),那么这个交点就是我们要检测的直线。**这就是霍夫变换检测直线的基本原理。...
2020-11-30 17:28:08 153
原创 《python+opencv3.3视频教学 基础入门》Canny边缘提取 笔记
参考:https://zhuanlan.zhihu.com/p/42122107
2020-11-28 19:46:31 141
原创 QGraphicsItem::boundingRect() 笔记
在官方示例《Elastic Nodes Example》中进行试验,得到以下的现象:初步确定boundingRect的两个参数,第一个是一个QPointF型(点坐标),第二个是一个QSizeF型(size元组)。其中第一个点坐标,设置的是,在item的边框矩阵内做一个坐标系,这个坐标系对应于边框矩阵左上角的点的坐标是什么。如果传(0, 0),则边界矩形左上角坐标就是(0, 0);如果传(- width / 2, -height / 2),边界矩形左上角坐标就是(- width / 2, -height
2020-11-28 10:25:11 5342 1
原创 《python+opencv3.3视频教学 基础入门》图像梯度 笔记
参考:https://blog.csdn.net/saltriver/article/details/78987096Sobel算子参考:https://blog.csdn.net/qq_29540745/article/details/51918004拉普拉斯算子图像深度视频示例:import cv2 as cvimport numpy as np# Sobel算子def sobel_demo(image): grad_x = cv.Sobel(image, cv.CV_32
2020-11-26 17:25:08 121
原创 《python+opencv3.3视频教学 基础入门》图像金字塔 笔记
参考:https://blog.csdn.net/xiamentingtao/article/details/78596240图像的上采样和下采样:https://blog.csdn.net/majinlei121/article/details/46742339图像金字塔的意义参考:https://blog.csdn.net/weixin_38208741/article/details/78081810...
2020-11-26 15:29:10 241 1
转载 图像处理 低频滤波器 笔记
参考:https://blog.csdn.net/weixin_38570251/article/details/82054106https://blog.csdn.net/qinghuaci666/article/details/81737624滤波,实际上是信号处理里的一个概念,而图像本身也可以看成是一个二维的信号,其中像素点灰度值的高低代表信号的强弱。对应的高低频的意义:高频:图像中灰度变化剧烈的点,一般是图像轮廓或者是噪声。低频:图像中平坦的,灰度变化不大的点,图像中的大部分区域。Ope
2020-11-26 11:03:21 872
原创 《python+opencv3.3视频教学 基础入门》图像二值化 笔记
源码:import cv2 as cvimport numpy as np# 全局阈值方法def threshold_demo(image): # 首先转换为灰度图 gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY) # ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU) # 自己制定阈值: # ret, binary
2020-11-26 11:03:00 186
原创 《python+opencv3.3视频教学 基础入门》模板匹配 笔记
源码:import cv2 as cvimport numpy as npdef template_demo(): tpl = cv.imread("C:/cvtest/0002.jpg") target = cv.imread("C:/cvtest/0000.jpg") cv.imshow("template image", tpl) cv.imshow("target image", target) # 要使用的相关性因子 methods =
2020-11-26 11:02:42 169
原创 《python+opencv3.3视频教学 基础入门》直方图反向投影 笔记
源码:import cv2 as cvimport numpy as npfrom matplotlib import pyplot as pltdef back_projection_demo(): sample = cv.imread("C:/cvtest/0002.jpg") target = cv.imread("C:/cvtest/0000.jpg") roi_hsv = cv.cvtColor(sample, cv.COLOR_BGR2HSV) tar
2020-11-26 11:02:11 93 1
原创 《python+opencv3.3视频教学 基础入门》直方图应用 笔记
源码:import cv2 as cvimport numpy as np# 整体的直方图均衡化,可以增强图片对比度,但整体的# 直方图均衡化可能会造成图片的某些部分的信息丢失。# OpenCV中的直方图均衡化都是基于灰度图像,所以彩色图像要先转成灰度图。def equalHist_demo(image): gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY) # cv.equalizeHist()自动调整图像的对比度,把图像变清晰化,对比
2020-11-26 11:01:50 107
原创 《python+opencv3.3视频教学 基础入门》图像直方图 笔记
源码:import cv2 as cvimport numpy as npfrom matplotlib import pyplot as pltdef plot_demo(image): # image.ravel()把image数组拉成一维数组。 plt.hist(image.ravel(), 256, [0, 256]) plt.show()# 绘制图像直方图,可以用来找出图像的特征。def image_hist(image): color = ('
2020-11-25 13:26:44 79
原创 《python+opencv3.3视频教学 基础入门》边缘保留滤波(EPF) 笔记
源码:import cv2 as cvimport numpy as np# 高斯双边模糊def bi_demo(image, sigmacolor, sigmaspace): # Parameter: # 1. src : Source 8-bit or floating-point, 1-channel or 3-channel image. # 2. d : Diameter of each pixel neighborhood that is us
2020-11-25 13:25:39 100
原创 《python+opencv3.3视频教学 基础入门》高斯模糊 笔记
源码:"""高斯模糊"""import cv2 as cvimport numpy as npdef clamp(pv): if pv > 255: return 255 if pv < 0: return 0 else: return pv# 加入高斯噪声def gaussian_noise(image): h, w, c = image.shape for row in rang
2020-11-25 13:21:23 128
原创 《python+opencv3.3视频教学 基础入门》模糊操作 笔记
源码:import cv2 as cvimport numpy as np# 均值模糊,均值模糊可以为图像去噪,均值模糊对随机噪声有非常好的效果。def blur_demo(image): dst = cv.blur(image, (5, 5)) # 卷积核越长,模糊越厉害。行卷积核是竖向模糊,列卷积核是横向模糊。也可以是正方形的卷积核。 cv.imshow("blur_demo", dst)# 中值模糊,可以去掉椒盐噪声。def median_blur_demo(i
2020-11-25 13:20:31 108
原创 《python+opencv3.3视频教学 基础入门》ROI与泛红填充 笔记
源码:import cv2 as cvimport numpy as np# 浸水def fill_color_demo(image): copyImg = image.copy() # 从原图像拷贝出一张图像 h, w = image.shape[:2] mask = np.zeros([h + 2, w + 2], np.uint8) # floodFill() # Parameter: # image: 要浸水的图像 #
2020-11-25 13:19:08 150
原创 《python+opencv3.3视频教学 基础入门》像素运算 笔记
源码:import cv2 as cvimport numpy as npdef add_demo(m1, m2): dst = cv.add(m1, m2) cv.imshow("add_demo", dst)def subtract_demo(m1, m2): dst = cv.subtract(m1, m2) cv.imshow("subtract_demo", dst)def divide_demo(m1, m2): dst = cv.di
2020-11-25 13:17:50 86
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人