自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(44)
  • 收藏
  • 关注

原创 opencv-normalize-源码分析

normalize-源码分析前言参数的影响源码分析前言normalize函数,在网上已有不少文章做了其原理的介绍及用法展示,在查找资料的过程中,针对网络所缺少的部分(参数的使用逻辑及源码解析)进行详解,也记录我学习源码的过程便于以后查阅。参数的影响原理就不做详细介绍了,该文章做了详细介绍,这里只分析两个参数对归一化结果的影响:参数影响src图像输入、矩阵输入dst矩阵输出,支持各种depth和1、3通道alpha归一化公式为src[i]/scale,其中sca

2020-11-18 11:12:11 705 3

原创 opencv-Mat-深度探究

Mat–深度解析Mat作为图像处理操作的基础对象,不掀开它的神秘面纱,实在无法愉快的看源码,所以在此做一个学习总结~先贴出opencv的官方文档地址,这里比较详细、概括性的介绍了opencv相关的结构和知识,其中包括了Mat结构,对于初学者,我感觉很值得一看~想了解一个对象,就要拿出面试官八卦你的精神:你叫什么?-----------------(Mat)你是干什么的?-----------(Mat的功用)你有什么优势?-----------(Mat比Iplimage改进的地方)你能接手哪些

2020-08-20 18:23:40 561 1

原创 opencv-Mat成员变量-step

初探step 在一篇博文中对type、depth、step这三个成员变量有比较清晰的解释,阅读后对step这个成员仍然存在一些疑惑,因此将自己观察到的信息记录下来,方便后续回忆。 疑惑1:step的用法? 第一次看到step,第一反应会是,是什么?怎么用?所以先介绍step这个变量怎么来用。Mat last_img= imread("D:\\pic-test\\img1.png", 1);cout << last_img.step[0] << " ...

2020-08-13 14:49:13 2289 1

原创 opencv源码解析--calcSharrDeriv/copyMakeBorder

calcSharrDeriv(求微分)、copyMakeBorder(边缘扩展)--opencv源码解析1. 函数体解析 a. static void calcSharrDeriv(const cv::Mat& src, cv::Mat& dst)函数作用 对输入图像求微分,并将微分结果存储到dst中,微分模板可见原理 src 待处理图像,src的depth必须为CV_8U,通道不做要求 dst 存放微分结果,类型同src,...

2020-08-12 16:09:10 1638

原创 opencv--LK光流算法--源码解析

opencv--LK光流算法--源码解析LK光流算法由Jean - Yves Bouguet提出,该算法是基于亮度恒定、时间连续、空间具有一致性的前提下,提出的一种基于特征点的追踪算法。该算法是将求两帧间特征点的最小误差值应用到图像上进而转换为求图像微分、差分的一种迭代算法。光流算法用例 Mat old_frame, old_gray; vector<Point2f> p0, p1; // Take first frame and find corners i

2020-08-11 16:04:18 4997 10

原创 MFC List Control 控件--多列设置、数据插入、整行删除、对整行数据插入操作、对整行数据删除操作

