自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Kukeoo的博客

记录自己的学习生涯

  • 博客(172)
  • 收藏
  • 关注

原创 数据结构 栈【链栈的操作】

目录一、链栈结点定义二、链栈定义三、栈的初始化四、栈的插入操作——push五、栈的判空六、找到栈顶元素七、栈的删除操作——pop八、栈的销毁九、测试十、源码一、链栈结点定义//结构体:定义栈的每一个结点typedef struct Node{ //数据域 int data; //指针域 Node* next;//重命名,将struct Node 重命名为Node}Node;二、链栈定义//结构体:定义链栈typedef stru.

2021-05-08 17:16:06 1109

原创 计算机视觉 OpenCV【降噪:高斯模糊原理】

目录一、高斯模糊简介和原理1.1 简介1.2 原理二、数学原理2.1 卷积2.2 高斯卷积内核构建2.2.1 计算高斯矩阵2.2.2 计算高斯矩阵之和2.2.3 归一化一、高斯模糊简介和原理1.1 简介高斯模糊,也叫高斯平滑,其作用是使图像变得模糊且平滑,通常用它来减少图像噪声以及降低细节层次。平滑也称模糊, 是一项简单且使用频率很高的图像处理方法。平滑处理的用途有很多, 比如减少噪声的功用。平滑处理时需要用到一个滤波器。高斯滤波是一...

2021-05-07 23:15:27 3600 1

原创 计算机视觉 OpenCV【灰度原理和公式】

目录一、灰度原理1.1 图像的存储与像素1.1.1 像素与分辨率1.1.2 物理原理1.2 RGB图像1.3 灰度图像二、RGB转灰度公式一、灰度原理1.1 图像的存储与像素1.1.1 像素与分辨率像素是影像显示的基本单位,是一个具有明确位置和颜色值的方格。分辨率指的是一个显示系统对图像细节的分辨能力,通常以长边像素个数乘以宽边像素个数来表示。目前有多种分辨率,如VGA,HD,4K等。以VGA为例,VGA(VideoGraphicsArray)是I..

2021-05-06 20:54:56 4704

原创 算法 查找 【剑指 Offer 53 - II. 0~n-1中缺失的数字】

目录一、题目描述二、思路步骤三、代码一、题目描述一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。示例 1:输入: [0,1,3]输出: 2示例2:输入: [0,1,2,3,4,5,6,7,9]输出: 8二、思路本题的中心思想为二分查找。根据题意,数组可以按照以下规则划分为两部分。左子数组:nums[i] = i...

2021-05-02 23:10:07 136

原创 计算机视觉 OpenCV【八:应用之人脸识别】

一、识别原理二、步骤三、代码

2021-05-01 21:10:23 1988 11

原创 计算机视觉 OpenCV【七:应用之形状与轮廓检测】

一、什么是形状与轮廓检测给定一张图片:OpenCV能帮我们使用计算机来识别这些图像,首先可以勾勒出他们的轮廓,其次还可以识别哪些是三角形,哪些是圆形,哪些是矩形。这就是形状、轮廓检测的功能。二、预处理形状与轮廓检测首先需要进行预处理,目的是找到图像的边缘,然后再找到图像的轮廓/轮廓点。步骤如下:1.转为灰度图像2.添加高斯模糊3.进行坎尼边缘检测4.进行膨胀操作,使边缘间没有缝隙,称为完整的封闭图原图:灰度:高斯模糊:坎尼边缘检测:

2021-05-01 12:37:57 5412 6

原创 算法 栈和队列 【剑指 Offer 09 用两个栈实现一个队列】

一、题目描述用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead操作返回 -1 )二、思路栈的特性:后进先出队列的特性:先进先出利用这个特性,我们可以让两个栈分别扮演不同的角色。我们每次往第一个栈里插入元素后,第一个栈的底部元素是最后插入的元素,第一个栈的顶部元素是下一个待删除的元素。为了维护队列先进先出的特性,我们引入第二..

2021-04-30 23:36:07 118 1

原创 计算机视觉 OpenCV【六:应用之颜色检测】

一、什么是颜色检测二、HSV图像类型介绍三、二值化

2021-04-29 21:20:03 13742 2

原创 计算机视觉 OpenCV【五:应用之透视变换】

