- 博客(43)
- 收藏
- 关注
原创 数据结构-冒泡排序
冒泡排序属于一种常见的交换排序,根据序列中两个元素关键字的比较结果来对换这两个记录在序列中的位置。具体操作是按顺序(从前往后或从后往前)两两对比元素直至本次排序结束,每次排序确认一个固定值(末位或首位)。需要注意的是,为了排序稳定性,如果遇到相同的元素,对比后不予改动。
2024-07-19 18:01:23
257
原创 双符号二进制溢出
如果低于当前位数能表示的最小值,则称为负溢(下溢),那么具体是怎么通过符号位来判断这两种异常情况呢?在计算机计算过程中,如果计算结果超出了当前位数能表示的最大值,则称为正溢(上溢),补码相加得(1)1010,舍弃最高位,即1010,产生了负溢出。补码相加得(1)11 10,舍弃最高位,即11 10。(1)正常相加的情况:(-1) + (-1)(2) 负溢相加的情况:(-3)+(-3)(1)正常相加的情况:1 + 1。(2)正溢相加的情况:3 + 3。补码:11 11 + 11 11。
2024-03-22 15:15:29
742
原创 加密技术及认证技术
然后用我的私钥加密摘要(因为私钥只有我自己有,所以这里相当于做了数字签名),再用B的公钥加密“LOVE”,一起发送给B,B收到消息后,用我的公钥解析Hash值,用自己的私钥解析出内容“LOVE”,再用同样的Hash算法得到“LOVE”的哈希值,对比两个摘要的哈希值,如果一致,就说明消息没有被篡改!C呢,先是截获了B发给我的公钥,然后截获了我要发给B的“LOVE”,他气不过,所以用B的公钥,加密“HATE”发给B!B解析摘要,拿到A生成的hash值,解析密文,根据密文生成B的hash值,对比hash值。
2024-03-21 11:50:35
347
原创 简单工厂模式
简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类可以被外界直接调用,创建所需的产品对象。通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。简单工厂模式属于类的创建型模式,又叫做静态工厂方法模式。简单工厂模式可以减少客户程序对类创建过程的依赖。简单工厂模式所创建的具体实例对象。2. 提供一个抽象产品类。3. 提供一个具体产品类。1. 提供一个工厂类。
2023-10-31 15:02:43
298
原创 MFC界面美化
排列整齐基于MFC编写GUI代码时,界面美化最基本的部分就是排列整齐,如果是用Visual Studio 2015 IDE 开发,那就十分方便了,在快捷功能框即有相关按钮,这和Qt的控件调整有些类似,可以有效减少我们在布局上耗费的时间:图标按钮一般来说,默认的按钮只能支持按钮上的文字修改:但是可以通过以下操作来制作显示为Bmp图标的按钮,从而美化按钮界面: 准...
2018-12-18 13:29:03
3534
原创 16进制输入到10进制输出
常规算法: #include<iostream>#include<string>#include<cmath>using namespace std;int change(string a, int n){ int sum = 0; int x, tmp, b;//x是当前位数0~n-1 for (x = 0; n > 0; n--...
2018-12-14 16:30:10
1198
原创 C++/C预处理指令及在创建动态链接库Dll的相关使用
1 常见的C++/C预处理指令:#define,#ifdef,#ifndef,#endif 所谓预处理指令,即在编译器进行编译前进行的扫描源代码,进行初步转换的操作。#空指令 :无用 #include :包含一个源代码文件 #define :定义宏 #undef :取消已定义的宏 #ifdef :如果已经定义了宏,则编译下面代码 #ifndef :如果未定义宏,则编译...
2018-10-10 11:07:25
502
原创 Git基础概念(1)
1.Git的基本概念Git 是分布式版本控制和源代码管理系统,重点使用和管理代码的速度。 Git 最初是由Linus Torvalds设计开发的,用于管理Linux内核开发。Git 是根据GNU通用公共许可证版本2的条款分发的自由/免费软件。Git官方网址是:https://git-scm.com/2.几个专业术语Workspace:工作区Index/Stage:暂存区,也...
2018-09-06 10:31:50
390
原创 日常分享
1.EasyX软件用途:共享库的使用,即C++开发平台和 TC 简单的绘图功能。官网链接:https://www.easyx.cn/2.易百教程用途:学习各种你想学习的东西,如Matlab。官方网址:https://www.yiibai.com/3.菜鸟笔记用途:学习各种你想学习的东西,如linux。官方网址:http://www.runoob.com/...
2018-09-05 16:20:07
288
原创 大端模式和小端模式
一.概念大端模式(Big-endian):高位字节排放在内存的低地址端,低位字节排放在内存的高地址端,即正序排列,高尾端;小端模式(Little-endian):低位字节排放在内存的低地址端,高位字节排放在内存的高地址端,即逆序排列,低尾端;例(无论是小端模式还是大端模式。每个字节内部都是按顺序排列):1)大端模式:低地址 -----------------> 高地...
2018-08-28 17:09:25
41819
4
原创 MIPI数据存储
参考博客:https://blog.csdn.net/luzhanbo207/article/details/80244912 在相机数据处理中,即数字图像处理中经常需要处理MIPI Raw数据和Raw数据,这里简单说明一下二者的差别(小端存储为例)。 一般来说,传感器采集的Raw数据通常为10bit,那么存储Raw数据就需要两个Byte,这将导致其中有4个bit位是空着的,造成...
2018-08-28 15:50:08
1686
原创 【OpenCV】elemSize()、elemSize1()
在Mat类中有两个成员函数:elemSize()和elemSize1():inline size_t Mat::elemSize() const { return dims > 0 ? step.p[dims-1] : 0; } inline size_t Mat::elemSize1() const { return CV_ELEM_SIZE1(flags); }先看第...
2018-08-21 15:35:38
712
1
原创 C++中的inline用法
1. 引入inline关键字的原因在c/c++中,为了解决一些频繁调用的小函数大量消耗栈空间(栈内存)的问题,特别的引入了inline修饰符,表示为内联函数。栈空间就是指放置程序的局部数据(也就是函数内数据)的内存空间。在系统下,栈空间是有限的,假如频繁大量的使用就会造成因栈空间不足而导致程序出错的问题,如,函数的死循环递归调用的最终结果就是导致栈内存空间枯竭。下面我们来...
2018-08-21 15:31:17
182
原创 C++文件操作Read函数
1. read头文件: #include <unistd.h>函数原型: ssize_t read(int filedes, void *buf, size_t nbytes); 返回值:读取到的字节数;0(读到 EOF);-1(出错) read 函数从 filedes 指定的已打开文件中读取 nbytes 字节到 buf 中。以下几种情况会导致读取到的...
2018-08-21 15:06:56
17336
2
原创 在Windows上基于windows.h的文件操作
1._lcreat 函数创建文件1.1 函数原型:HFILE _lcreat( LPCSTR lpPathName, int iAttribute);1.2 参数:lpPathName:文件的名称,该字符串必须包含Windows ANSI字符集中的字符。iAttribute:文件的属性:值 含义 0 正常。可以读取或写入。 ...
2018-08-13 17:00:52
2566
原创 CString类常用方法
1.Left(), Mid(), Right()CStringLeft(intnCount)const; //从左边1开始获取前 nCount个字符CStringMid(intnFirst)const; //从左边第 nFirst+1个字符开始,获取后面所有的字符CStringMid(intnFirst,intnCount)const; //从左边第 nFirst+1 个字符开始,获取后...
2018-08-13 16:25:23
841
原创 MFC----CFileDialog类
1.CFileDialog类原型CFileDialog类原型封装了Windows常用的打开文件或保存文件的文件对话框:CFileDialog::CFileDialog( BOOL bOpenFileDialog, //TRUE则显示打开文件对话框,FALSE则显示保存文件对话框。 LPCTSTR lpszDefExt = NULL, //指定默认的文件扩展...
2018-08-13 14:05:29
693
原创 Git安装及快速入门(2)
Git常见指令用法1.检查配置信息1.1 如果想要检查你的配置,可以使用 git config --list 命令来列出所有 Git 当时能找到的配置。1.2 可以通过输入 git config <key>: 来检查 Git 的某一项配置。1.3 获取帮助的三种方式1.3.1 三种指令$ git help <verb>$ git <...
2018-08-06 15:02:06
197
原创 Opencv----ROI设置
1 ROI概念 ROI是region of interest首字母的简写,翻译为感性趣的区域,其对象时图像。 对于图像,其实就是一个二维数组,只不过这个二维数组有点特殊,它有头信息,在头信息里会有描述这个二维数组的大小、图片类型和数组元素的数据类型等。下面是一张从官方教程里获取的一张辅助理解的图片。上面的图片只是一张灰度图,而我们常见的基本都是彩色图,在灰度图中...
2018-08-03 17:53:14
6162
3
原创 C++之枚举类型
一、枚举类型的定义enum 类型名 { 枚举元素列表 };类型名:变量名,指定枚举类型的名称。枚举元素列表:列出定义的枚举类型的所有可用值,各个值之间用“,”分开。例:enum mode { play,pause,stop };二、枚举变量说明枚举变量有多种声明方式:1.枚举类型定义与变量声明分开如:enum Mode { play, pause, st...
2018-08-03 17:12:10
1591
原创 VS2015+Opencv环境配置
在日常基于opencv库的C++开发中,灵活的运用Opencv+VS2015+Cmake,能起到事半功倍的效果,可是当项目工程繁杂庞大,还是避免不了opencv的环境配置,经过一次次艰苦摸索,总结如下:1.给OpenCV压缩包解压到一个任何磁盘中,我的安装目录默认在C盘根目录下,首先要在计算机上配置环境变量;2.环境变量的配置,计算机—属性—高级系统设置—环境变量—Path—编辑—新建...
2018-08-01 16:27:54
3104
原创 C++----vector用法
首先,在c++中,vector是一个十分有用的容器。作用:它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。vector在C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。特别注意:使用vector需要注意以下几点:1、如果你要表示的向量长度较长(需要为向量内部保存很多数),...
2018-08-01 14:50:20
212
原创 PCL----可视化深度图像
说明:主要通过两种方式实现深度图像的可视化:一种方式是在3D viewer中以点云的方式显示。(深度图来源于点云图) 一种方式是作为一幅图像显示(以不同的颜色表示不同的深度值)操作在VS2010 中新建一个文件 range_image_visualization.cpp#include <iostream> //标准输入/输出#include <boost/th...
2018-08-01 13:59:22
1680
2
原创 opencv----仿射变换
opencv实现仿射变换利用opencv实现仿射变换一般会涉及到warpAffine和getRotationMatrix2D两个函数,其中warpAffine可以实现一些简单的重映射,而getRotationMatrix2D可以获得旋转矩阵。 warpAffine函数void cv::warpAffine ( InputArray src, Outp...
2018-08-01 11:02:57
396
原创 C语言之联合体
1.说明union在C中本质上是一个结构体,用法和struct相似,定义如下:union 名称 { //... 成员};声明如下(要在名称前加上关键字union):union 类型名称 变量名称;调用如下(用expression.identifier的形式来调用成员):a.member1 = 10; // a为unionp->member1 = 2...
2018-07-18 17:18:42
974
原创 左移&右移
左移: 左移就是把一个数的所有位都向左移动若干位,在Ç中用<<运算符例如:int i = 1; i = i << 2; //把我里的值左移2位 也就是说,1的2进制是000 ... 0001(这里1前面0的个数和int的位数有关,32位机器,gcc里有31个0),左移2位之后变成000 ... 0100,也就是10进制的4,所以说左移1位相当于乘以2,那么左移...
2018-07-13 18:26:48
1009
转载 多通道(Multichannel)单通道(singlechannel)图像
原博客链接:https://blog.csdn.net/futurewu/article/details/9945611 在做机器视觉包括相机视觉时,常常要将一个多通道图像分离成几个单通道图像或者将几个单通道图像合成一个多通道图像,以方便图像处理,这篇博客,是为加深对这两个概念的理解,下面会给出部分OpenCV开源库对单通道与多通道图像间相互转化的程序代码,并对运行结...
2018-07-12 16:17:32
8964
1
原创 fopen/fwrite/fclose
在C语言中,常常需要用到fopen打开文件,准备进行写操作,再用fwrite把数据写入文件,最后用fclose关闭文件。其中,在fopen函数中有多种参数,具体用法如下:r 以只读方式打开文件,该文件必须存在。r+ 以可读写方式打开文件,该文件必须存在。rb+ 读写打开一个二进制文件,只允许读写数据。rt+ 读写打开一个文本文件,允许读和写。w 打开只写文件,若文件存在则文件长度清为0,即该文件内...
2018-07-11 10:40:42
1206
原创 数据类型位数
1.C语言常见数据类型(32位系统为例):2.默认有符号的数据结构short,int,long的区别上表数据结构基本都有符号型,如int,long都默认为有符号型,其具体区别主要和系统位数有关:16位操作系统:long:4字节,int:2字节,32位操作系统:long:4字节,int:4字节,short:2字节64位操作系统:long:8字节,int:8字节 ...
2018-07-09 17:11:47
5666
转载 Opencv_Mat
Mat类中的at方法对于获取图像矩阵某点的RGB值或者改变某点的值很方便,对于单通道的图像,则可以使用:image.at<uchar>(i, j)来获取或改变该点的值,而RGB通道的则可以使用:image.at<Vec3b>(i, j)[0] image.at<Vec3b>(i, j)[1] image.at<Vec3b>(i, j)[2]...
2018-07-09 16:26:29
386
转载 Opencv——setMouseCallback
用户通过鼠标对图像视窗最常见的操作有:1. 左键单击按下2. 左键单击抬起3. 左键按下拖动4. 鼠标指针位置移动单次单击操作响应事件及顺序Opencv中setMouseCallback()创建了一个鼠标回调函数,每次在图像上单击鼠标左键再抬起的过程,都会分3次调用鼠标响应函数,并且响应顺序是:1.左键单击按下;2.左键单击抬起;3.鼠标指针位置移动(即使原地单击,鼠标位置并没有移动);可以编码验...
2018-07-09 16:14:38
784
原创 Opencv_contverTo函数
1.函数原型: voidMat::convertTo( Mat&m, int rtype, double alpha=1, double beta=0 ) 输入参数: (1)m表目标矩阵。如果m的大小与原矩阵不同,或者数据类型与参数不匹配,在函数convertTo内部先给m重新分配空间。(2)rtype 指定从原矩阵进行转换后的数据类型,即目标矩阵m的数据类型。矩阵m的通道数与原矩...
2018-07-09 15:35:32
261
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人