tips:使用list Control控件的目的是:让数据进行多列展示。这里有一个需要注意:不能使用list Box,List Box 的多列展示,是指数据在一列展示不完的前提下,折叠到第二列进行展示。1.多列设置设置多个列头,类似平时我们word中所用列表的列头。void knowledgeBaseDlg::AddCols(UINT id){ CRect rect; CWnd...

2019-03-17 22:53:56 15764 3

原创 MFC使用中出现的一系列小问题及解决方法

1.添加Button按钮后,不能进入到该按钮下的事件响应函数中解决方法:修改该Button ID在 resource.h 文件中对应的属性值。原因:该按钮的属性值和别的按钮属性值重复。2.MFC资源视图中各个资源作用解释1.BITMAP位图资源,包括导入的和自己创建的。有了它们程序就可以变得十分美观。2.DIALOG对话框资源,对于基于对话框的应用程序十分重要。里面有建立的各...

2019-02-23 17:14:08 414

转载 CString和string的相互转换

https://www.cnblogs.com/HappyEDay/p/7016162.html转载自happyEday,解释的非常清楚,故记录,以便后续查阅CString 转换成string我试了很多的方法,都不行,我用的vs2010------解决方案--------------------unicode:CString sz1 = L"abc";std::string sz2 = CT2A(...

2018-07-10 09:20:49 3180

原创 KMP模式匹配算法

在准备一些实习笔试时,发现编程题的重点都落在了字符串上,题目各异,但却着重考察了对字符串的掌握程度。故专门复习了字符串匹配算法。在字符串的匹配算法中,最好理解的就是朴素匹配算法,即通过字符串1和字符串2点对点式的暴力匹配,得到匹配结果。还有一种是KMP模式匹配算法,它分析了朴素匹配算法中不必要的匹配情况,更好的为匹配节省了时间。1.朴素匹配算法其匹配过程如下图所示,非常清晰明了。从src的第一个字...

2018-04-19 17:35:31 1709 2

原创 在MFC上搭建OSG模型

根据我的搭建经验,总结出一点非常有用的经验:1.借鉴osg库自身携带的example例子中MFC的搭建例子。然后对该框架进行一个个人的总结,希望有问题大家可以指出。如图1,在创建好MFC单文档框架的前提下,新建一个.h文件并且在该.h文件中新建一个类,该类代表OSG类,在osg类中,我们要实现场景的初始化功能以及渲染功能。具体的表现形式如下。#pragma once#include &lt;o...

2018-04-16 11:34:35 1421

原创 OSG 《最长的一帧》 学习笔记-frame(一)

frame()作为渲染函数,只有简单的一句,但是它的内部到底是怎样的呢,我会跟着《最长的一帧》一起慢慢学习。///////////////////////////////////////为frame()源码,后面会深入解析每一个变量,每一个函数的源码//////////////////////////void ViewerBase::frame()//frame的内部实现{     if(_don...

2018-04-12 22:09:56 1692

原创 osg3.0--节点(Geode)

osg中有三大节点:Node,Goup,GeodeGeode作为叶节点,用于保存几何信息以便渲染。Geode节点下的Billboard类,为布告板技术,共有三种模式,视点模式,世界模式和轴模式。当设置为视点模式时,视点发生改变,物体的坐标位置也发生变化,保证物体一直面向视点。当设置为绕轴旋转时,物体围绕轴进行旋转,设置为绕世界旋转时,会绕x,y,z轴旋转。//创建Billboard对象 osg:...

2018-04-11 20:43:01 3423

原创 c++ 顺序容器---vector

对顺序容器这四个字一直不太理解,《c++primer》中对其作出解释为:为程序员提供了控制元素存储和访问顺序的能力。换种方式理解:不管是在这类容器中存储元素,访问元素还是删除元素,它都其自身的数据结构特点确定了一定的访问顺序,是一种有序的访问,并非无序的访问。如图1,顺序容器如下:////////////////////////////////////////////////////////---...

2018-04-05 12:35:14 1989

原创 win10 家庭版安装sql2000 pre

 点击sql的setup程序,电脑自动弹出“你的电脑无法安装此程序”之类的。搜了很多的解决办法,总算安装完毕,总结下来,防止下次走弯路。  总体思路:1.将SQL安装包下X86/system/SQLUNIRL.DLL这一文件替换到C:\Windows\SysWOW64下。(注意:我放到该文件夹下后,依然弹出不能安装的警告,考虑到我的安装文件是32位以及win10兼容性的...

2018-03-26 17:03:41 2733

原创 红黑树的实现

红黑树是在平衡二叉树的基础上实现的,本文详细描述一下红黑树的实现过程。红黑树的创建有两个基本规则:根节点为黑色,新的插入节点为红色。该规则的优先级最高。数据结构为:左孩子域,右孩子域,颜色域,数据域,双亲域。typedef int ElemType;typedef enum{RED=0,BALCK=1} Color;typedef struct RBTree{ RBTree *lefr...

2018-02-17 18:27:46 251

原创 线索化二叉树

在二叉树中,有很多节点的指针域为空域,造成结点的浪费。针对这种现象,提出线索化二叉树这一概念,其基本思想是遵从中序遍历二叉树,将二叉树的空节点有效的利用起来。具体来说,是按照以下的步骤来实现的。本文是利用中序遍历的思想对二叉树进行一个线索化:已知一颗二叉树如图所示:如图1,是一颗普通的二叉树,一个节点有左右孩子和数据域。现在我们知道这个二叉树的中序遍历结果,如图2所示,然后按照中序

2018-02-04 17:44:59 444

原创 SQL Server 不存在或访问被拒绝 --以及解决方法

在使用sql server连接程序和数据库时,发生了这种错误“SQL Server 不存在或访问被拒绝 ”,根据网络上的信息,整理出下面的解决方法============= 首先,检查网络物理连接 =============ping 服务器IP地址/服务器名称使用举例:ping LG-PC01 、 ping www.baidu.com(在cmd命令中)假如ping 不成功,说明物理连

2017-11-18 20:48:34 58921 3

原创 #关于VS2013中遇到的问题总结

错误1错误1error MSB8031: Building an MFC project for a non-Unicode character set is deprecated. You must change the project property to Unicode or download an additional library. See http://go.microsoft.c

2017-11-14 10:07:24 428

原创 数组名和指针的区别

数组名和指针之间,经常会交替使用这两个变量,比如,把一个指针当成数组来使用,或者是把数组名赋值给指针,通过指针来访问数组成员变量,但是,数组名和指针之间到底有什么样的联系与区别,以及什么情况下该使用指针,什么情况下该使用数组名,我对这个做一个小小的解读。。 上图中,定义一个数组,数组名为arr,分别打印arr本身的地址,arr首元素的地址,以及arr本身,以整型形式输出,发现,这三者的值是相同

2017-11-10 17:16:54 24551 22

原创 函数/代码安全、malloc的低层实现

一般说到代码安全时,一般会涉及这几个方面: 一、函数中的指针操作出现下面几种情况: 1.指针访问无效的内存 2指针所指资源没释放,导致内存空间越占越大。 3.指针已释放资源,又去访问。 二、函数在结束的时候,返回局部变量的地址或引用。 三、代码的线程安全。如何知道代码或函数是线程安全的?在函数运行的过程中,可能同一个会导致两个或两个以上的线程来访问变量,那么,如果在时间上出现你先取,

2017-11-01 22:52:36 499

原创 c语言中i++和++i的区别

自行打印printf("%d %d",i++,--i);这一行代码,会发现编译器给出的值和我们所想象中是不一样的,我将从汇编的角度对前置++与后置++做一个简单的解释。普遍化的解释: 前置加加:先取值,然后再加加 后置加加:先加加,再取值具体分析如下:下图为上面printf语句的汇编代码: 最开始执行了下面这几句代码: 这三句汇编中执行了–操作,说明,printf函数中,两个i,先计

2017-10-28 16:18:25 35838 12

原创 linux进程间通信-信号量

引入信号量之前,先介绍几个概念:1.临界资源:同一时刻只允许一个进程或线程访问的资源。(有时候是有限个进程或线程访问),就比如一支笔一次只能是一个人使用。 这里的临界资源在c语言或c++中的表现就是从代码段开始,一直到堆区的这一部分,我们将其称之为临界资源,对于每一个进程,都有各自独立的栈,所以进程之间栈不是共享的,除了栈以外的代码段,数据段,只读数据段,堆区这几个内存结构可以说是一个程序中不同进

2017-10-25 22:26:55 199

原创 c和c++中const,指针和引用

一.不同标准下const特性 c语言所用的标准为C89;c++所用的标准为C++99,在这两个标准下,对const特性有不同的定义. c89: 1.const为一个常变量,编译器将其当成一个变量进行编译。唯一与变量不同的地方是:不能将const作为左值来使用。我们知道,改变一个值的方式有很多中,const不能作为左值,但通过指针访问const变量,依然可以改变const所修饰的变量的值。 2

2017-10-25 21:59:25 441

原创 进程间通信-管道(有名管道和无名管道)

1.进程间通信(IPC)的方式有: 使用文件系统实现无哦进程共享文件数据、父子进程共享数据段、管道、共享内存、信号量、套接字等等2.单双工介绍: 单工:数据只能从固定的方向传播,比如广播。 半双工:数据可以双向传播,但同一个时刻只能是一个方向传播。 全双工:同一时刻可以双向传播。3.有名管道的介绍: 命令:mkfifo name 管道文件和普通文件区别:普通文件的内容存储

2017-10-19 17:25:12 712 1

原创 内联函数

内联函数:当编译器发现某段代码在调用一个内联函数时,它不是去调用该函数,而是将该函数的代码,整段插入到当前位置(比如说下面的实例程序,在main函数中,调用到foo这个函数时,会将代码展开为a+b插入到主函数中)。这样做的好处是省去了调用的过程,加快程序运行速度。int foo(int a,int b){ return a+b;}在正常的编译过程中,调用到一个函数时,需要将其调用的参数

2017-10-19 15:59:20 379

原创 程序的编译链接过程

平常在编程完之后,点击生成解决方案,然后运行,就会得到我们需要的结果,这个结果是怎么来的,在这个过程,会发生错误,错误又分为几类错误呢?它们分别发生在编译连接的哪个阶段?是什么问题造成的呢? 在这个过程中,能看到现象却看不到本质,面对各种问题,让我们无所适从,现在就先对编译链接过程进行一个简单的剖析。#include<stdio.h>int main(){ printf("hello w

2017-10-18 18:00:28 661

原创 内存

程序与内存的关系,不可分割,内存是承载程序运行的介质,也是程序进行各种运算和表达的场所,了解内存的状况,对于理解程序有着非常重要的作用 下图为一个linux下一个进程里典型的内存布局。 一个程序的内存空间,和其系统的位数有关,一般32为系统,其内存大小为4GB,(2的32次方)。但是对于4GB的内存空间,windows系统会默认将高地址的2GB空间分配给内核,linu

2017-10-17 17:24:23 240

原创 linux中进程控制-执行程序

linux环境下使用exec函数 linux环境下使用exec函数执行一个新程序,该函数在文件系统中搜索指定路径的文件,并将该文件内容复制到调用exec的地址空间,取代原进程的内容,如下图。exec函数的原型如下:#include<unistd.h>int execl(const char* pathname,const char *arg0,...);int execle(const ch

2017-10-16 22:55:11 627

原创 数据结构-前中后序遍历的非递归实现

前序遍历实现思路: 前序遍历,先打印根结点,再打印左右孩子,我们循环遍历各个结点时,要做到先出栈根节点,再将根节点右孩子和左孩子入栈,等到下一轮循环时,就先出栈其左孩子,再将左孩子的右左孩子入栈,直到叶子结点,按照左中右的顺序遍历完所有的结点。 void NicePreOrder(BinaryTree *ptr)//非递归进行前中后序遍历{ assert(ptr != NULL);

2017-10-11 22:30:07 1310

原创 linux 进程控制

进程标识符 进程ID,类似每个人的身份证号码。根据进程ID,用户可以精确地定位一个进程。 进程标识符的类型pit_t,本质是一个无符号整型。 进程标识符与进程是一对一的关系,进程标识符和程序是多对一的关系。 进程标识符1——–>进程1———>程序1 进程标识符2——–>进程2———>程序1 同一个程序文件可以加载多次成为不同的进程。进程中重要的ID值 每个进程都有6个重要的ID值,分

2017-10-06 16:49:27 190

原创 return和exit函数区别及杨辉三角

return和exit的区别return和exit函数都是正常中断时所调用的函数。 1.exit函数结束的是当前进程/当前程序,在整个程序中,只要调用exit就结束了。int fun(){ printf("now fun started\n"); printf("\n"); int arr[10] = { 12, 23, 34, 45, 56, 67, 78, 89, 9

2017-10-02 17:11:30 263

原创 Linux-进程环境(shell环境)

命令行参数: 对于c语言来说,程序的执行是从main函数开始的,原型如下:int main(int argc, char* agrgv[])argc:命令行参数的个数 argv:是这项参数的各个指针所构成的数组,其每个元素是一个字符串,以”\0”结尾,代表一个命令行参数。 argv[0]:代表了该程序的路径名加文件名 argv[argc]:是一个NULL指针补充函数:char* ri

2017-09-30 18:07:14 248

原创 二叉树的相关操作(2)--各类分支查找

1.检测二叉树单分支个数int SizeBrach(BinaryTree* ptr){ int num = 0; if (ptr != NULL) { num = SizeBrach(ptr->leftchild); if (ptr->leftchild != NULL&&ptr->rightchild == NULL || ptr->lef

2017-09-28 18:10:21 460

原创 linux--环境变量(linux进程内存管理)

数据的内部存储: 大端:低地址存高位数 小端:高地址存高位数 代码段: 一个程序多数情况下是不需要更改自身代码的,只有一种情况例外,就是一些长时间运行的升级程序。(另一种解决方案为采用共享库的形式)。 数据段: 包含程序中明确给定初值的全局变量和静态变量。 缓冲段: 通常是没有明确给定初值的全局变量和静态变量。 栈: 所有的自动变量和函数调用时所需要保存的信息(返回地址,函数调用

2017-09-28 16:17:53 392

原创 linux进程--进程环境(程序的启动与退出)

加载程序流程: 1.读取头部信息,确定需要的地址信息。 2.分配地址空间。 3.将程序读入地址空间的段中。 4.如果需要,创建一个堆栈段。 5.设置其他信息,例如环境变量。 6.执行程序。总结:加载器每次讲程序加载前需要分配地址空间,所以每次程序加载时不会使用同样的地址。退出程序 1.自愿退出 C语言中常用到的return和exit命令。在程序退出时,操作系统需要回收进程所分配的资源

2017-09-28 11:05:20 600

原创 二叉树相关操作

创建二叉树从键盘输入字符创建二叉树BTree CreateTleft(){ BinaryTree* temp = NULL; ElemType a = 0; scanf_s("%c", &a); if (a != '#') { temp = BuyNode(); temp->data = a; temp->

2017-09-26 23:11:43 245

原创 堆排序简要介绍

堆排序堆是完全二叉树,具有如下性质:大顶堆:每个节点的值大于或等于其左右孩子结点的值,小顶堆:每个节点的值都小于或等于其左右孩子结点的值。 堆排序是根据完全二叉树的性质5来排序的。 完全二叉树性质五: 1.如果i=1,则结点i是二叉树的根,无双亲,如果i>1,则其双亲是结点i/2 2.如果2*i>n,则结点i无左孩子,否则其左孩子是结点2*i 3.如果2*i+1>n,则该结点i无右孩子,否

2017-09-23 23:03:49 296

原创 二叉树的遍历

二叉树的三种遍历1.后序遍历void PreOrder(BinaryTree *ptr){ if (ptr != NULL) { PreOrder(ptr->leftchild); PreOrder(ptr->rightchild); printf("%c ", ptr->data); }}核心思想:先访问左孩子,再访问右

2017-09-23 21:52:15 285

原创 linux下的文件及目录管理

进入文件命令模式后的操作命令删除一行:dd 删除多行:n+dd(n为行数) 删除同一行几个字:shift+c 删除当前光标以后的内容并进入插入模式 拷贝一行:p 拷贝多行:n+pp(n为行数) 粘贴:p 剪切:dp 撤销:u 光标移动到行尾:shift+4 光标移动到行头:shift+6 光标移动到文件为:shift+g 光标移动到n行:n+shirt+g 光标移动昂到第

2017-09-21 11:21:43 284

原创 OSG用cmake编译后,在生成解决方案期间所产生的问题

在我对vs2008和vs2013中配置OSG的经验中,在cmake编译好后生成解决方案时,都会出现相同的错误,如下:if (name=="Andr茅")return"Andr?;    这样的错误,解决的方法非常简单,在问号后面加上双引号就可以了,如果不嫌麻烦,还可以删除一些乱码和问号,然后再加上双引号,改正后的效果如下:if (name=="Andr")return"An

2017-09-01 15:05:04 613

空空如也

空空如也

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

TA关注的人

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