目录一、什么是透视变换?例子定义二、实现代码一、什么是透视变换?例子现在你有一副牌,从你的视角看过去,这四张牌是这样的:现在我们想得到他们的俯视图,也就是把牌立起来,变成这样:这就是透视变换做的事。定义透视变换(Perspective Transformation)是将图片投影到一个新的视平面(Viewing Plane),也称作投影映射(Projective Mapping)。二、实现代码#include <opencv2/op...

2021-04-28 22:14:20 1669 10

原创 计算机视觉 OpenCV【四:绘制与文本】

目录一、绘制画布以及定义画布颜色绘制方法代码效果二、绘制圆绘制方法效果增加厚度填充三、绘制矩形绘制方法效果四、绘制线绘制方法效果五、写文本写文本方法效果一、绘制画布以及定义画布颜色绘制方法对于一个Mat类的对象,我们有其构造函数:创建行数为 rows,列数为 col,类型为 type 的图像,并将所有元素初始化为值 sMat::Mat(int rows, int cols, int type, const Sc.

2021-04-28 11:08:15 444

原创 计算机视觉 OpenCV【三:调整大小与裁剪】

目录一、调整大小二、裁剪一、调整大小函数:resize(src,dest,Size(width,high);其中size的参数为宽×高。首先,我们可以先输出一下原图的大小:cout << img.size() << endl;然后,我们再重新定义图片的大小:resize(img, imgResize,Size(640,480));代码: Mat imgResize; //cout << img.size...

2021-04-27 21:50:30 999 1

原创 计算机视觉 OpenCV【二:扩张与侵蚀】

一、dilate:扩张dilate函数使用像素领域内的局部极大运算符来膨胀一张图片,从src输入,由dest输出。第三个参数为膨胀操作的内核。如果为NULL,则默认表示使用参考点位于中心3×3的核。 //扩张图像 Mat imgDil; //写扩张内核 Mat kernel = getStructuringElement(MORPH_RECT, Size(3, 3)); //进行扩张 dilate(imgCanny, imgDil,kernel); //展示 imshow("Im

2021-04-27 20:58:22 1046

原创 计算机视觉 OpenCV【二:灰度、高斯模糊、边缘检测】

一、彩色图像转灰度Opencv提供了一个方法,可以使彩色图像变为灰度图像。函数名:cvtColor(src,dest,way);src表示初始的mat对象;dest表示转换后的mat对象;way表示以何种方式转换。举个例子:int main(){ //定义路径 string path = "Resources//test.png"; //Mat:opencv引入的矩阵数据类型,处理所有图像 Mat img = imread(path); //创建一个新的mat对

2021-04-26 23:30:22 3488 10

原创 计算机视觉 OpenCV【一:读图片、视频与网络摄像机】

目录一、头文件二、读图片三、读视频四、读网络摄像机一、头文件我们在使用opencv进行读图片、视频与网络摄像机时,需要三个头文件:#include <opencv2/imgcodecs/imgcodecs.hpp>常用的从文件加载图片的imread,保存图片到文件的imwrite,从内存加载图片或者将图片编码后放到内存缓冲区的imencode/imdecode都在这个头文件中#include <opencv2/highgui.hpp>High

2021-04-25 23:29:55 617

原创 小程序 【机械刀指令转换】

目录一、程序说明二、整体思路2.1 数字提取2.2 转换目标字符串2.3 序号(实现数字转换成字符串)2.4 主函数逻辑三、总代码四、实现截图一、程序说明昨天我的妈妈需要实现一个程序,用于转换机械刀指令。于是今天我用C++写了一个机械刀指令转换,实现的功能和付费软件MAX-PP一模一样。需要实现的功能如下:源文件是一系列的伪代码指令,无法运用至机器上,需要进行一定的转换,转换成相应指令即可。比如有这样一行语句:GOTO/2.9225,85.875

2021-04-24 23:13:26 195

原创 算法 动态规划 【机器人路径问题】

目录一、题目描述二、思路动态规划题目类型 1.确定状态 2.转移方程 3.初始条件和边界情况 4. 计算顺序三、代码一、题目描述给定m行n列的网格,有一个机器人从左上角(0,0)出发,每一步可以向下或者向右走一步,问有多少种不同的方式走到右下角。二、思路动态规划题目类型1、计数:有多少种方式走到右下角有多少种方法选出k个数使得和为Sum2、求最大最小值:从左上角走到右下角路径的最大数字和最长上升子序列长度3、求存...

2021-04-23 23:49:46 3039

原创 算法 查找 【剑指 Offer 04 二维数组中的查找】

一、题目描述在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例:现有矩阵 matrix 如下:[ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14, 17, 24], [18, 21, 23, 26, 30]]给定 ...

2021-04-22 21:50:25 231

原创 算法 动态规划 【最长回文子串】

目录一、问题描述二、思路1.确定状态2.转移方程3.初始条件和边界情况4.计算顺序三、代码一、问题描述给你一个字符串 s,找到 s 中最长的回文子串。示例 1:输入:s = "babad"输出:"bab"解释:"aba" 同样是符合题意的答案。示例 2:输入:s = "cbbd"输出:"bb"示例 3:输入:s = "a"输出:"a"示例 4:输入:s = "ac"输出:"a"限制:1 <= s.l

2021-04-21 23:04:00 1043

原创 算法 动态规划 【剑指 Offer 63 股票的最大利润】

一、问题描述假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。 注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格。示例 2:输入: [7,6,4,3,1]输出: 0解释: 在这种情况下, 没有交易完成, 所以最大利润为 0。...

2021-04-20 22:44:19 150

原创 算法 动态规划 【剑指 Offer 42 连续子数组的最大和】

目录一、问题描述二、思路1.确定状态2.转移方程3.初始条件和边界情况4.计算顺序三、代码一、问题描述输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。示例1:输入: nums = [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释:连续子数组[4,-1,2,1] 的和最大,为6。二、思路仍然是动态规划四步法:1.确定状态 1.1 ...

2021-04-19 12:12:38 112

原创 算法 二叉树 【剑指offer 27 镜像二叉树】

目录一、问题描述二、思路三、举例四、代码一、问题描述请完成一个函数,输入一个二叉树,该函数输出它的镜像。例如输入:4/ \2 7/ \ / \1 3 6 9镜像输出:4/ \7 2/ \ / \9 6 31示例1:输入:root = [4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1]二、思路这道算法题我们采用递归的...

2021-04-18 15:49:23 106

原创 算法 二叉树 【中序遍历迭代版】

一、思路迭代法需要借助while循环和迭代栈。中序遍历的顺序:左-根-右遍历步骤:1.准备一个当前指针cur,指向根结点;2.开辟一个空的迭代栈;3.进入while循环。循环结束的条件是:当前指针为空并且迭代栈为空。 因为当前指针不为空,迭代栈为空的情况是:根结点还未入栈 当前指针为空,迭代栈不为空的情况是:当前指针指向了目前最左元素的左孩子,而这个孩子肯定是nullptr4.在大循环中,首先建立一个小循环,不断地将当前指针指向的结点入栈,然...

2021-04-17 22:43:51 1512

原创 算法 顺序表 【剑指offer 45 把数组排成最小的数 改】

剑指OFFER 45 改数组里的所有元素可以拆的情况输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。class Solution {public: vector<int> getSingleNumber(int n) { vector<int> ans; return ans; } void bubbleSort(vecto.

2021-04-14 23:46:27 106

原创 算法 二叉树 【先序遍历迭代版】

一、思路先序遍历分为递归版,迭代版和著名的Morris遍历。今天我们要分享的遍历法是迭代版。由于不允许使用递归,所以我们需要借助一个辅助栈。先序遍历的遍历顺序:根-左-右。所以我们的遍历方法是:0.非空判断。1.根结点入栈。--开始while循环,条件为栈不为空--2.栈顶元素出栈,进入到结果序列中。(因为栈顶元素就是此时应当遍历的根结点。)3.如果根结点右孩子不为空,则根结点的右孩子结点入栈。4.如果根结点左孩子不为空,则根结点的左孩子结点入栈。5.进入下

2021-04-12 23:31:14 889

原创 算法 排序 【归并排序】

#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>#include <iostream>using namespace std;int a[1000] = {0,8,7,4,9,3,5,10,6};int temp[1000];//mid指的是右边元素第一个角标,l,r为左边界和右边界void merge(int l, int r, int mid){ //左子序列首元素角标 int i = l; /.

2021-04-11 16:12:14 423

原创 算法 排序 【快速排序】

void quickSort(vector<int>& v,int L,int R){ if (L >= R) { return; } int left = L; int right = R; int pivot = v[left]; while (left < right) { //找到右指针指向的第一个比pivot小的元素 while (left < right && v[right] >= pivot) {.

2021-04-10 22:44:51 140

原创 算法 回溯 【详解N皇后问题】

一、问题介绍

2021-04-05 23:13:45 1847

原创 HTTP协议抓包 【HTTP协议解析】

一、Fiddler抓包原理为什么fiddler能抓到包?原因在于:1.客户端浏览器在发送请求的时候,会打开一个代理服务器,这个代理服务器的地址是127.0.0.1,端口号为8888。2.fiddler会不断监听8888端口发出来的请求,一旦监听到了,就会转发给厂商服务器。3.服务器要转发给客户端,也会发送给8888端口,同样会被fiddler监听到,然后在转发给客户端。二、HTTP协议状态码首先,HTTP状态码是存放在响应报文里的。浏览器向网页所在服务器发送请求.

2021-04-03 13:28:37 3218

原创 HTTP协议抓包 【Fiddler初步配置】

一、Fiddler是什么Fiddler是位于客户端和服务器端之间的代理,也是目前最常用的抓包工具之一 。它能够记录客户端和服务器之间的所有 请求,可以针对特定的请求,分析请求数据、设置断点、调试web应用、修改请求的数据,甚至可以修改服务器返回的数据。简单来说:1.fiddler是位于客户端和服务器之间的一个代理。Fiddler 以代理 Web 服务器的形式工作的,使用代理地址为 127.0.0.1,端口 8888,当 fiddler 开启时自动开始代理,关闭 fiddler .

2021-03-31 23:56:38 477

原创 C++ 11特性 【右值引用】

右值引用(rvalue reference)是 C++11 为了实现移动语意(move semantic)和完美转发(perfect forwarding)而提出来的。一、左值和右值传统的C++引用(即左值引用)使得标识符关联到左值。左值:一个表示数据的表达式,如变量名或解除引用的指针,程序可获取其地址。C++11新增了右值引用,使用&&表示。右值:即可出现在赋值表达式的右边,但是不能对其应用地址运算符的值。区分左值和右值的便捷方法:看能不能对表达式取地址

2021-03-21 23:51:30 209

原创 算法 栈和队列 【LeetCode 946 合法出栈顺序】

一、题目二、思路准备入栈序列与出栈序列,一个空栈。其中,入栈系列和出栈序列用vector存储,其中,出栈序列我们用一个index指向首元素,来模拟队列。然后元素12345按照顺序入栈。元素1入栈后,需要判断他和出栈序列中,index指向的元素,也就是队列首元素3是否相同,如果相同,则同时弹出栈顶元素和队头元素,直到栈空或栈顶元素与队头元素不相同,否则,继续将入栈序列中的元素入栈。经过多轮操作,如果最终栈为空,则说明出栈顺序合法;否则不合法。三、代码

2021-03-20 15:28:06 523

原创 算法 链表 【求两个链表的公共交点】

一、题目描述输入两个链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)二、思路长度相同有公共结点,第一次就遍历到;没有公共结点,走到尾部NULL相遇,返回NULL。长度不同有公共结点,第一遍差值就出来了,第二遍一起到公共结点;没有公共,一起到结尾NULL。三、代码class Solution {public: ListNode* FindFirstCommonNode( ListNode *pHead1

2021-03-19 23:10:15 111

原创 C++ 引用 【再谈返回值问题】

直接上代码:class Person{public: Person(int age) { //1、当形参和成员变量同名时,可用this指针来区分 this->age = age; } Person PersonAddPerson(Person p) { this->age += p.age; //返回对象本身 return *this; } int age;};我们运行: Person p(10); Person p2(15.

2021-03-18 00:09:48 360

原创 算法 动态规划 【青蛙跳台阶DP版】

一、题目与分析一只青蛙跳n个台阶,一次可以跳一阶,一次也可以跳两阶,问一共有多少种跳法。这显然是动态规划中的计数问题。我们按照DP步骤来一步一步分析:1确定状态1.1.研究最后一步一共n阶台阶,青蛙的跳法为最后一次跳了1阶加上前n-1阶的跳法,与最后一次跳了2阶加上前n-2阶的跳法。1.2.化为子问题x阶台阶有多少种跳法2 转移方程f[n] = f[n-1]+f[n-2]3 初值和边界3.1 初值f[0] = 0;f[1] = 1;.

2021-03-17 21:45:07 795

原创 网络 六 【顶层接口:应用层】

一、应用层干了啥应用层作为网络的最上层,他提供了很多应用层协议。这些协议嵌套在各种我们使用的应用程序中,为用户与网络之间提供一个打交道的接口。我们在使用各种网络应用程序时,都是内置有应用层协议的。比如,IE浏览器,使用的是应用层的HTTP协议;QQ使用的应用层协议是OICQ;Outlook使用收发邮件的SMTP、POP3协议。这里要注意一点,我们所使用的软件是应用程序,这些软件只是软件开发者编程开发出来的,这些应用软件只是一个壳子,而这些软件里嵌套的协议才是应用层的内

2021-03-16 19:55:41 3284

原创 网络 五 【进程与进程的通信:传输层】

一、传输层干了啥上一章我们学了网络层,网络层干的事是将分组,通过路由器,从一个网络传递到另一个网络;具体来说,是将一个分组从一个主机传递到另一个主机进行通信,是两台主机之间的逻辑通信。然而,主机之间的通信,实质上是主机之间的两个应用程序进行通信(又称端到端的通信),比如,A主机的QQ进程发送了一条消息给B主机的QQ进程,传输层就负责具体这样的应用进程之间的逻辑通信。那么,一台主机有很多形形色色的进程,相应地,传输层需要提供对应的协议吗?答案是否。这就是传输层的第二个功能——复

2021-03-14 18:43:58 2698

原创 算法 动态规划 【初识DP之硬币问题】

一、动态规划题目类型1.计数问题有多少种方式走到右下角有多少种方法选出k个数,使和为sum2.求最大值最小值从左上角走到右下角路径的最大数字和最长上升子序列长度3.求存在性取石子游戏,先手是否必胜二、问题题目:有三种硬币,面值2.5.7,买一本书需要27元,如何用最少的硬币整好付清。很显然,这是一个求最大值最小值问题。三、四步骤1.确定状态动态规划需要开辟一个数组,数组的每个元素f[i]或者f[i][j]代表什么,类似数学题中的未知数代表

2021-03-13 16:27:56 1313

原创 网络 四 【物理与逻辑的转换点:详解网络层】

一、网络层干了啥?IP是什么?先不管网络层干了啥,我们来看这样一张网络五层结构图:橙色的那一层叫做网络层。通过图,我们可以发现,网络层的主要协议有:ARP,IP,ICMP,IGMP其中,IP占了大半壁江山。而IP是什么?IP的全称为Internet Protocol——网际协议。前面我们学习了,协议是建立在对等实体之间的。也就是说,要想在网络中做到有条不紊地交换数据,就必须遵循一些事先约定好的规则。这些规则明确规定了所交换的数据的格式,以及有关的同步问题。

2021-03-12 16:11:02 1281

原创 算法 字符串【子串是否为回文串】

本题为笔试真题。一、描述给定一个字符串,从中任意删除一个字符,判断该字符是否为回文串。回文串:从左至右与从右至左遍历得到的串为相同串。如:输入abccba,abccba删除第一个c后得到abcba,这是回文串,则输出;若不是回文串,则输出false。二、思路写了三个主要逻辑函数:首先需要一个函数来逆转字符串;需要一个函数来判断是否为回文串;还需要一个函数删除字符串的某个位置的字符。具体看代码实现——三、代码#define _CRT_SECUR

2021-03-10 22:28:18 221

原创 数据结构 二叉树【记录:二叉树的操作】

注:本文不做详细讲解,注释仅在代码段中,作个人记录使用详解请看往日博客记录:博客类型为数据结构或算法目录一、二叉树结构二、创建二叉树三、插入,使之成为二叉搜索树四、三大遍历五、返回高度六、层序遍历七、重建二叉树一、二叉树结构typedef struct BNode{ int data; BNode* left; BNode* right;}BNode,*Tree;二、创建二叉树Tree createTree(){ int value.

2021-03-10 18:39:53 96

空空如也

空空如也

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

TA关注的人

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