- 博客(88)
- 资源 (30)
- 问答 (1)
- 收藏
- 关注
原创 Windows下的Dump文件
一、 生成Dump文件方式1.1任务管理器在程序崩溃后,先不关闭程序,在任务管理器中找到该程序对应的进程。右键—>创建转储文件。此时会在默认的目录下创建出一个dump文件。可以看出,此种方法只使用与程序崩溃但没有立即自行退出的情况。倘若程序故障或自行退出,则此方法就难以应用。不过,我们可以在注册表中添加如下信息已确保系统在程序崩溃后自行保存一个dump文件
2017-08-04 10:41:10
9902
2
原创 Linux下利用core dump文件调试
一.生成coredump文件coredump又叫核心转储,当程序运行过程中异常退出时,由操作系统把程序当前的内存状况存储在一个core文件中,叫coredump.为了生成coredump文件,需要对环境做如下设置:1.ulimit -c unlimited此命令会取消对转储文件大小的限制,因为系统通常会默认不保存coredump文件,也即使用ulimit-c查看的结果为0.需要
2017-08-02 22:24:55
1098
原创 网络字节序
字节序指计算机内存或网络传输中数据的存储顺序,对于多字节数据,当低位存储在低字节则称为“小端存储”,当低位存储在高位则称为大端存储。如对四字节整数0x12345678:数据在网络中传输时,首先需要将发送端的主机字节序转换为网路字节序,并在接收端将网络字节序转换成主机字节序。网络字节序都是大端存储,而主机字节序与CPU架构相关。 可以使用如下函数实现网络字节序到主机字节序的转
2017-04-17 11:21:51
1201
原创 Visual Stdio中的断点
简单断点在指定行添加断点,右击可以选择条件和命中次数等断点条件:当达到指定条件时才会中断。命中次数:当达到指定命中次数时才会中断。命中条件:当命中断点时执行自定义操作,如输出变量值(且不中断程序的执行)数据断点使用数据断点可以监测到指定变量在何处被更改。程序处于中断状态,调试—》新建断点—》新建数据断点:
2017-04-16 23:06:36
1004
原创 内存常见异常值
VS的Debug模式下会对内存填充特定值以便我们调试,下面是三种常见的异常值。0xcccccccc:栈内存未初始化。0xcdcdcdcd:堆内存未初始化。0xfeeefeee: 标记堆上已经释放掉的内存。参考:http://blog.youkuaiyun.com/chenlycly/article/details/23708049
2017-01-19 23:17:11
880
原创 工作线程不要对界面操作
MFC并不是线程安全的,用子线程操作用户界面,可能导致线程主线程无法终止。例如在子线程处理函数中进行如下操作:Ondestroy中等待子线程结束:当关闭对话框时后,从资源管理器中依旧可以看到线程并未终止。另外,企图在线程处理函数结束时弹出一个MessageBox进行直观确认时,不能使用MFC中的MessageBoX,因其默认以对话框作为父窗口,这样也
2016-11-09 23:44:49
1956
1
原创 MFC 创建UI线程
对于windows来说,所有的线程都是一样的,但MFC却把线程区分为两种:用户界面(UI)线程和工作者线程。用户界面线程具有消息循环而工作者线程没有。UI线程可以创建窗口并给这些窗口发送消息,工作者线程执行后台任务,因其不接受用户直接输入蘑菇不需要窗口和消息循环。创建UI线程需要首先从CWinThread派生一个线程类,改类与CWinApp类派生额应用程序类很相似(CwinApp继承自CWin
2016-10-31 17:10:11
6361
原创 模态对话框测试
模态对话框只能屏蔽来自鼠标、键盘的消息,而不能屏蔽其他消息,也即模态对话框会独占用户输入。其实现原理如下:1. 让父窗口失效EnableWindow(pardent,FALSE);2. 建立模态对话框自己的消息循环3. 直至接收关闭消息,消息循环终止并销毁窗口其中EnableWindow作用是(摘自MSDN)Enables or disables mouseand keyboa
2016-10-30 23:38:54
856
原创 MFC中的模态对话框与非模态对话框
模态对话框创建:MyDialog mydlg;mydlg.DoModal()当前只能运行此模态对话框,且停止主窗口的运行,直到模态对话框退出,才允许主窗口运行。模态对话框的关闭顺序:OnClose:按关闭符号X后,响应WM_CLOSE消息OnKillFocus:窗口即将失去输入焦点,响应WM_KILLFOCUS消息OnDestroy:窗口即将被销毁时,响应WM_DESTR
2016-10-30 16:32:18
3509
原创 汇编学习:float与double速度问题
X86处理器包含两种类型的浮点数寄存器。第一种使用8个浮点寄存器组成浮点寄存器栈,另一种为向量寄存器(XMM,YMM),它们对于单双精度的处理是不同的。本文将讨论两种模式下的浮点数计算速度问题。一、当我们编译32位程序时,使用的是x87指令集,即使用浮点寄存器堆栈进行浮点计算。此种情况下,单精度与双精度的处理是统一的,故计算速度上没有差异。我们可以做如下验证:float a,b,c;c=
2016-10-10 11:09:35
6174
转载 高级语言内的单指令多数据流计算(SIMD)
摘要: 很多年来,x86体系的CPU增加的新指令集大多都是SIMD指令(和相应的寄存器);然而很容易忽视的是,我们在高级语言内也能进行很多SIMD类计算!正文: 单指令多数据流,Single Instruction Multiple Data,简写为SIMD,就是说用一个指令同一时间处理多个数据; 很多年来,x86体系的CPU增加的新指令集大多都是
2016-10-08 22:04:14
1955
转载 帧率、显示器刷新率与垂直同步
提到显卡的帧率(FPS)、显示器刷新率和垂直同步的关系,第一印象是这些概念之间似乎没有直接的关系,实则不然。首先来解释帧率(FPS,即Frame Per Second,帧/秒)。通俗来说,帧率是用来衡量显卡渲染能力的一个指标。显卡在处理图像数据时,性能越强的显卡,在均等时间内(比如1秒),渲染出的静态图像的数量(这一幅静态图像就称为一帧)。一幅一幅的静态图像按顺序以一定的速度出现在我们面前,由
2016-10-08 10:26:55
5558
原创 汇编学习:二维数组遍历
作为正式接触汇编的开篇,本文将研究二维数组的遍历问题。在图像处理中,通常需要遍历图像像素(即二维数组)。下面给出三个版本的遍历函数,并研究他们的汇编代码(VC2010编译器,x86版,Release模式)。(1)在两层循环内每次根据行列索引计算元素位置。(2)为了避免在内存循环内的乘法计算,可以在每次的外层循环中计算好行起始地址,内层循环每次执行++操作。(3)强外层循环的乘法操作也去
2016-10-07 23:36:40
3344
转载 寄存器
ebp和esp是32位的SP,BP esp是堆栈指针 ebp是基址指针 ESP与SP的关系就象AX与AL,AH的关系.32位CPU所含有的寄存器有:4个数据寄存器(EAX、EBX、ECX和EDX)2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP)6个段寄存器(ES、CS、SS、DS、FS和GS)1个指令指针寄存器(EIP) 1个
2016-10-07 15:17:27
538
转载 OpenMP并行程序设计——for循环并行化详解
在C/C++中使用OpenMP优化代码方便又简单,代码中需要并行处理的往往是一些比较耗时的for循环,所以重点介绍一下OpenMP中for循环的应用。个人感觉只要掌握了文中讲的这些就足够了,如果想要学习OpenMP可以到网上查查资料。 工欲善其事,必先利其器。如果还没有搭建好omp开发环境的可以看一下OpenMP并行程序设计——Eclipse开发环境的搭建 首先,如何使一段代码并
2016-10-06 22:34:48
1312
原创 SSE练习:单精度浮点数组求和
SSE(Streaming SIMD Extensions)指令是一种SIMD 指令, Intrinsics函数则是对SSE指令的函数封装,利用C语言形式来调用SIMD指令集,大大提高了易读性和可维护。Intrinsics函数的使用可查看手册Intel Intrinsics Guide。关于本文实现了单精度浮点数组的求和,切实感受SSE带来的速度提升。本文代码主要来自[1].首
2016-10-06 14:48:10
5180
转载 C语言编程优化运行速度
1、选择合适的算法和数据结构选择一种合适的数据结构很重要,如果在一堆随机存放的数中使用了大量的插入和删除指令,那使用链表要快得多。数组与指针语句具有十分密切的关系,一般来说,指针比较灵活简洁,而数组则比较直观,容易理解。对于大部分的编译器,使用指针比使用数组生成的代码更短,执行效率更高。在许多种情况下,可以用指针运算代替数组索引,这样做常常能产生又快又短的代码。与数组索引相比,指针一般能使
2016-09-16 20:15:50
16864
1
原创 StretchDIBits速度测试(HALFTONE)
StretchDIBits速度测试(HALFTONE)下面实验中显示窗口大小为1024*768,拉伸模式设为HALFTONE.一、单通道图像(1) 保持图像高度为1024,宽度从24到2024递增,递增间隔为50,下表为统计的显示耗时与图像宽度的关系:图像大小耗时(ms) 24*10249.796325
2016-08-21 11:54:33
1778
原创 StretchDIBits速度测试(COLORONCOLOR)
StretchDIBits速度测试(COLORONCOLOR)下面实验中显示窗口大小为1024*768,缩放模式设为COLORONCOLOR.一、单通道图像(1)保持图像高度为1024,宽度从24到2024递增,递增间隔为50,下表为统计的显示耗时与图像宽度的关系:图像大小耗时(ms) 24*10240.485881
2016-08-21 11:39:38
2038
原创 多媒体定时器
一、简介在工业生产控制系统中,有许多需要定时完成的操作,如数据采集程序。Win32提供了一个基于消息机制的定时器,使用SetTimer函数创建一个内存对象,设定间隔时间,当到达要求的间隔时,计时器对象发送一个WM_TIMER消息,由相应函数处理。但是由于WM_TIMER优先级低,只有等待消息队列中的其他消息都处理完毕后系统才会响应该消息。而且消息队列中的多个WM_TIMER会被合并,因此Win
2016-08-18 10:24:15
3947
原创 typedef与复杂声明
一个复杂声明中通常包含的类型说明符有()、[]、*三种。其中()用于说明函数类型以及改变说明的先后顺序;[]用于说明数组类型;*则用于说明指针类型。再平常编程中很少会遇到,因此只需要稍作了解。《C专家编程》中有具体的介绍,对复杂声明进行解释只需按照固定的步骤操作即可。下图为书中给出的复杂声明解析过程:
2016-08-16 11:36:03
522
原创 GDI双缓冲绘图
一、简介在进行复杂图形绘制时,若直接在屏幕DC上进行绘制,则会出现明显的闪烁。闪烁产生的原因是当绘制的图形较为复杂时,图形绘制过程中就被刷新到屏幕上,导致结果断断续续地显示出来。双缓冲绘图的原理是在另开辟一块内存用于绘制,当所有绘制工作完成后将内存数据一次性拷贝到屏幕上。双缓冲绘图步骤:创建兼容DC(CreateCompatibleDC)创建兼容位图(CreateCompati
2016-06-25 21:50:19
1923
原创 SUSAN角点检测
SUSAN是一种角点检测算法,本文首先介绍其基本原理,然后给出实现代码。如下图所示,当一个圆形模板在图像上滑动时,可以利用模板所覆盖区域内像素与中心点处像素灰度值的差异寻找角点。将模板内与中心像素差异小于某个阈值的像素点组成的区域定义为USAN(Univalue Segment Assimilating Nucleus)区域。可以发现,当模板中心处于平坦区域时,USAN面积最大,当模板中心处于边界上时,则USAN面积约为最大值的1/2,当模板中心位于角点处上时,USAN面积约为最大值的1/4。也就是说US
2016-06-24 21:22:58
2013
2
原创 形态学操作实现
数学形态学的基本思想是用具有一定形态的结构元素去度量和提取图像中的对应形状以达到对图像分析和识别的目的。数学形态学的基本运算有四个:腐蚀、膨胀、开和闭。基于这些基本运算还可以推导和组合成各种数学形态学实用算法。本实验分别实现针对二值图像和灰度图像的四种形态学操作。一、二值图像的腐蚀、膨胀、开、闭操作实验结果:二、灰度图像的腐蚀、膨胀、开、闭操作
2016-06-23 22:40:25
854
原创 Harris角点检测原理及实现
一、原理二、实现close all;clear all;I=imread('test.tif');[posX,posY]=harris(I);figure;imshow(I);hold on; plot(posX, posY, 'g*');function [posX,posY]=harris(I)%Harris角点检测%I:输入图像%posX:角点X坐标
2016-06-23 22:00:29
6028
1
原创 关于BMP
关于BMP位图的资料网上有很多,内容也比较基础。本文实现BMP位图的读取、显示、保存,并对一些重要的问题进行说明(包括字节对齐、内存中的存储顺序、调色板)。BMP共包括文件头、信息头、调色板(位深各部分的具体说明可以参考[1]。下面是位图的读取、显示、保存实现的主体代码,完整工程下载:Bmptest
2016-06-03 09:35:45
1053
原创 模拟滤波器到数字滤波器的转化
冲激不变法首先将$H(s)$进行拉普拉斯反变换得到单位冲激响应$h(t)$,对$h(t)$进行采样得到$h[n]$,再对$h[n]$进行$z$变换得到$H(z)$。因为数字滤波器的冲激响应是对模拟滤波器冲激响应的采样,因此该方法获得的滤波器时域逼近特性好。假设$H(s)$为有理多项式,且只有单阶极点,利用部分分式表达如下:
2016-03-01 00:05:32
3535
原创 IIR型高斯滤波的原理及实现
高斯滤波是图像处理中一种应用广泛的滤波器。通常使用二维高斯模板与图像的卷积实现高斯滤波,处理时间与模板大小的有关,或者说跟高斯标准差有关(由“3sigma准则”可知,模板宽度取为标准差的6倍时可覆盖0.9974的数据)。本文将介绍一种IIR型高斯滤波,该滤波器的处理时间只与图像大小有关,而与标准差无关。该方法基于高斯函数的一个多项式近似:
2016-02-28 00:08:07
3085
原创 Zernike矩之边缘检测(附源码)
由于Zernike矩是一种积分算子,因此对噪声不敏感,这一优良特性在图像处理中极其难得。下面我们将介绍Zernike矩在边缘检测中的应用。利用Zernike矩进行边缘检测最早由Ghosal等人[4]提出。
2016-01-30 10:25:08
16023
14
原创 Zernike矩之图像重建(附源码)
Zernike矩是一种正交矩,由Teague在1980年提出,本文将介绍Zernike矩的基本概念,并使用Zernike矩进行图像重建。
2016-01-30 10:07:16
6193
1
原创 真实感场景绘制(附源码)
本系统绘制了一个真实感的三维场景,并实现场景漫游。使用按键↑、↓、←、→或W、S、A、D控制运动方向,PgDn和PgUp可以改变观察者的高度,鼠标控制转向,按键‘F’可以打开和关闭“雾气”,Esc退出程序。本场景中绘制了墙壁与地面、天空、石柱、箱子、玻璃球、雪人、雾等对象,下面将依次分析它们的设计思路,这里将使用相同绘制技术的对象放到一起说明。
2016-01-29 20:54:02
3513
6
原创 体绘制之光线投射算法(附源码)
一、原理:Levoy在1988年提出了光线投射(ray-casting)算法[1],其基本原理是:从屏幕上每一个像素点出发,沿着视线方向发射出一条光线,当这条光线穿过体数据时,沿着光线方向等距离采样,利用插值计算出采样点的颜色值和不透明度;接着按照从前到后或从后到前的顺序对光线上的采样点进行合成,计算出这条光线对应的屏幕上像素点的颜色值。其原理如图1所示。
2016-01-29 19:56:21
12066
2
原创 对比度受限的自适应直方图均衡化(CLAHE)
直方图均衡化(HE)是一种很常用的直方图类方法,基本思想是通过图像的灰度分布直方图确定一条映射曲线,用来对图像进行灰度变换,以达到提高图像对比度的目的。该映射曲线其实就是图像的累计分布直方图(CDF)(严格来说是呈正比例关系)。然而HE是对图像全局进行调整的方法,不能有效低提高局部对比度,而且某些场合效果会非常差。如:
2015-11-02 14:04:59
40869
11
原创 双边滤波
双边滤波是一种非线性滤波器,该算法结合空间信息和亮度相似性对图像进行滤波处理,在平滑滤波的同时能大量保留图像的边缘和细节特征。 定义如下: 其中为输出图像,为输入图像,是以像素点为中心的邻域窗口,为滤波核。双边滤波的滤波核由两部分乘积组成:空域核与值域核。两个滤波核
2015-09-25 23:39:32
3188
2
原创 快速高斯滤波
高斯滤波器是图像处理中经常用到的滤波器,其滤波核函数为:为简单起见,这里省略了归一化因子。由的可分离特性:得:其中为输入图像,为输出图像,为滤波模板半径。根据准则,通常使。由此可见,我们可以将二维高斯滤波分解为两次一维高斯滤波。对于二维高斯滤波,设图像大小,高斯模板大小,处理每个像素点需要次操作,则算法复杂度。若使用一维高斯核对图像逐行滤波,再对
2015-09-25 15:39:35
1956
原创 积分图像的应用(二):非局部均值去噪(NL-means)
非局部均值去噪(NL-means)一文介绍了NL-means基本算法,同时指出了该算法效率低的问题,本文将使用积分图像技术对该算法进行加速。假设图像共像个素点,搜索窗口大小,领域窗口大小, 计算两个矩形邻域间相似度的时间为,对于每个像素点需要计算它与搜索窗口内个像素间的相似度,故NL-means复杂度为 。经过分析可以发现,该算法可以提高之处只有邻域间相似度的计算,即耗时的操作。基
2015-09-06 15:18:25
20926
16
原创 非局部均值去噪(NL-means)
非局部均值(NL-means)是近年来提出的一项新型的去噪技术。该方法充分利用了图像中的冗余信息,在去噪的同时能最大程度地保持图像的细节特征。基本思想是:当前像素的估计值由图像中与它具有相似邻域结构的像素加权平均得到。理论上,该算法需要在整个图像范围内判断像素间的相似度,也就是说,每处理一个像素点时,都要计算它与图像中所有像素点间的相似度。但是考虑到效率问题,实现的时候,会设定两个固定大小的窗口:...
2015-09-06 15:17:02
46234
41
原创 积分图像的应用(一):局部标准差
局部标准差在图像处理邻域具有广泛的应用,但是直接计算非常耗时,本文利用积分图像技术对局部标准差进行快速计算。标准差定义如下(采用统计学中的定义,分母为):其中。为了计算图像的局部标准差,首先设定局部区域的大小为 ,则局部区域的像素点个数 。对标准差的公式进行化简:因,故:可以看出,局部标准差计算中需要对图像与进行局部求和操作,即和。
2015-06-06 13:31:49
8842
2
原创 积分图像
积分图像(integral image)是一种用于快速计算矩形区域和的数据结构,常用它来对耗时算法进行加速。积分图像中点(x,y)处的值是指从灰度图像的左上角与当前点所围成的矩形区域内所有像素点的灰度值之和,即:
2015-06-06 10:30:16
6305
2
快速NLM文档
2018-03-02
MFC创建UI线程
2016-10-31
ModalBoxAndMessage
2016-10-30
MFC对话框创建
2016-10-30
MFC模态与非模态对话框
2016-10-30
形态学操作
2016-06-23
TestBMP测试
2016-06-03
Bmptest.rar
2016-06-03
真实感三维场景绘制
2016-01-29
快速高斯滤波
2015-09-25
汉语自动分词
2014-12-30
MFC实现俄罗斯方块
2014-06-01
请教编译原理中的问题
2013-10-28
TA创建的收藏夹 TA关注的收藏夹
TA关注的人