自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

翻译 2016 6 22

程序功能是把一副倾斜的文字图像矫正过来 这个程序,我熬了一夜1、读取图像,创建结构元素for(i=0;i原图高度{for(j=0,n=0;n对24位图像二值化处理img.width原图宽度{//gray 根据原图rgb值计算灰度值存在gray中gray= ((float)(img.image[lineBytes*i+n+2])+(float)

2016-06-22 10:44:15 473

原创 10 10以后的面试

Linux不熟悉的命令  man ls 就能查看ls相关的用法gcc编译过程: 在使用GCC编译程序时,其编译过程可以分为4个阶段:预处理(Pre-Processing) -> 编译(Compling) -> 汇编(Assembling) -> 连接(Linking) .grep命令: grep [-acinv] [--color=auto] '搜寻字符串' fil

2015-10-12 16:31:54 638

原创 ARM面试题

1)ARM可以工作的模式名字 ARM有7个基本工作模式:      用户模式(user)、     快速中断模式(FIQ)、     外部中断模式(IRQ)、     特权模式(SVC)、     数据访问中止模式(abort)、     未定义指令中止模式(undef)、     系统模式(system) 2) ARM核有多少个寄存器?      ARM有

2015-10-06 15:42:46 3082

原创 Linux的进程和进程调度

1、引言进程:是程序执行时的一个实例,可以看作充分描述程序已经执行到何种程度的数据结构的汇集。从内核观点看,进程的目的就是担当分配系统资源(CPU时间、内存等)的实体。 当一个进程创建时,它获得一个父进程地址空间的副本。共享正文段(代码段),但并不执行一个父进程数据段、栈和堆的完全拷贝,而是采用写时复制技术。 Linux使用轻量级进程对多线程应用程序提供更好的支持,两个轻量级进程基

2015-10-05 20:05:00 559

原创 Linux的硬链接和软连接(符号连接)

1.Linux链接概念 Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。默认情况下,ln命令产生硬链接。【硬连接】 硬连接指通过索引节点来进行连接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在Linux中,多个文件名指向同一索引节点是存在的。一般这种

2015-10-05 19:01:13 1724

转载 Linux的常用数据结构之链表

操作系统内核常需要维护数据结构的链表。Linux 内核已经同时有几个链表实现。为减少复制代码的数量, 内核已经创建了一个标准环形双向链表,并鼓励需要操作链表的人使用这个设施.使用链表接口时,应当记住列表函数没做加锁。若驱动可能同一个列表并发操作,就必须实现一个锁方案。为使用链表机制,驱动必须包含文件  ,它定义了一个简单的list_head 类型 结构:

2015-10-05 18:53:17 646

原创 Linux底层文件系统实现

1、引言Linux文件管理从用户的层面介绍了Linux管理文件的方式。Linux有一个树状结构来组织文件。树的顶端为根目录(/),节点为目录,而末端的叶子为包含数据的文件。当我们给出一个文件的完整路径时,我们从根目录出发,经过沿途各个目录,最终到达文件。我们可以对文件进行许多操作,比如打开和读写。在Linux文件管理相关命令中,我们看到许多对文件进行操作的命令。它们大都基于对文件的

2015-10-05 18:50:27 2273

转载 Linux的uio机制架构详解(三)

一个设备驱动的主要任务有两个: 1. 存取设备的内存 2. 处理设备产生的中断对于第一个任务,UIO 核心实现了mmap()可以处理物理内存(physical memory),逻辑内存(logical memory), 虚拟内存(virtual memory)。UIO驱动的编写是就不需要再考虑这些繁琐的细节。第二个任务,对于设备中断的应答必须在内核空间进行。所以在内核空

2015-10-05 15:50:03 4897

转载 Linux的uio驱动机制的由来和优缺点(一)

【摘要】linux用户态的设备驱动开发:并不是所有的设备驱动程序都要在内核编写,有些情况下,在用户空间编写驱动程序能够更好地解决遇到的问题。本文对用户态驱动优缺点进行分析。1、用户空间驱动程序的优点1、可以和整个C库链接。2、在驱动中可以使用浮点数,在某些特殊的硬件中,可能需要使用浮点数,而linux内核并不提供浮点数的支持。如果能在用户态实现驱动,就可以轻松解决这一问题。

2015-10-05 15:46:46 2407

转载 Linux的UIO经典例子讲解(二)

AUTHOR: Joseph Yang (杨红刚) CONTENT: uio驱动编写 实例1NOTE: linux-3.0LAST MODIFIED:09-06-2011 ----------------------------------------------------------------------------------------------------------

2015-10-05 15:40:39 5022 1

原创 Linux中断上下文和进程上下文(二)

内核空间和用户空间是操作系统理论的基础之一,即内核功能模块运行在内核空间,而应用程序运行在用户空间。现代的CPU都具有不同的操作模式,代表不同的级别,不同的级别具有不同的功能,在较低的级别中将禁止某些操作。Linux系统设计时利用了这种硬件特性,使用了两个级别,最高级别和最低级别,内核运行在最高级别(内核态),这个级别可以进行所有操作,而应用程序运行在较低级别(用户态),在这个级别,处理器控制着对

2015-10-04 20:39:08 379

原创 Linux中断上下文和进程上下文(一)

进程上下文和中断上下文是操作系统中很重要的两个概念,这两个概念在操作系统课程中不断被提及,是最经常接触、看上去很懂但又说不清楚到底怎么回事。造成这种局面的原因,可能是原来接触到的操作系统课程的教学总停留在一种浅层次的理论层面上,没有深入去研究。 处理器总处于以下状态中的一种:     1、内核态,运行于进程上下文,内核代表进程运行于内核空间;     2、内核态,运行于中断上下文,

2015-10-04 20:31:39 497

原创 unix高级编程

C语言的标准内存分配函数:malloc,calloc,realloc,free等。 malloc与calloc的区别为1块与n块的区别: malloc调用形式为(类型*)malloc(size):在内存的动态存储区中分配一块长度为“size”字节的连续区域,返回该区域的首地址,初始值不确定。 calloc调用形式为(类型*)calloc(n,size):在内存的动态存储区中分配n块

2015-10-03 16:29:29 353

原创 TCP/IP详解笔记

1 MSS由来MSS位于TCP选项部分(长度可变部分)最大报文段长度选项MSS,MSS选项用于在TCP连接建立时,收发双发协商通信时每一个报文段所能承载的最大数据长度。从理论上讲,理想的MSS应该能尽可能多地承载用户数据,勇士在传输通路上又可能避免分片。但实际中确定这样一个最佳的MSS很困难。一种通路MTU发现技术可以帮助TCP来确定最佳的MSS值。

2015-10-02 11:10:25 424

原创 TCP/IP相关知识点

1. tcpdump输出svr 目的主机    BSDI源主机   ff ff ff ff ff ff 以太网广播地址  2  MTU MSS简单说拿TCP包做例子。报文传输1400字节的数据的话,那么mss就是1400,再加上20字节IP包头,20字节tcp包头,那么mtu就是1400+20+20.当然传输的时候其他的协议还要加些包头在

2015-10-01 12:41:37 410

原创 Unix网络

多播  单播  广播 三者区别 单播  单播简单来说就是只有一个目的地址的封包/帧。这是我们在 TCP/IP 网络中最常见的一种通信方式,当你用浏览器连接一个Web服务器的时候,建立的就是单播,当你用QQ和其他人聊天的时候,传输的也是单播。多播 多播也叫做组播,是介之于单播和广播之间的一种传输方式。多播的目的地址是一组主机,称之为“多播组(multicast group

2015-09-30 17:10:03 366

原创 Unix高级环境编程

用socket机制使用系统调用ret=read(sock,buf,1000);从对方TCP 接收数据,如果ret返回值为0,说明当前TCP的接收缓冲区为空,暂时没有到达的数据。  答:错误。这里read返回0说明对方的TCP关闭了连接。如果当前TCP的接收缓冲区为空,暂时没有到达的数据,unix会让执行read的进程进入“阻塞”状态等待数据,而不是返回0。U

2015-09-30 12:19:01 386

原创 笔试

系统中采用jiffies来计算时间,但由于jiffies溢出可能造成时间比较的错误,因而强烈建议在编码中使用 time_after等宏来比较时间先后关系,这些宏可以放心使用。在linux的标准库函数中,有一套称作高级I/O的函数,我们熟知的printf 、fopen 、fread 、fwrite都在此列,他们也被称作缓冲I/O。其特征是对应每一个打开的文件,都存在一个缓冲区,

2015-09-30 10:58:23 317

原创 输入固定组的字符串

#include "stdafx.h"#include #include #include void main(){char  *str[5]={NULL};char  *str1[5];char  *p,*q;int   num,len,i;char  *next,*pre,*ne;scanf("%d\n",&num);

2015-09-29 18:21:30 394

原创 面试相关

A 网龙科技笔试: 第一字节对齐:   系统默认的对齐规则,追求的至少两点:1、变量的最高效加工 2、达到目的1的最  少空间 按最长规则对齐:#include "stdafx.h"#include #include #include typedef struct T{     char c; //本身长度1字节    double  d;  //本

2015-09-29 10:33:23 416

原创 Linux swap分区

SWAP 交换分区到底是干什么用的呢?我们是否真的需要划一个 SWAP 分区呢?答案是:视情况而定!SWAP 分区在一些情况下可以提升 Linux 操作系统性能,但在某些情况下又会成为系统运行的瓶颈,下面我们就来详细介绍下 Linux 中的 SWAP 交换分区。存放内存溢出来的数据简单来说,SWAP 交换分区是用来存放内存溢出来的数据。我们可以将内存想像成一个盆子,运行程序时的数据都被

2015-09-29 09:32:31 369

原创 数组的最大大小(堆和栈)

1   自己定义的数组最大不能超过2M(因为栈的大小为2M)如果非要定义很大的数组   则要分配在堆上 采用malloc函数2  三个内存分配函数 vmalloc  kmalloc  mallocvmalloc  分配较大的内存 虚拟地址连续 物理无连续kmalloc   分配较小的内存 虚拟地址连续 物理连续malloc   分配的内存在堆上   物理不一定连续  虚

2015-09-28 21:05:02 4671

原创 Linux伙伴系统算法--防止内存碎片的产生

1.碎片概念伙伴系统也存在一些问题,在系统长时间运行后,物理内存会出现很多碎片,如图所示: 这是虽然可用内存页还有很多,但是最大的连续物理内存也只有一页,这对于用户程序不成问题,因为用户程序通过页表映射,应用程序看到的总是连续的虚拟内存。但是对于内核来说就不行了,因为内核有时候需要使用连续的物理内存。  2 linux 伙伴系统的提出    Linux内核中引入

2015-09-28 20:57:11 2308

原创 内存池的作用--减少内存碎片

1 内存池出现的必要性和原因C/C++下内存管理是让几乎每一个程序员头疼的问题,分配足够的内存、追踪内存的分配、在不需要的时候释放内存——这个任务相当复杂。而直接使用系统调用malloc/free、new/delete进行内存分配和释放,有以下弊端:调用malloc/new,系统需要根据“最先匹配”、“最优匹配”或其他算法在内存空闲块表中查找一块空闲内存,调用free/delete

2015-09-28 20:45:16 4400

原创 malloc/free内存碎片的产生原因

malloc和free大量使用后回造成内存碎片,那么这种碎片形成的机理是什么?如果机理是申请的内存空间大小(太小)所形成的,那么申请多大的区域能够最大限度的避免内存碎片呢(这里的避免不是绝对的避免,只是一种概率)?      内存碎片一般是由于空闲的连续空间比要申请的空间小,导致这些小内存块不能被利用.产生内存碎片的方法很简单,举个例:         假设有一块一共有100个单位的连

2015-09-28 20:39:47 4632

原创 linux的子进程调用exec( )系列函数

exec( )函数族 :   下面我们来看看一个进程如何来启动另一个程序的执行。在Linux中要使用exec函数族。系统调用execve()对当前进程进行替换,替换者为一个指定的程序,其参数包括文件名(filename)、参数列表(argv)以及环境变量(envp)。exec函数族当然不止一个,但它们大致相同,在Linux中,它们分别是:execl,execlp,execle,execv,ex

2015-07-21 20:06:34 3325

转载 同一进程下线程共享的数据和独有的数据

线程不拥有系统资源,只有运行必须的一些数据结构;它与父进程的其它线程共享该进程所拥有的全部资源。线程可以创建和撤销线程,从而实现程序的并发执行。一般,线程具有就绪、运行和阻塞三种基本状态。          线程共享的环境包括:进程代码段、进程的公有数据(利用这些共享的数据,线程很容易的实现相互之间的通讯)、进程打开的文件描述符、信号的处理器、进程的当前目录和进程用户ID与进程组ID。

2015-07-21 19:38:44 2684

原创 linux的fork()函数详解 子进程复制父进程什么

#include  #include  #include  #include    void main()  {      char str[6]="hello";        pid_t pid=fork();        if(pid==0)      {          str[0]='b';          printf("子

2015-07-21 14:46:19 2232

转载 一步一步学习多线程编程之线程同步通信

每个正在系统上运行的程序都是一个进程。每个进程包含一到多个线程。进程也可能是整个程序或者是部分程序的动态执行。线程是一组指令的集合,或程序的特殊段,它可以在程序里独立执行。也可以把它理解为代码运行的上下文。所以线程基本上是轻量级的进程,它负责在单个程序里执行多任务。通常有操作系统负责多个线程的调度和执行。在windows系统中线程间的通信一般采用四种方式:全局变量方式、消息传递方式、参数传

2015-07-20 21:56:51 465

原创 win7下cmake编译opencv2.3.1生成opencv—createsamples.exe和opencv_haartrainingd.exe

第一步:下载安装cmake,之后进行默认安装就行,这步略过。第二步:配置cmake ,使cmake找到opencv进行编译安装第三步:之后找到安装后的文件夹,cmake通过cmakelist生成了很多工程,例如opencv_createsamples.vcproj,opencv_haartraining.vcproj。找到这两个工程打开后,直接进行编译,之后在ope

2015-07-12 16:33:14 2220 2

转载 opencv人脸检测(haar特征+AdaBoos分类器)(二)

OpenCV实现人脸检测本文介绍最基本的用OpenCV实现人脸检测的方法。 一.人脸检测算法原理Viola-Jones人脸检测方法参考文献:Paul Viola, Michael J. Jones. Robust Real-Time Face Detection[J]. International Journal of Computer Vision,2004,57

2015-07-08 09:08:44 1915 1

原创 opencv之haar特征+AdaBoos分类器算法流程(三)

2015-07-07 09:48:37 1401

原创 opencv之haar特征+AdaBoos分类器算法流程(二)

2015-07-05 10:36:58 1044

原创 opencv人脸检测(haar特征+AdaBoos分类器)(一)

(ok)人脸检测或者用下列程序,opencv自带的程序D:\opencv\data\haarcascades下的 全拷到和C++程序同目录下子再运行#include"stdafx.h"#include "opencv2/core/core.hpp"#include "opencv2/objdetect/objdetect.hpp"#include "opencv

2015-07-04 16:21:12 699

转载 opencv之haar特征+AdaBoos分类器算法流程(一)

首先,需要说明的是,OpenCV自带的haar training提取的特征是haar特征(具体请参考我的另一篇关于haar特征的文章:http://blog.csdn.net/carson2005/article/details/8094699 ),分类器是AdaBoost级联分类器(如需了解Adaboost算法,请参考我的另一篇文章:http://blog.csdn.net/carson2005

2015-07-04 10:31:21 1068

原创 opencv之纹理特征(熵值)的提取

2015-07-04 07:38:52 7079 1

原创 opencv之 cvCvtColor的用法

cvCvtColor(...),是Opencv里的颜色空间转换函数,可以实现rgb颜色向HSV,HSI等颜色空间的转换,也可以转换为灰度图像。  参数CV_BGR2GRAY是RGB到gray,  参数 CV_GRAY2BGR是gray到RGB.   处理结果是彩色的,则转灰色就是了:  void cvCvtColor( const CvArr*

2015-07-02 17:55:03 7692

转载 opencv IplImage结构体详解,很基础

IplImage是OpenCV中CxCore部分基础的数据结构,用来表示图像,其中Ipl是Intel Image Processing Library的简写。typedef struct _IplImage      {          int  nSize;         /* IplImage大小 */          int  ID;

2015-07-02 15:10:45 3423

原创 opencv 感兴趣区域建立ROI

在对某IplImage图像用cvSetImageROI函数设置了ROI后,对图像的处理都将仅限于ROI区域,相当于该图像变为了ROI中的图像,测试代码值仅用cvCopy(复制图像的函数),进行了测试,实际上对于任何处理图像IplImage类型的函数,处理设置了ROI区域的图像类对象,都是处理它的ROI区域。#include "stdafx.h"#include#include

2015-07-02 11:50:56 1377

原创 opencv各种画图 直线 矩形 圆 椭圆

绘图函数(1)直线cvLine函数其结构void cvLine(//画直线 CvArr* array,//画布图像 CvPoint pt1,//起始点 CvPoint pt2,//终点 CvScalar color,//颜色 int thickness = 1,//宽度 int connectivity = 8//反走样);实例代码#inclu

2015-07-02 11:38:20 11247

空空如也

空空如也

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

TA关注的人

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