- 博客(30)
- 资源 (11)
- 收藏
- 关注
原创 C和C++文本读写速度对比
C和C++文本读写速度对比读到优快云论坛中有一个关于C和C++文本读写速度的问题,帖子网址为http://bbs.youkuaiyun.com/topics/260005411#new_post 。网友测试结果为C语言的执行速度要优于C++,本文对此感到不太相信,于是在自己的电脑上进行了验证。验证平台是笔记本Ubuntu操作系统。g++编译,均采用O3优化等级。测试文本大小为842M。g++ -O3 test
2017-08-04 15:39:31
2255
原创 利用C++读取文本最后一行信息
当文本数据太大的时候,如果想要获取的信息在最后一行,就需要从最后一行获取信息。下面是一个实现该任务的代码。例子文本中保存的数据如下,先需要获取, 最后一行第一个数字3,因为其记录了文本总共的行数信息。本例子先将文件流定位到文件末尾,然后依次向前进行换行符查询,找到第一个换行符,便找到最后一行的启始部分。从程序运行结果看,下面的文本大小一共为30字节,在每一行的末尾均有一个换行符。0 aaa1 bb
2016-12-27 16:18:15
3938
原创 等额本金和等额本息两种贷款方式的比较
本文介绍两种还款方式:等额本金、等额本息。通过分析认为等额本金的偿还方式更加划算。 等额本金:每个月偿还相同本金分额,并且支付上个月剩余本金产生的利息。 等额本息:每个月偿还相同数目的款项,按照复利计算,最终数目和本金按照福利计算数目相同。 假设需要贷款金额为b,贷款月利率为x,一共贷款n月,等本息还款时月还款额为a。等额本金还款 每月还款本金bn\frac{b}{n},另外还要还每月产生
2016-12-08 14:34:46
1365
原创 CRF和MRF概率模型的关系
CRF和MRF概率模型的关系最近再次阅读了文献Discriminative fields for modeling spatial dependencies in natural images,对CRF模型和MRF模型有了进一步的理解。总体来说这两者都是属于概率图模型范畴,MRF的理论是很理想的,但是其计算过程复杂,所以实际使用的是它的简化版本,该版本易于计算实现,但同时也削弱了其本身性能。CRF是
2016-12-06 21:15:40
3397
原创 利用stringstream 类实现字符串和数值间转换
利用stringstream 类实现字符串和数值间转换在C语言中需要利用atoi,itoa等函数实现字符串和数值之间的转换。在C++中可以使用std::stringstream类实现该功能。 std::stringstream派生关系如下图,可以看出该类属于输入输出流功能大类。 下面是两个例子代码。 * 字符串转数值#include <iostream>int main(int argc,
2016-11-28 17:15:08
502
原创 opencv和matlab矩阵类型数据相互传递
由于平时需要经常用到opencv和matlab处理数据,所以,实现两者之间数据传递,是很有意义的。 本文记录了opencv读写txt文本、matlab读写txt文本的方法。并借助txt文本这个中间媒介实现两个软件的数据交互功能。下面以此介绍opencv、matlab读写txt文本的方法。本文介绍的方法均是搜集于互联网。opencv对txt文本的读写方法,依据以下网址改进而得http
2016-07-22 14:53:09
1568
原创 opencv 矩阵元素不同获取方式及其效率对比
opencv 矩阵数据Mat元素获取有四种方式: 直接获取、模板方式、行指针方式、元素地址方式。测试代码如下:#includeint main( int argc, const char** argv ){ //矩阵总共获取次数 uint32_t num = 10000; Mat m(100, 100, CV_64F, Scalar(0)); //定
2016-04-15 14:38:00
965
原创 利用dlopen,dlsym对动态库进行类封装
在程序编写中会使用已有的动态库,如何对这些库函数进行类打包管理,便于后面引用,这是本文要解决的问题。本文分为三步:建立一个简单的动态库、对该动态库进行类封装、测试封装的动态库。本测试在ubuntu 14.04LTS系统上完成。1.建立一个简单的动态库源代码如下:头文件 fun.hppextern "C" int add(int a, int b);extern "C" int s
2016-03-07 15:33:42
1396
原创 利用opencv保存复杂结构的数据
在做图像处理算法测试的时候往往会用到复杂的数据结构来保存最终的处理结果。本文介绍如何使用opencv的FileStorage类实现这一个目的,该功能的实现主要包含三个部分:数据保存、压缩、读取。如果数据量较小的时候可以去除压缩这一步。 FileStorage类有两种组织数据的方法,分别是"{" "}"、"[" "]"两种符号对。"{" "}"符号对,要求期间的每个数据都要有自己的数据名
2016-01-31 16:01:32
1034
原创 读取PNG颜色索引数据
在某些应用中,可能需要PNG图片每个像素颜色索引值。如在目标检测中,VOC2012数据库中对每个目标类进行了分割标注,不同类别分别采用不同的颜色索引值。如0 表示背景, 1表示飞机等。opencv中的imread函数可以直接读出png RGB颜色信息,但是不能读出每个像素的颜色索引值。所以,本文给出了一个读取png图片每个像素颜色索引的函数。该函数依赖libpng库,并且和opencv相结合,利用
2016-01-27 18:56:26
5488
4
原创 ubuntu 14.04 下安装Armadillo库 (依赖库使用ubuntu专用版本)
在以前的博客中讲过通过通过自己编译依赖库的方式安装Armadillo。但是在使用过程中会出现错误,所以这里记录了一种更简单的安装方式。该安装方式直接采用编译好的ubuntu下的openblas、lapack、arpack库文件,所以安装过程很简单,并且最终运行的结果很完美。下面是以前自己编译安装方式网址:ubuntu 14.04 下安装Armadillo库 进行稀疏矩阵特征分解如果对u
2015-12-15 22:15:49
4174
原创 pkg-config工具包程序编译中的使用
当程序依赖的外部库文件和头文件相对比较多时,每次建立工程都需要对这些库文件进行配置,这个过程比较繁琐,所以pkg-config工具包被开发出来,解决这一个问题。本文主要介绍如何使用pkg-config工具包,并给出opencv和Armadillo软件库才用pkg-config配置的例子。本文实在ubuntu14.04的基础上进行测试。1. 安装pkg-config工具包如果ubuntu系统
2015-10-22 10:31:22
1150
原创 ubuntu 14.04 下安装Armadillo库 进行稀疏矩阵特征分解
图像处理中往往会遇到大型稀疏矩阵的特征值分解问题,如果采用一般的密集矩阵求解方法,对内存要求比较大。所以在稀疏矩阵的基础上进行特征值分解,更加合理。opencv2.49版本中还没有对稀疏矩阵的特征值分解函数,所以自己对此类问题进行了网上搜索。调研了ietl、lapack、Armadillo、Eigen这类库。文章先对各种库进行总结,后面在详细的介绍Armadillo库在ubuntu14.04系统上
2015-10-21 17:25:28
4402
原创 利用matlab获取算法源代码
在matlab2011以后版本,matlab加入了从m函数获取源代码的功能,可以将m文件专为C语言、C++语言。下面是从2015a matlab中使用coder工具的过程。1.首先利用mex -setup命令设置matlab的编译器,直接选择C++即可。2.在命令窗口中输入coder回车,即可打开coder工具。下面是获取imextendmin函数源代码方法
2015-09-16 14:20:29
3604
原创 ostream 保存数据出现乱码原因之一
程序跑完之后,往往需要将结果保存为txt格式,有的时候保存完成后,会出现乱码问题。一般能想到的原因就是txt编辑器编码不合适的问题,除此之外还有一种常常被忽略的原因是我们保存时数据处理不正确。字符型数据按照但字节数据进行保存时,如果字符型数据保存的是不能被正常显示的ASCII值,读该文件时便会出现乱码现象。下面是数据处理不正确导致乱码的例子。要解决这个问题,只要将字符型数据强制转换为整型数据即可。
2015-09-01 20:22:47
1670
原创 opencv多通道数据和多维数据的区别
opencv中经常要用到多通道矩阵来处理彩色图像,同时多维度的矩阵在opencv中也会经常遇到,这里对这两种数据结构做一个对比。总体来说,对这两种数据结构opencv在处理上是不同的,主要是数据的存储安排上不同。多通道数据仍然是按照二维数据的方式来存放数据,不过于正常的二维矩阵相比较,单个元素包含了多个数据值如B、G、R。而多维矩阵是多个层级的二维矩阵组合而成。下面是一些细节对比,和该结论的依据。
2015-08-12 17:27:03
3137
原创 ubuntu系统下cmake 编译matlab中mex文件
cmake 编译工程具有独特的优势,特别对于复杂的工程更是如此。利用matlab直接编译mex文件时,对于文件数据多的工程时,需要列举所有文件,并且要按照依赖关系排序,这些都是直接采用matalb编译mex的缺点。下面通过一个简单的加法函数例子,说明如何利用cmake编译生成mex文件。如何对系统动态库进行设置,使matlab能够正常调用mex函数。首先说明如何生成mex文件。本例
2015-05-19 22:47:39
4856
原创 opencv矩阵赋值函数copyTo、clone、重载元算赋=的比较
opencv矩阵赋值函数copyTo、clone、重载元算赋‘=’之间实现的功能相似均是给不同的矩阵赋值功能。copyTo和clone函数基本相同,被赋值的矩阵和赋值矩阵之间空间独立,不共享同一空间。但是重载元算赋‘=’,被赋值的矩阵和赋值矩阵之间空间共享,改变任一个矩阵的值,会同时影响到另一个矩阵。当矩阵作为函数的返回值时其功能和重载元算赋‘=’相同,赋值运算赋会给矩阵空间增加一次计数,所以函数
2015-01-29 10:14:43
7072
原创 图模型中mincut算法的理解
利用图分割算法对图片进行分割是目前比较流行的算法之一。利用这种方法对图片进行分割时需要对相应的能量函数进行最小值搜索,当能量函数在定义域中属于凸函数时利用梯度下降法、EM等经典算法可以得到唯一的极值解,该解便是全局最小解。但是对于能量函数在定义域中不是凸函数,利用上面的经典算法很容易陷入局部极小值问题,从而很难得到理想效果。虽然采用模拟退火方法可以减轻陷入局部极小值可能性,但是这并不是最优的解法。
2015-01-19 16:18:15
7743
1
原创 Opencv直方图计算是否需要Gpu加速?
众所周知,Gpu加速技术对图像处理具有很大的影响,在前面的博客中通过对比验证了Gpu加速技术对图像滤波的高效率。但是Gpu技术并不是万能的,本文通过比较发现Gpu计算直方图的效率并没有传统计算方法效率高。下面表格是对比结果,时间是通过运行20次求平均值而得,后面给出相应的比较代码。Gpu与Cpu计算直方图效率对比方式Cpu内存Gpu内存效率0.855
2014-12-19 15:59:38
1773
原创 opencv K邻近分类器的使用
利用Mat数据类型训练Opencv K邻近分类器,下面是手册中给出的K邻近分类器使用的例子,该例子是以CvMat形式实现的。通过下面的例子可以知道如何使用Opencv自带的分类器、矩阵数据如何访问、如何画图、如何使用Opencv的随机数生成函数等内容。在第二个例子中已将这些代码部分做了注释。
2014-12-17 19:14:18
968
原创 matlab、opencv、opencv+gpu滤波运行速度的比较
对Matlab、Opencv、Opencv+GPU不同平台图像滤波的效率进行了对比,并给出响应的源代码和对比结果,结果表明Opencv+GPU平台对图像滤波效率最高,后面依次是Opencv、Matlab。
2014-12-09 19:51:34
3218
原创 服从广义高斯分布样本的参数估计
服从广义高斯分布样本的参数估计 图片经过带通滤波(如DCT变换频域系数、小波变换后的小波系数,gabor方向滤波器滤波后的系数)后,其系数服从广义高斯分布,广义高斯分布公式如下所示:参数是广义高斯分布的形状参数,是与标准差有关的参数,x是带通滤波后的系数。当=2时广义高斯分布就是正态高斯分布,此时是标准差的倍。其中分母中的gamma函数如下所示: 令,滤
2014-12-05 08:54:11
5380
11
原创 CNS网络GPU加速配置步骤
本次测试是在Win7 64位操作系统上完成,安装盘均是默认的系统盘C,其它路径可以参照修改,其中采用的编译器是VS2010版本。附录中有NVIDIA支持GPU加速的芯片型号。1. 安装 CUDA driver and CUDA toolkitCUDA driver 安装地址:http://www.geforce.com/drivers选择自动检测GPU型号然后下载驱动。
2014-11-05 11:06:17
2609
原创 Harris角点检测旋转不变性和尺度不变性的数学理解
Harris角点检测算子基本Harris角点检测算子Harris角点检测算子本身具有旋转、平移不变性的特点,但不具有尺度不变性。下面是数学方面的理解。Harris角点检测的灰度相关矩阵为:…………………………………………………………………………………………(1)角点判别式为…………………………………………………………………….(2)两幅图片和.其中是经过平移、旋转、缩放得到
2014-10-20 20:25:45
8209
1
原创 非模态对话框不始终覆盖父对话框的方法
CDlgShowAllPic m_ShowAllPic;if(!m_ShowAllPic.m_hWnd) m_ShowAllPic.Create(IDD_SW_ALLPIC,this->GetDesktopWindow());m_ShowAllPic.ShowWindow(SW_SHOW);
2014-07-03 16:56:29
1940
原创 利用MFC显示IplImage结构图片
利用opencv对图像数据处理的快捷性和MFC全面的界面显示,可以很好的对图片进行处理并形成属于自己的图像处理程序界面。两者结合还是有很大的优势的。 opencv的IplImage图像结构使用方便,并且具有强大的解码功能。对得到的图像数据进行处理后,封装成BMP图片结构,利用MFC的函数进行显示。BOOL CImgCenterDib::ShowIplImg(IplImage*Img,CDC*
2013-10-30 21:08:45
1469
原创 神经网络编程及其训练
1.神经元结构每个神经元包含权值、输入值、激活元素,误差项,阀值组成。在这里用一个结构体Nerver来表示,其中Weights_Temp[20],这个数组在批处理训练的时候会用来,保存个样本训练后权值的改变量。typedef struct{ float Weights[20]; //权值 float Weights_Temp[20]
2013-07-06 00:40:15
1205
转载 CCD和CMOS摄像头的区别
首先说一下在闭路电视监控中摄像机的CCD 和CMOS 的结构,ADC的位置和数量是最大的不同。简单的说,CCD每曝光一次,在快门关闭后进行像素转移处理,将每一行中每一个像素(pixel)的电荷信号依序传入“缓冲器”中,由底端的线路引导输出至 CCD 旁的放大器进行放大,再串联 ADC 输出;相对地,CMOS 的设计中每个像素旁就直接连着 ADC(放大兼类比数字信号转换器),讯号直接放大并转换成
2013-05-24 10:43:10
2063
原创 for循环占用的指令周期问题
for循环占用指令周期的影响因素:1.单片机的指令集合,指令所花费的时间周期2.循环变量的数据类型,所占字节数越大,所占指令周期也就越大3.循环体完成的工作以avr单片机为例对于循环代码for(i=0;i对应汇编指令如下:for(i=0;i0000 ; i -> R16,R170000 ; f
2013-02-01 11:19:33
8701
1
C++参考手册
2016-04-24
GNU Autotools
2016-04-21
opencv3.10+opencv_contrib离线html手册
2016-01-13
opencv3.1离线html手册
2015-12-24
Matlab在原图片中画直线
2015-08-11
max-flow实现mincut方法
2015-01-19
模式识别书籍和matlab程序代码
2014-11-09
深度学习源代码
2014-10-29
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人