C++基础学习与实战
文章平均质量分 57
AI炮灰
这个作者很懒,什么都没留下…
展开
-
C++和OpenCV从基础到实战视频课程“开讲了”
由于市面上的书本或者视频、博客等大多是以Python为基础进行OpenCV讲解,以这种方式的目的主要是Python的语言较为简单、上手容易。但是在工业上大多数图像处理都是基于C++进行开发,这样在真正步入企业的时候大多数人对C++都很茫然(本人就是),因此本人准备开设一个基于C++和OpenCV的课程。原创 2023-05-10 09:04:32 · 236 阅读 · 0 评论 -
吊打高斯模糊的stackBlur加入OpenCV
Stackblur的坑是2021年初老瓦给我挖的。当时我找他,说我想从事OpenCV开发,有啥事情可以干的吗?老瓦说可以尝试增加一个新滤波器stackblur。当时做了有半个月,终于把代码在OpenCV上调通并且能产生正确模糊的结果,但是卡在了速度优化上。最近在优化OpenCV的DNN模块,也学会了一些并行加速的技巧又花了两周时间终于把坑填上了。原创 2023-01-10 10:22:16 · 1014 阅读 · 0 评论 -
C++OpenCV基于Camshift实现颜色范围内的车辆跟踪
基本概念camshift("continuously adaptive mean-shift"的缩写),即连续自适应的 算法。其基本思想是对视频序列的所有图像帧都作MeanShift运算,并将上一帧的结果(即搜索窗口的中心位置和窗口大小)作为下一帧MeanShift算法的搜索窗口的初始值,如此迭代下去。简单点说,meanShift是针对单张图片寻找最优迭代结果,而camShift则是针对视频序列来处理,并对该序列中的每一帧图片都调用meanShift来寻找最优迭代结果。正是由于camShift针对一个视原创 2022-05-21 12:42:31 · 429 阅读 · 0 评论 -
C++OpenCV将视频处理成图像
#include<iostream>#include<opencv2/opencv.hpp>using namespace std;using namespace cv;void video2Image(){ //VideoCapture cap("1.avi"); VideoCapture cap("F:/testImage/1/output_1.2_result.mp4"); // 获取视频总帧数 long totalFrameN.原创 2022-05-12 21:04:02 · 939 阅读 · 2 评论 -
c++OpenCV对图像进行霍夫直线、圆检测并输出直线的位置和角度实战
1.霍夫直线检测我们如何在图像中快速识别出其中的圆和直线?一个非常有效的方法就是霍夫变换,它是图像中识别各种几何形状的基本算法之一。霍夫线变换霍夫线变换是一种在图像中寻找直线的方法。OpenCV中支持三种霍夫线变换,分别是标准霍夫线变换、多尺度霍夫线变换、累计概率霍夫线变换。在OpenCV中可以调用函数HoughLines来调用标准霍夫线变换和多尺度霍夫线变换。HoughLinesP函数用于调用累积概率霍夫线变换。我们都知道,二维坐标轴上表示一条直线的方程式y = a*x + b,我们想原创 2022-05-12 09:51:36 · 2116 阅读 · 0 评论 -
C++基础(20)——职工管理系统设计与实现
1.案例描述利用C++实现一个基于多态的职工管理系统公司中职工分为三类:普通员工、经理、老板、显示信息时需要显示职工编号、职工姓名、职工岗位以及职责。普通员工职责:完成经理交给的任务经理职责:完成老板交给的任务,并下发任务给员工老板职责:管理公司所有事物管理系统中需要实现的功能如下:退出管理系统:退出当前的管理系统 增加职工信息:实现批量添加职工功能,将信息录入到文件中,职工信息为:职工编号、姓名、部门编号 显示职工信息:显示公司内部所有职工信息 删除离职职工:按照编号删除原创 2021-07-30 08:49:25 · 1016 阅读 · 1 评论 -
C++基础(19)——文件操作
1文件概述1.1概念程序运行时产生的数据都属于临时数据,程序一旦运行结束都会被释放,通过文件可以将数据持久化。c++对文件操作需要包含头往文件<fstream>1.2文件类型文本文件:文件一文本的ASCII形式存储的计算机中 二进制文件:文件以文本的二进制形式存储在计算机中,用户一般不能直接读懂他们1.3操作文件的三大类ofstream:写操作 ifstream:读操作 fstream:读写操作2.文本文件2.1写文件写文件的步骤:包含头文件:#in原创 2021-07-26 14:50:18 · 170 阅读 · 0 评论 -
C++基础(18)——多态
1.多态的基本概念多态是C++面向对象三大特性之一,多态分为两类:静态多态:函数重载与运算符重载属于静态多态,复用函数名 动态多态:派生类和虚函数实现运行时多态静态多态与动态原创 2021-07-24 16:08:58 · 286 阅读 · 2 评论 -
C++基础(17)——继承
1.继承的概述1.1概念继承是面向对象三大特性之一。我们发现在定义类的时候,下级别的成员除了拥有上一级别的的共性,还有自己的特性,这时候我们可以考虑使用继承的技术来减少重复的代码。1.2继承的基本用法例如我们看到很多的网站中,都有公共的头部、公共的底部、甚至公共的左侧列表,只有中心内容不同,接下来我们分别利用普通写法和继承的写法来实现网页中的内容,看一下继承存在的意义以及好处。#include<iostream>using namespace std;class ja原创 2021-07-23 13:42:41 · 263 阅读 · 2 评论 -
C++基础(16)——运算符重载
1.概念 运算符重载概念:对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型1.1加号运算符重载作用:实现两个自定义数据类型相加的运算直接相加就会报错,因为目前还没有写运算符重载,它不知道如何向两个Person之间的相加运算。我们可以通过两个方式来告诉它如何进行加号重载:1.成员函数重载+号;2.全局函数重载+号1.1.1.成员函数重载+号#include<iostream>using namespace std;//加号运算符重...原创 2021-07-22 13:23:27 · 102 阅读 · 0 评论 -
C++基础(15)——类和对象、友元
1.初始化列表1.1作用C++提供给了初始化列表语法,用来初始化属性1.2语法构造函数():属性1(值1),属性2(值2),属性3(值3)……{}1.3示例原创 2021-07-21 13:54:39 · 230 阅读 · 0 评论 -
C++基础(14)——构造函数与析构函数
1.构造函数与析构函数1.1构造函数1.1.1概念 构造函数注意作用在于创建对象时为对象的成员属性赋值,构造函数由编译器自动调用,无须手动调用1.1.2特征没有返回值,也不需要写void 函数名与类名相同 构造函数可以有参数,可以发送重载 创建对象的时候,构造函数会自动调用,而且只调用一次1.1.3用法类名(){}1.2析构函数1.2.1概念主要作用在于对象销毁前系统系统调用,执行一些清理工作1.2.2特点析构函数,没有返回值也不写void ...原创 2021-07-15 09:47:28 · 300 阅读 · 0 评论 -
C++基础(13)——函数高级用法:封装
目录1.封装的意义1.1封装的意义一:1.2 封装的意义二2.struct和class区别3.成员属性私有化4.示例15.示例21.封装的意义封装是C++面向对象三大特征之一 将属性和行为作为一个整体,表现生活中的事物 将属性和行为加以权限控制1.1封装的意义一:将属性和行为作为一个整体,表现生活中的事物语法:class 类名{访问权限:属性/行为};专业术语:类中的属性和行为统一称为成员,类中的属性称为成员属性和成员变量 类中的行为成为成员...原创 2021-07-14 16:22:33 · 6550 阅读 · 1 评论 -
C++基础(12)——函数高级用法:重载
1函数重载的作用函数名可以相同,提高复用性2函数重载满足的条件 同一作用域下 函数名称相同 函数参数类型不同或者个数不同或者顺序不同 注意:函数的返回值不可以作为函数重载的条件 3示例这就会报错,因为都是一样的,不知道去调用谁。#include<iostream>using namespace std;void func() { cout << "func函数" << endl;}void func(i..原创 2021-07-14 11:20:45 · 131 阅读 · 0 评论 -
C++基础(11)——引用
1.概述1.1引用 给变量起别名1.2语法 数据类型 &别名=原名1.3示例#include<iostream>using namespace std;int main() { int a = 10; int& b = a;//创建引用 cout << "a=" << a << endl; cout << "b=" << b << endl;...原创 2021-07-13 16:22:58 · 119 阅读 · 0 评论 -
C++基础(10)——内存四区讲解
1.内存分区模型概述C++在程序执行时,将内存大方向划分为4个区域:代码区:存放函数体的二进制文件,由操作系统进行管理的 全局区:存放全局变量和静态变量以及常量 栈区:由编译器自动的分配和释放,存放函数的参数值,局部变量等 堆区:由程序员分配和释放,若程序员不释放, 程序结束时由OS系统回收2.内存四区的意义不同区域存放数据,赋予不同的生命周期,给我们更大的灵活编程3.各区解析3.1代码区存放CPU执行的机器指令 代码区是共享的,共享的目的是对于频繁被执行的程序,只需要在内原创 2021-07-13 15:24:21 · 240 阅读 · 0 评论 -
C++基础(9)——通讯录管理系统设计与实现
系统需求:通讯录可以记录亲人、好友的工具。系统中需要实现的功能如下:添加联系人:向通讯录中添加新人,信息包括(姓名、性别、年龄、联系电话、;家庭住址)最多记录1000人 显示联系人:显示通讯录中所有联系人信息 删除联系人:按照姓名进行删除指定联系人 查找联系人:按照姓名查看联系人信息 修改联系人:按照姓名重新修改指定联系人 清空联系人:清空通讯录中所有信息 退出通讯录:退出当前使用的通讯录1.项目框架的搭建#include<iostream>using name原创 2021-07-13 11:14:58 · 1308 阅读 · 3 评论 -
C++基础(8)——结构体案例
1.案例1:学校正在做毕设项目,每个老师要求带5个学生,总共有三个老师,需求如下:设计学生和老师的结构体,其中在老师的结构体中,有老师姓名和一个存放5名学生的数组作为成员,学生的成员有姓名考试分数,创建数组存放三名老师,通过函数给每个老师及所带的学生赋值,最终打印出老师数据及老四所带的学生数据。#include<iostream>#include"swap.h"#include<string>#include <ctime>using namesp.原创 2021-07-12 10:36:23 · 419 阅读 · 0 评论 -
C++基础(7)——结构体
目录1.结构体概述1.1结构体的概念1.2结构体的定义和使用2.结构体数组3.结构体指针4.结构体嵌套结构体5.结构体做函数参数1.结构体概述1.1结构体的概念 结构体属于用户自定义的数据类型,允许用户存储不同的数据类型。1.2结构体的定义和使用 语法:struct 结构体名 {结构体成员列表}; 通过结构体创建变量的方式有三种: (1)struct 结构体名 变量名 (...原创 2021-07-10 16:57:40 · 159 阅读 · 0 评论 -
C++基础(6)——指针
1.指针基本使用 把指针就当作一个地址。#include<iostream>#include"swap.h"using namespace std;void main() { //1.定义指针:数据类型 * 指针变量名; int a = 10; int* p; //与a建立关系。让指针记录变量a的地址 p = &a; cout << "a的地址为:" << p << endl;//返回的是十六进制的 cou...原创 2021-07-10 15:26:13 · 131 阅读 · 0 评论 -
C++基础(5)——函数
1.值传递 所谓的值传递,就是函数调用时实参将数值传入给形参。值传递时,可如果形参发生并不会影响实参。#include<iostream>using namespace std;#include<string>//实现两个数字进行交换的函数void swap(int num1, int num2) { cout << "交换前的数据为:" << endl; cout << "num1=" << nu...原创 2021-07-10 13:21:32 · 97 阅读 · 0 评论 -
C++基础(4)——数组
1.一维数组1.1数组案例五个小猪称体重:#include<iostream>using namespace std;void main() { int arr[] = { 300,350,200,400,250 }; int max_weight = arr[0]; for (int i = 1; i <= 5; i++) { if (arr[i] > max_weight) { max_weight = arr[i]; } } cou原创 2021-07-10 12:32:22 · 189 阅读 · 0 评论 -
C++基础(3)——for循环案例
目录1.拍桌子游戏2.嵌套循环3.break与continue 4.goto语句1.拍桌子游戏#include<iostream>using namespace std;int main() { for (int i = 1; i <= 100; i++) { if (i % 10 == 7 || i / 10 == 7 || i % 7 == 0) { std::cout << "敲桌子" << e...原创 2021-07-10 09:32:10 · 2450 阅读 · 0 评论 -
C++基础(2)——水仙花数
水仙花数是指:一个三位数,他的每个位上的数字的3次幂之和等于它的本身。 例如:1^3+5^3+3^3=153#include<iostream>using namespace std;//1.先打印所有的三位数字int main() { int num = 100; do{ int a = 0;//个位 int b = 0;//十位 int c = 0;//百位 a = num % 100; b = num / 10 % 10;...原创 2021-07-07 16:49:32 · 278 阅读 · 0 评论 -
C++基础(1)——猜数字游戏
首先系统要随机生成一个随机数,玩家开始猜测,如果猜对了恭喜玩家胜利,游戏结束。如果猜错了提示猜测过大还是过小。直到游戏结束。#include<iostream>using namespace std;int main() { /*1.系统生成随机数 这样写是生成的0-99的随机数。再加1就是1-100的随机数, 这个生成的是伪随机数,后面会一直是42,如果想要生成真正的随机数需要添加随机数种子, 利用当前的系统时间生成随机数,防止每次随机数都一样 */ ...原创 2021-07-07 16:14:14 · 547 阅读 · 0 评论