- 博客(216)
- 资源 (1)
- 收藏
- 关注
原创 在 Ubuntu 20.04 上安装 golang
下载 Go 压缩包以 root 或者其他 sudo 用户身份运行下面的命令,下载并且解压 Go 二进制文件到/usr/local目录:wget -c https://dl.google.com/go/go1.14.2.linux-amd64.tar.gz -O - | sudo tar -xz -C /usr/local调整环境变量通过将 Go 目录添加到$PATH环境变量,系统将会知道在哪里可以找到 Go 可执行文件。这个可以通过添加下面的行到/etc/profile文件(系统范围内安.
2020-11-20 16:28:18
1537
原创 opencv学习-013-几何形状绘制(绘制直线line,绘制矩形rectangle,绘制圆circle,绘制椭圆ellipse)
opencv学习-013-几何形状绘制(绘制直线,绘制圆,绘制矩形,绘制椭圆)1. line2. rectangle3. circle4. ellipse#include<opencv2/opencv.hpp>#include<iostream>using namespace cv;using namespace std;int main(int argc, char** argv) { Mat image = Mat::zeros(Size(512, 512), C
2020-10-27 17:58:54
292
原创 opencv学习-012-图像翻转(flip)
opencv学习-012-图像翻转(flip)flip这一节比较简单,就是图像的水平和镜像翻转。#include<opencv2/opencv.hpp>#include<iostream>using namespace cv;using namespace std;int main(int argc, char** argv) { Mat src = imread("E:/Desktop/y.jpg"); if (src.empty()) { printf("
2020-10-23 16:54:10
1051
原创 opencv学习-011-图像像素归一化(normalize)
opencv学习-011-图像像素归一化(normalize)#include <opencv2/opencv.hpp>#include <iostream>using namespace cv;using namespace std;int main(int argc, const char *argv[]){ Mat src = imread("E:/Desktop/y.jpg"); if (src.empty()) { printf("could not
2020-10-22 20:53:05
351
原创 opencv学习-010-图像像素值统计和二值图像采用阈值的一种方法(minMaxLoc,meanStdDev)
opencv学习-010-图像像素值统计(minMaxLoc,meanStdDev)#include <opencv2/opencv.hpp>#include <iostream>using namespace cv;using namespace std;int main(int argc, const char *argv[]){ Mat src = imread("E:/Desktop/y.jpg", IMREAD_GRAYSCALE); if (src.em
2020-10-19 22:24:14
230
原创 opencv学习-009-图像色彩空间转换(cvtColor,inRange)
opencv学习-009-图像色彩空间转换(cvtColor,inRange)1. 色彩空间和cvtColor2. inRange()#include <opencv2/opencv.hpp>#include <iostream>using namespace cv;using namespace std;int main(int argc, const char *argv[]){ Mat src = imread("E:/Desktop/y.jpg"); if
2020-10-19 16:41:04
225
原创 opencv学习-008-图像通道的分离与合并(split ,merge )
opencv学习-008-图像通道的分离与合并(split ,merge )1. split2. merge#include <opencv2/opencv.hpp>#include <iostream>using namespace cv;using namespace std;int main(int argc, const char *argv[]){ Mat src = imread("E:/Desktop/y.jpg"); if (src.empty()
2020-10-19 14:58:56
212
原创 opencv学习-007-伪色彩函数applyColorMap和LUT
opencv学习-007-伪色彩函数applyColorMap和LUT1. 伪色彩函数`applyColorMap`2. Look Up Table(LUT)查找表#include <opencv2/opencv.hpp>#include <iostream>using namespace cv;using namespace std;void customColorMap(Mat &image);int main(int argc, const char *a
2020-10-19 14:23:38
221
原创 opencv学习-006-图像像素的逻辑操作(bitwise_and,bitwise_xor,bitwise_or,bitwise_not)
opencv学习-006-图像像素的逻辑操作(bitwise_and,bitwise_xor,bitwise_or,bitwise_not)1. 图像处理常用的与、或、异或2. Rect 类#include <opencv2/opencv.hpp>#include <iostream>using namespace cv;using namespace std;int main(int argc, const char *argv[]){ // create ima
2020-10-18 21:19:48
296
原创 opencv学习-005-图像基于像素的算数操作(加add、减subtract、乘multiply、除divide的API,Scalar,addWeighted)
opencv学习-005-图像基于像素的算数操作(加add、减subtract、乘multiply、除divide的API)1. 利用加减法和Scalar生成的单色图像可以实现调整图像亮度的作用2. 通过`addWeighted`调整图像亮度与对比度#include <opencv2/opencv.hpp>#include <iostream>using namespace cv;using namespace std;int main(int artc, char**
2020-10-18 17:37:26
262
原创 opencv学习-004-图像像素的读写操作(Mat.at方法,案例实现图像的颜色反转(数组遍历和指针方式遍历))
opencv学习-004-图像像素的读写操作和一些算术运算(案例实现图像的颜色反转(数组遍历和指针方式遍历))1. 通道2. Vec3b类型3. 指针方式遍历中的要点#include <opencv2/opencv.hpp>#include <iostream>using namespace cv;using namespace std;int main(int artc, char** argv) { Mat src = imread("E:/Desktop/y.j
2020-10-18 16:40:56
248
原创 opencv学习-003-图像Mat类型对象的拷贝、赋值和创建(.clone(),.copyTo(),Mat::zeros,Mat::ones)
opencv学习-003-图像对象的拷贝、赋值和创建(.clone(),.copyTo(),Mat::zeros,Mat::ones)1. 先来说代码里m1,m2,m31. 先来说代码里m4,m5,m63. 卷积核的创建#include <opencv2/opencv.hpp>#include <iostream>using namespace cv;using namespace std;int main(int artc, char** argv) { Mat s
2020-10-18 14:57:02
322
原创 opencv学习-002-图像颜色空间转换和保存(cvtColor、imwrite)
opencv学习-002-图像色彩空间转换和保存(cvtColor、imwrite)1. 颜色空间转换函数- cvtColor2. 图像保存 - imwrite这一节我们的需求是对图片进行颜色转换然后再把其保存在特定目录下:#include <opencv2/opencv.hpp>#include <iostream>using namespace cv;using namespace std;int main(int artc, char** argv) { Ma
2020-10-17 16:46:29
233
原创 opencv学习-001-图像读取与显示(imread、imshow,nameWindow,Mat类)
opencv学习-001-图像读取与显示(imread、imshow,nameWindow,Mat类)1. `imread`函数:2. `imshow`函数:3. `nameWindow`函数4. `Mat`类这一节是图像的读取和显示,先上代码和结果,再解释其中重要部分:#include <opencv2/opencv.hpp>#include <iostream>using namespace cv;using namespace std;const char* w
2020-10-17 16:00:47
251
原创 opencv学习
opencv学习导语看了看自己的博客,竟然已经一个月没有更了。由于前一阵子一直在找工作,现在三方也签了,工作岗位是C++开发,然后主要做图像算法一类的。博主研究生在校期间研究方向也是图像处理,由于本人是个学渣,也没好好学opencv,现在由于以后工作需要和论文需要,打算接下来几个月抽空把opencv的API过一遍,然后分享出来大家一起学习。首先布置环境,之前博客里也写到了,就是:安装VS2015和opencv4把环境配置好之后就开始我们的学习吧!...
2020-10-15 21:56:01
229
2
原创 TCP通信过程中time_wait和close_wait产生过多的原因和解决方法
TCP通信过程中time_wait,和close_wait产生过多的原因和解决方法1. time_wait过多产生原因2.time_wait过多解决方法3.close_wait过多原因4.close_wait过多的解决方案1. time_wait过多产生原因 正常的TCP客户端连接在关闭后,会进入一个TIME_WAIT的状态,持续的时间一般在1-4分钟,对于连接数不高的场景,1-4分钟其实并不长,对系统也不会有什么影响, 但如果短时间内(例如1s内)进行大量的短连接,则可能出现这样一种情况:客户
2020-09-17 18:10:19
428
原创 声网09-15,求1-n的最大公约数gcd
声网09-15,求1-n的最大公约数今天声网25个选择+2编程题,题目全是英文,这道题是第二题。题目描述大致是输入T组数据,每一组是一个数字n,输出每一个数n其从1到n的最大公约数gcd最大值,举个例子,求3的gcd最大值,也就是求gcd(1,2),gcd(1,3),gcd(2,3)的最大值输入形式:235输出形式:12思路: 首先想到的是暴力做法,定义一个求最大公约数的函数,然后针对每一个数用双指针两层遍历循环求gcd,然后保存其最大值,但是提交不通过显示超时(当时数据规模记不得
2020-09-15 22:15:07
253
原创 给定一个无序数组,求第K大的数,要求不能使用额外的空间,时间复杂度尽量低
给定一个无序数组,求第K大的数,要求不能使用额外的空间,时间复杂度尽量低今天快手面试,面试官问我对各种排序算法了解吗,我说了解,然后他给我出了一道题,给定一个无序数组,求第K大的数,要求不能使用额外的空间,时间复杂度尽量低,当时有点懵…我能想到的只能是用数组滚动遍历一遍,时间复杂度为O(n),空间复杂度也O(n)…或者排序再遍历,实在想不出,面试官给了一个思路:使用分治和快排的思想,这才恍然大悟。贴上代码:#include <bits/stdc++.h>using namespace
2020-09-14 23:52:04
300
原创 关于判断递归的时间复杂度总结
关于判断递归的时间复杂度总结若每次递归使问题的规模减半,而其他操作都是常数时间T(N)=T(N/2)+O(1), 则T(N)=O(logN)若每次递归使用问题的规模减1,而其他操作是常数时间T(N)=T(N-1)+O(1),则T(N)=O(N)若每次递归使问题的规模减半,而其他操作是线性时间T(N) = T(N/2)+O(N),则T(N)=O(NlogN)...
2020-09-11 15:11:37
369
原创 leetcode面试题 16.25. LRU缓存——LRU最近最少使用算法
leetcode面试题 16.25. LRU缓存——LRU最近最少使用算法首先介绍下LRU LRU是Least Recently Used的缩写,即最近最少使用,是一种常用的页面置换算法,选择最近最久未使用的页面予以淘汰。该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间 t,当须淘汰一个页面时,选择现有页面中其 t 值最大的,即最近最少使用的页面予以淘汰。 因为我们是对缓存进行操作,那么久要求时间复杂度尽可能的低,那么我们就可以查找有无此key的时候用哈希表进行查找,
2020-09-07 13:49:13
265
原创 C++11新特性,推荐使用emplace_back()替换push_back()的原因
@TOCc++11新加入了emplace_back()用来替换push_back():在平时我们习惯性的尾插用push_back()去完成,但是如果是尾插临时对象的话,push_back()需要先构造临时对象,再将这个对象拷贝到容器的末尾,而emplace_back()则直接在容器的末尾构造对象,这样就省去了拷贝的过程。分析如下代码:#include<bits/stdc++.h>using namespace std;int i=0,j=0;class A {public:
2020-08-31 14:59:34
378
原创 C++11特性之右值引用及完美转发
C++11特性之右值引用及完美转发1. 左值与右值2. 左值引用和右值引用3. 完美转发1. 左值与右值首先简明扼要地介绍下左值和右值右值:只能在=右边的值。左值:可以在=左边的值。右值不能在=左边。左值也可以在=右边。例如:int n = 1;string s = "Hello World";const float PI = 3.1415926535;const float PI_2 = PI * 2;string t = string("abc");上面这些n,s,PI,
2020-08-31 14:31:47
305
1
原创 从labuladong东哥那里看到的位运算小技巧
从labuladong东哥那里看到的位运算小技巧1. 利用或操作 `|` 和`空格`将英文字符转换为小写2. 利用与操作 `&` 和`下划线`将英文字符转换为大写3. 利用异或操作 `^` 和`空格`进行英文字符大小写互换4. 判断两个数是否异号5. 不用临时变量交换两个数6. n&(n-1)用来消除数字 n 的二进制表示中的最后一个 17. 判断一个数是不是 2 的指数8. 查找只出现一次的元素9. n>>1表示n/2,n<<1表示n*2就不细说了说实话,最近做题
2020-08-23 17:52:03
525
原创 Leetcode——二叉树的前序(第144题)、中序(94)、后序(145)、层序遍历(102)的递归和迭代写法总结
Leetcode——二叉树的前序(第144题)、中序(94)、后序(145)、层序遍历(102)的递归和迭代写法总结1. 给定一个二叉树,返回它的 前序 遍历。2. 给定一个二叉树,返回它的 中序 遍历。3. 给定一个二叉树,返回它的 后序 遍历。4. 给定一个二叉树,返回它的 层序 遍历。二叉树定义/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left;
2020-08-22 14:40:45
244
原创 Lua执行make linux test报错fatal error: readline/readline.h: No such file or directory解决方法
Lua执行make linux test报错fatal error: readline/readline.h: No such file or directory解决方法最近在学习Lua,根据菜鸟上的教程步骤进行安装:curl -R -O http://www.lua.org/ftp/lua-5.3.0.tar.gztar zxf lua-5.3.0.tar.gzcd lua-5.3.0sudo make linux testsudo make install执行到sudo make lin
2020-08-21 11:34:25
341
原创 经典背包问题3——背包问题求方案数 、背包问题求具体方案
经典背包问题3——背包问题求方案数 、背包问题求具体方案1. 背包问题求方案数2. 背包问题求具体方案1. 背包问题求方案数有 N 件物品和一个容量是 V的背包。每件物品只能使用一次。第 i件物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出 最优选法的方案数。注意答案可能很大,请输出答案模 109+7的结果。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品数量和背包容积。接下来有 N行,每行两个整数 vi,wi,用空格隔
2020-08-20 00:38:20
316
原创 经典背包问题2——混合背包问题、二维费用的背包问题、分组背包问题
经典背包问题2——混合背包问题、二维费用的背包问题、分组背包问题1. 混合背包问题2. 二维费用的背包问题3. 分组背包问题1. 混合背包问题有 N 种物品和一个容量是 V的背包。物品一共有三类:第一类物品只能用1次(01背包);第二类物品可以用无限次(完全背包);第三类物品最多只能用 si次(多重背包);每种体积是 vi,价值是 wi。求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。输出最大价值。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品种数和
2020-08-19 14:42:45
298
原创 leetcode 思路——64. 最小路径和——174. 地下城游戏
leetcode 思路——64. 最小路径和——174. 地下城游戏64. 最小路径和174. 地下城游戏64. 最小路径和给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例:输入:[[1,3,1],[1,5,1],[4,2,1]]输出: 7解释: 因为路径 1→3→1→1→1 的总和最小。动态规划思路:我们可以设dp[i][j]的意思为到达第i行第j列的最短路径和依次从左到右,从
2020-08-17 23:25:10
237
原创 leetcode 思路——300. 最长上升子序列
leetcode 思路——300. 最长上升子序列给定一个无序的整数数组,找到其中最长上升子序列的长度。示例:输入: [10,9,2,5,3,7,101,18]输出: 4解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。说明:可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。你算法的时间复杂度应该为 O(n2) 。动态规划思路:确定状态,dp[i]为0到第i个子序列的最长上升的长度;我们先固定右端点(右端点也要慢慢往右移),然后根据右端点,找出左端点到
2020-08-17 18:07:31
256
原创 C++两种情况实现简洁的死锁程序
C++实现简洁的死锁程序1.单线程对一个资源重复申请上锁的情况2. 两个线程对两个资源申请上锁,形成环路。1.单线程对一个资源重复申请上锁的情况#include <iostream>#include <thread>#include <mutex>#include <unistd.h>using namespace std;int data = 1;mutex mt1,mt2;void a2() { data = data * dat
2020-08-11 12:02:45
352
原创 C++可重入函数和不可重入函数
C++可重入函数和不可重入函数可重入函数是指能够被多个线程“同时”调用的函数,并且能保证函数结果正确不必担心数据错误的函数。不可重入函数是指不能运行在多任务环境下,除非能保证互斥的函数。由于使用了未受保护的系统资源,如全局变量区,中断向量表等。不可重入函数在实时系统设计中被视为不安全函数。可重入函数特点:没有静态数据结构不返回指向静态数据的指针所有函数数据由函数的调用者提供使用auto变量,或通过全局变量的拷贝来保护全局变量若必须访问全局变量,则利用互斥信号保护不调用不可重入函
2020-08-09 21:38:02
426
原创 C++11中的原子操作(atomic operation)和自旋锁
C++11中的原子操作(atomic operation)1. 原子操作2. 自旋锁3. 原子操作和使用互斥锁和自旋锁的速度对比1. 原子操作 所谓的原子操作,取的就是“原子是最小的、不可分割的最小个体”的意义,它表示在多个线程访问同一个全局资源的时候,能够确保所有其他的线程都不在同一时间内访问相同的资源。 我们在原子操作之前在多线程同步中防止发生数据竞争的操作是加互斥锁,但互斥锁是操作系统这一层级的,最终映射到CPU上也是一堆指令,是指令就必然会带来额外的开销;既然CPU指令是多线程不可再分的最
2020-08-09 21:11:29
587
原创 进程和线程的概念和区别?进程和线程的使用场景?
进程和线程的概念和区别?进程和线程的使用场景?1. 进程2. 什么是线程3. 进行和线程之间的区别4. 进行和线程之间的相同点5. 进程和线程的使用场景1. 进程进程是资源(CPU、内存等)分配的基本单位,它是程序执行时的一个实例。程序运行时系统就会创建一个进程,并为它分配资源,然后把该进程放入进程就绪队列进程调度器选中它的时候就会为它分配CPU时间,程序开始真正运行。2. 什么是线程线程是程序执行时的最小单位,它是进程的一个执行流,是CPU调度和分派的基本单位。一个进程可以由很多个线程组
2020-08-09 17:40:52
437
原创 计算机网络相关
TCP三次握手和四次挥手详解TCP和UDP的区别网络应用程序设计模式,分层模型,协议格式地址栏输入URL回车之后发生了什么?HTTP协议相关概念和web服务器实现TCP三次握手四次挥手,滑动窗口,多进程、多线程并发服务器HTTP长/短连接HTTP和HTTPS一些注意点(区别、HTTPS通信过程、SSL/TLS的区别、HTTP1.0/1.1/2.0 的区别)TCP流量控制、拥塞控制和重发机制(快重传和快恢复)详解未完,持续更新中…...
2020-08-09 16:31:16
261
原创 TCP流量控制、拥塞控制和重传机制详解
TCP流量控制、拥塞控制和重发机制(快重传和快恢复)详解1. TCP流量控制1.1 如何控制?1.2 发送方何时再继续发送数据?1.3 注意点:2. TCP拥塞控制2.1 拥塞控制的原理2.2 慢开始算法2.3 拥塞避免2.4 乘法减小和加法增大2.5 拥塞控制和流量控制的差别3. TCP重发机制(快重传和快恢复)3.1 快重传3.2 快恢复1. TCP流量控制如果发送方把数据发送得过快,接收方可能会来不及接收,这就会造成数据的丢失。所谓流量控制就是让发送方的发送速率不要太快,对发送方发送速率的控制,要
2020-08-09 16:13:04
421
原创 HTTP和HTTPS一些注意点(区别、HTTPS通信过程、SSL/TLS的区别、HTTP1.0/1.1/2.0 的区别)
HTTP和HTTPS一些注意点(区别、HTTPS通行过程、SSL/TLS的区别、HTTP1.0/1.1/2.0 的区别)1. HTTP和HTTPS的区别2. HTTPS中整个 SSL/TLS 的握手和通信过程3. SSL/TLS的区别4.HTTP1.0/1.1/2.0 的区别1. HTTP和HTTPS的区别HTTPS 并不是一个新的应用层协议,它其实就是 HTTP + TLS/SSL 协议组合而成,而安全性的保证正是 TLS/SSL 所做的工作。也就是说,HTTPS 就是身披了一层 SSL 的 HTT
2020-08-09 14:10:08
423
原创 HTTP长/短连接
HTTP长/短连接1. 什么是长/短连接2. 长短连接使用场景1. 什么是长/短连接在HTTP/1.0中,默认使用的是短连接。也就是说,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。如果客户端浏览器访问的某个HTML或其他类型的 Web页中包含有其他的Web资源,如JavaScript文件、图像文件、CSS文件等;当浏览器每遇到这样一个Web资源,就会建立一个HTTP会话。但从 HTTP/1.1起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响应头有加
2020-08-09 14:06:10
266
原创 C++智能指针总结(面试常问)
C++智能指针总结(面试常问)1.智能指针的实现原理2. C++11四种智能指针总结2.1 auto_ptr:2.2 unique_ptr:2.3 share_ptr:2.4 weak_ptr:1.智能指针的实现原理智能指针的实现原理就是在一个类的内部封装了类对象的指针,然后在析构函数里对我们的类对象指针进行释放,因为类的析构是在类对象生命期结束时自动调用的,这样我们就省去了手动释放内存的操作,避免忘记手动释放导致的内存泄漏。2. C++11四种智能指针总结2.1 auto_ptr:1.auto_
2020-08-09 11:11:57
516
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人 TA的粉丝