2012年2月6日
摘要: 1、图像的二值化的基本原理图像的二值化处理就是讲图像上的点的灰度置为0或255,也就是讲整个图像呈现出明显的黑白效果。即将256个亮度等级的灰度图像通过适当的阀值选取而获得仍然可以反映图像整体和局部特征的二值化图像。在数字图像处理中,二值图像占有非常重要的地位,特别是在实用的图像处理中,以二值图像处理实现而构成的系统是很多的,要进行二值图像的处理与分析,首先要把灰度图像二值化,得到二值化图像,这样子有利于再对图像做进一步处理时,图像的集合性质只与像素值为0或255的点的位置有关,不再涉及像素的多级值,使处理变得简单,而且数据的处理和压缩量小。为了得到理想的二值图像,一般采用封闭、连通的边界定义 阅读全文
posted @ 2012-02-06 21:25 Gavin Dai 阅读(9116) 评论(1) 推荐(1) 编辑
  2012年1月12日
摘要: 项目中用到大量基础图像处理知识,其中灰度图的生成是很重要的一环。 先补充一些基础知识:----------------------------------------------------------------------------------------------------------------------------一:灰度图 灰度图就是黑白图,整幅图片只有不同程度的黑白两色。灰度也可认为是亮度,简单的说就是色彩的深浅程度! 1:如果我们用八位来存储灰度图。则共有256种组合。那相当于:我们把从:纯黑到纯白之间区分成了256种灰度。从而对应256种灰度值! 而如果用一个数... 阅读全文
posted @ 2012-01-12 12:26 Gavin Dai 阅读(11746) 评论(0) 推荐(0) 编辑
  2012年1月3日
摘要: 作用:保证一个类仅有一个实例,并提供一个访问它的全局访问点。UML结构图:上面提到的单例模式的两个作用在C++中通过如下机制实现:1)仅有一个实例,提供一个例的静态成员变量,大家知道类的静态成员变量对于一个类的所有的对象而言是唯一的。但是这样还不能保证类只有一个实例,还应该把类的构造函数设为私有。这样就不能在类外实例化这个类了。2)提供一个访问它的全局访问点,也就是提供对应的访问这个静态成员变量的静态成员函数,对类的所有对像而言也是唯一的。在C++中可以直接使用类域进行访问而不必初始化一个类的对象。参考代码:/****************************************** 阅读全文
posted @ 2012-01-03 17:25 Gavin Dai 阅读(322) 评论(0) 推荐(0) 编辑
  2011年12月16日
摘要: public class Test{ public static void main(String args[]){ int[] a = {34, 53, 13, 90, 78,99}; print(a); selectSort(a); print(a); } public static void print(int[] a){ for(int i = 0; i < a.length; i++){ System.out.print(a[i] + " "); } System.out.println(); } public static void selectSort( 阅读全文
posted @ 2011-12-16 20:56 Gavin Dai 阅读(260) 评论(0) 推荐(0) 编辑
  2011年12月3日
摘要: C语言的运算符可分为以下几类:1.算术运算符:用于各类数值运算。包括加(+)、减(-)、乘(*)、除(/)、求余(或称模运算,%)、自增(++)、自减(--)共七种。2.关系运算符:用于比较运算。包括大于(>)、小于(<)、等于(==)、大于等于(>=)、小于等于(<=)和不等于(!=)六种。3.逻辑运算符:用于逻辑运算。包括与(&&)、或(||)、非(!)三种。4.位操作运算符:参与运算的量,按二进制位进行运算。包括位与(&)、位或(|)、位非(~)、位异或(^)、左移(<<)、右移(>>)六种。5.赋值运算符:分为简单 阅读全文
posted @ 2011-12-03 19:50 Gavin Dai 阅读(4297) 评论(0) 推荐(0) 编辑
摘要: 两种对冒泡排序的改进算法,对于n个元素的冒泡排序,普通的冒泡排序要经过n-1趟排序。第一种改进:加一个标志位,当某一趟冒泡排序没有元素交换时,则冒泡结束,元素已经有序,可以有效的减少冒泡次数。template <class T>void Sort<T>::bubbleSwap(DataList<T> &datalist, const int n, int &flag){ flag = 0; for (int i = datalist.m_nCurrentSize - 1; i >= n; i--) { if (datalist.m_pv 阅读全文
posted @ 2011-12-03 14:18 Gavin Dai 阅读(6249) 评论(0) 推荐(0) 编辑
  2011年12月2日
摘要: 直接插入排序的基本方法:每步将一个待排序的元素,按其排序码的大小,插入到前面已经排好序的一组元素的适当位置上去,直到元素全部插入为止。插入排序(insert sorting)思想:当插入第i个元素时,前面的v[0],v[1],v[2]......v[i-1],已经排好序了.这时用v[i]的插入码与v[i-1],v[i-2],......排序码进行比较,找到插入的位置即插入v[i],原来位置上的元素从后向前依次后移。时间复杂度: 平均比较次数O(n2),平均移动次数O(n2).直接插入排序是一种稳定的排序。元素大部分有序时效率会更高,这时比较次数和移动次数都会减少。参考代码: void Sort 阅读全文
posted @ 2011-12-02 13:44 Gavin Dai 阅读(7296) 评论(0) 推荐(0) 编辑
摘要: 先来个区别说明:赋值操作是在两个已经存在的对象间进行的,而初始化是要创建一个新的对象,并且其初值来源于另一个已存在的对象。编译器会区别这两种情 况,赋值的时候调用重载的赋值运算符,初始化的时候调用拷贝构造函数。如果类中没有拷贝构造函数,则编译器会提供一个默认的。这个默认的拷贝构造函数只是 简单地复制类中的每个成员。下面看例子。 c++中初始化和赋值操作差别是很大的。 对于基本数据类型差别不大: 比如: inta=12;//initialization,copy0X000Ctoa a=12;//assignment,copy0X000Ctoa 但是对用户自定义的数据类型比如String初始化和赋 阅读全文
posted @ 2011-12-02 10:56 Gavin Dai 阅读(493) 评论(0) 推荐(0) 编辑
  2011年11月27日
摘要: 这篇文章主要讲解如何在C++中使用cin/cout进行高级的格式化输出操作,包括数字的各种计数法(精度)输出,左或右对齐,大小写等等。通过本文,您可以完全脱离scanf/printf,仅使用cin/cout来完成一切需要的格式化输入输出功能(从非性能的角度而言)。更进一步而言,您还可以在<sstream>、<fstream>上使用这些格式化操作,从而代替sscanf/sprintf和fscanf/fprintf函数。为方便描述,下文仅以cin/cout为例进行介绍。一、综述cin/cout是STL库提供的一个iostream实例,拥有ios_base基类的全部函数和成员 阅读全文
posted @ 2011-11-27 15:19 Gavin Dai 阅读(565) 评论(0) 推荐(0) 编辑
  2011年11月26日
摘要: #include <iostream>using namespace std;struct CirLinkNode{int data;struct CirLinkNode *link;CirLinkNode(CirLinkNode *next = NULL):link(next) { }CirLinkNode(int d, CirLinkNode *next = NULL):data(d), link(next) { }};class CircList{public:CircList() { head = NULL; }void create();CirLinkNode* getH 阅读全文
posted @ 2011-11-26 17:37 Gavin Dai 阅读(256) 评论(0) 推荐(0) 编辑