自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

learn_sunzhuli的专栏

喜欢编程,期待交流和分享!GitHub:https://github.com/zlsunsuda

  • 博客(52)
  • 资源 (1)
  • 收藏
  • 关注

原创 结构体比较

对于自定义数据类型,如何进行高效的比较? 这是在面试过程中碰到的一个编程细节。本文提供2中思路对结构体进行比较,显然方法二要更加高效。值得注意的是,在调用方法二时,必须提前对结构体中可能存在的内存缝隙进行填充。感谢面试官们在面试中的指导,特别钦佩有涵养有风度的技术咖!

2016-01-26 10:54:34 4479 2

原创 区域生长算法

算法介绍 区域生长,指将前景种子点扩展为更大区域的过程。预备知识 编程工具:VS2010, CMAKE 编程语言:C++ 编程库:ITK 数据结构:栈,通过栈实现区域生长算法 数据:三维的病变视网膜图像 目的:分割视网膜图像中的病变区域,即色素上皮层脱离区域。实现过程

2015-08-26 23:08:14 3159

原创 图像边缘检测

本文提供两种思路,实现自然图像的边缘检测,并对两种方法的检测效果进行对比。方法一:调用OpenCV中提供的函数,如Sobel(), Canny()…方法二:基于图像检测算子的原理,自定义模板。再基于自定义模板对整个图像遍历,从而实现图像边缘检测。本文基于sobel算子实现边缘检测。

2015-08-26 22:59:49 1281

原创 STL Vector 学习

Vector支持随机访问容器的内容,但是插入和删除元素非常耗时间。对比数组来学习Vector,有以下内容比较有意思。(1) 内存管理(2) 多种初始化方式(3) 迭代器正向迭代器:begin(), end()逆向迭代器:rbegin(), rend()(4) 实用的功能(5) 与双端队列(Deque)比较相比Vector, Deque支持相同的操作。另外,Deque支持在序列开头增加和删除的功能。

2015-08-26 22:49:47 569

原创 类的继承和多态

一、对继承的理解(1)基类的构造函数和析构函数都不能被子类继承。(2)子类中成员包括:基类成员,子对象,新增成员(3)在子类的构造函数中,基类的构造函数会出现在参数初始化表中,对基类成员初始化。(4)基类的清理工作仍然有基类的析构函数来执行。二、对多态的理解(1) 区分三种情况基类指针指向基类对象,基类指针指向派生类对象,派生类指针指向派生类对象(2) 掌握虚函数和非虚函数

2015-08-26 22:43:12 473

原创 Mysql中函数和存储过程

本文中自定义函数和存储过程基于Mysql + Navicat实现,这与SQL SERVER 中实现有一些区别。在Mysql + Navicat 中自定义存储过程,不需要写存储过程头部,直接写主体即可。并在相应地方设置参数,注意存储过程没有返回类值。 最后保存该存储过程时,给该存储过程命名,即为过程名。 自定义函数与自定义存储过程相似,但是,函数有返回值。

2015-08-26 22:37:56 507

原创 Python & OpenCV混合编程

本文主要对OpenCV代码和Python代码进行对比。(1) 从代码本身而言,相似度非常高。将.cpp中代码复制到.py中,稍微修改就能使用;(2) 从运行效率而言,C++运行速度快。对于小Demo而言,没有明显差别;(3) 从处理效果而言,看不出明显的差别。

2015-08-19 23:40:43 1053

原创 OPENCV2 图像修复 — 去除文字(下)

图像修复,指对受到损坏的图像进行修复重建或者去除图像中的多余物体。去除文字,是图像修复的一种应用。方法二:先用阈值法提取图像中文字,然后用OPENCV中inpaint()函数调用inpaint()函数一个关键的点:确定修复掩膜。修复掩膜只能为8位单通道的图像,其中非零像素表示需要修补的区域。所以,用阈值法提取的文字图像作为修复掩膜。

2015-08-19 23:32:42 8490

原创 OPENCV2 图像修复 — 去除文字(上)

图像修复,指对受到损坏的图像进行修复重建或者去除图像中的多余物体。 去除文字,是图像修复的一种应用。提出一个问题: 给定一张自然图像,该图像上已经写了一些文字(模拟图像遭到了破坏),则如何去掉文字,使得图像恢复原来的面目?针对上述问题,本文提供两种思路: 方法一:先用阈值法提取图像中文字,然后用图像减法。即: 修复图 = 原图像 – 提取的文字图

2015-08-19 23:24:09 10768 2

原创 OPENCV2 获取彩色图中单一颜色分量

在图像分割问题中,图像的灰度值做为一个重要的特征,有助于提取感兴趣的区域。提出一个问题: 给定一张自然图像,如何在复杂的背景中提取文字,并将文字与图分离?提取颜色分量有多种方法,本文提供两种思路: (1) 遍历整个图像,通过阈值法提取某个颜色分量 (2) 调用OPENCV中提供的split()函数,实现颜色通道分离。

2015-08-19 23:07:10 5457

原创 OPENCV2 访问图像像素值的三种方法

访问图像像素值是图像处理的基本操作。OPENCV2提供了很多中访问方式,本文实现了其中比较常用的三种方式: (1) 通过指针访问 (2) 通过迭代器访问 (3) 动态地址计算,通过at()函数实现。

2015-08-19 22:59:13 7212

原创 哈希表查找 — 拉链法

散列表(也叫哈希表),是根据关键字值而直接进行访问的数据结构。本文采用除留余数法构造散列函数。 本文采用拉链法处理冲突。 根据原始数组建立一个哈希表,哈希表为一个链表(一定要区分数组和链表),且要求哈希表有固定大小。该方法将所有冲突的记录存储在一个链表中,并将这些链表的表头指针放在数组中。衡量一个查找算法的指标是平均查找长度,在有冲突发生的情况下,用拉链法处理冲突比用开放地址法处理冲突,其平均查找长度要小。

2015-07-26 17:33:06 7361 3

原创 哈希表查找 — 开放定址法

散列表(也叫哈希表),是根据关键字值而直接进行访问的数据结构。通过把关键字值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。散列函数的构造方法: (1)直接定址法 (2)除留余数法 (3)平方取中法 (4)折叠法 (5)数值分析法本文采用除留余数法构造散列函数。 H(K) = (H(k) + i) % m; 其中i = 1, 2, …

2015-07-26 17:07:04 4685

原创 顺序表的查找

基本查找思想: 在一个已知无(或有序)序队列中找出与给定关键字相同的数的具体位置。原理是让关键字与队列中的数从最后一个开始逐个比较,直到找出与给定关键字相同的数,则查找结束。顺序表的查找可以分为两类: (1)简单顺序查找 对数据表的特性没有要求,但效率很低。 (2)二分查找(或者折半查找) 可以通过递归或者非递归方法去实现。 要求查找表已经按关键字递增(或递减)排序。

2015-07-26 16:36:14 652

原创 归并排序和堆排序

归并排序的算法我们通常用递归实现,先把待排序区间[s,t]以中点二分,接着把左边子区间排序,再把右边子区间排序,最后把左区间和右区间用一次归并操作合并成有序的区间[s,t]。桶排序法,非常耗空间。规定数组中元素的最大值不超过数组的长度,否则要先求出数组元素的最大值后,才能指定空桶的个数,要求待排序数组中没有重复的元素。 但是,桶排序并不是 比较排序,不受时间复杂度 O(n log n) 下限的影响。

2015-07-26 16:07:55 435

原创 选择排序

选择排序的基本操作: 在每一趟排序中,在待排序子表中选出关键字最小或者最大的元素放在其最终位置上。选择排序包括: (1)直接选择排序 (2)堆排序关于交换排序

2015-07-26 15:55:08 353

原创 排序和查找算法总结

一、排序算法总结 (1)插入排序:直接插入排序,希尔排序 (2)交换排序:冒泡排序,快速排序 (3)选择排序:直接选择排序,堆排序 (4)归并排序: (5)桶排序:

2015-07-26 15:20:55 784

原创 交换排序

交换排序的基本思想: 两两比较待排序元素,发现倒序则交换。交换排序包括: (1)冒泡排序 (2)快速排序算法由C++实现的代码如下,已经在 vs2010上测试通过。

2015-07-26 15:08:24 459

原创 插入排序

插入排序的基本操作: 将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加1的有序数据, 算法适用于少量数据的排序。插入排序包括: (1)直接插入排序 (2)希尔排序

2015-07-26 15:00:42 360

原创 Dijkstra — 最短路径算法

Dijkstra算法,狄克斯特拉算法,在有向图中搜索最短路径。 算法实现的主要步骤: (1) 初始化 所有点都初始化为没有被访问,初始化根结点到各结点的距离,存放在lowcost[]数组中;(2)寻找最小值 从根结点开始,其依据:按照由近到远的次序求解 找到最小值后,更新lowcost[] (3)重复第(2)直到所有结点都选中,则算法结束。

2015-07-26 14:43:03 608

原创 Prim — 最小生成树

Prim算法,普里姆算法,在无向图中搜索最小生成树。算法实现的主要步骤: (1) 初始化 所有点都初始化为没有被访问,初始化根结点到各结点的距离,存放在lowcost[]数组中;(2)寻找最小值 从根结点开始,其依据:一端连接,另一端未连接,寻找最小值 找到最小值后,更新lowcost[],未选结点到已选结点(可能已经选中了多个结点)中的最小值(3)重复第(2)步,直到所有点都被选中。

2015-07-26 14:26:09 437

原创 VTK实现纹理贴图

(1)VTK主要用于三维计算机图形学、图像处理和可视化。Vtk是在面向对象原理的基础上设计和实现的,它的内核是用C++构建。VTK是基于OpenGL实现的,是一个比较上层的图形库; (2)OpenGL是跨平台的图形程序接口,它用于二维,三维图像的处理,调用方便的底层图形库。但是OpenGL读入二维图片作为纹理图比较繁琐,没有提供直接的接口; VTK实现纹理贴图,比OpenGL实现要方便,快速。

2015-06-25 23:07:58 4902 2

原创 openCV读入图片,openGL实现纹理贴图

本文结合结合openCV,openGL的优点,实现混合编程。 (1)OpenCV提供图形处理和计算机视觉方面的通用算法,读入二维图片很方便; (2)OpenGL是跨平台的图形程序接口,它用于二维,三维图像的处理,调用方便的底层图形库。但是OpenGL读入二维图片作为纹理图比较繁琐,没有提供直接的接口;

2015-06-25 22:44:15 5546 3

原创 实现链式栈

栈作为一种数据结构,它按照后进先出的原则存储数据,只能在栈顶进行插入和删除操作的特殊线性表。按照存储方式不同,栈可以分为顺序栈和链式栈。实现链式需要注意: (1)采用链表存储结构; (2)不需要预定义内存空间,不存在“链式栈满”这种情况; (3)解决了顺序栈中没有合理分配内存大小的难题。

2015-06-25 22:01:40 466

原创 实现顺序栈

栈作为一种数据结构,它按照后进先出的原则存储数据,只能在栈顶进行插入和删除操作的特殊线性表。按照存储方式不同,栈可以分为顺序栈和链式栈。实现顺序栈需要注意: (1)采用顺序存储方式; (2)需要预分配空间,data[maxlen]; (3)合理分配内存空间是个比较麻烦的事情。如果每个栈分配空间多,则会造成存储空间浪费;如果分配空间少,则会出现“溢出”。

2015-06-25 21:53:46 637

原创 实现链式队列

队列(queue)在计算机科学中,是一种先进先出的线性表。它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。队列可以采用顺序存储方式来实现(称为顺序队列),或者采用链式存储方式来实现(称为链式队列)。实现链式队列需要注意: (1)采用动态链表作为存储结构; (2)不需要预分配空间,比顺序队列更灵活; (3)没有链式队列满状态这种说法,因为没有定义最大内存空间;

2015-06-25 21:39:52 508

原创 实现顺序队列

队列(queue)在计算机科学中,是一种先进先出的线性表。它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。队列可以采用顺序存储方式来实现(称为顺序队列),或者采用链式存储方式来实现(称为链式队列)。实现顺序队列

2015-06-25 21:30:01 554

原创 QT多线程—主界面卡死解决方案

由于耗时的操作会独占系统cpu资源 ,让界面卡死在那里,这时需要考虑多线程方案,将耗时的操作放在主线程之外的线程中执行。 但是必须注意:主界面更新只能在主线程中,耗时操作可以放在新建的线程中。

2015-05-31 17:42:29 40482 15

原创 QT中进度对话框(QProgressDialog)

考虑程序的友好性,当程序在执行一项耗时操作时,界面应告诉用户“程序还在运行中”,那么,QT中进度对话框(QProgressDialog)可以满足要求。

2015-05-31 17:26:26 14679 4

原创 PHP & HTML学习

出于对网站搭建的兴趣,最近一直在学习PHP & HTML知识,现已成功搭建出实验室网站和3个会议网站。本文将学习过程中知识点整理如下:CSS, JS, MVC

2015-05-29 22:38:42 447

原创 Photoshop 与网站设计

网站美工图设计出来后,基于此设计图进行网站设计。PHOTOSHOP派上大用场了。本文介绍添加文字,获取图片颜色,合并图片,切图,抠图,合并图层。

2015-05-29 22:24:04 359

原创 安装PHP网站

学习PHP网站设计,从网络上下载开源的PHP网站demo作为学习资料,能够宏观了解整个网站的设计,加快学习的进度。下载到网站源码后,如何安装php网站,使其顺利运行起来,对于一个初学者是一个很大的问题。本文将个人学习过程整理如下:

2015-05-29 22:19:48 712

原创 QVTKWidget控件显示三维图片

QVTKWidget控件一般显示二维图片,如果要显示三维图片,并通过鼠标滚轮切换单张图片,则需要加入监听机制,可以自定义一个类来实现所需要的交互方式,该类可以继承于vtkCommand类。

2015-05-18 23:02:07 8435 5

原创 QVTKWidget控件显示二维图片

QVTKWidget控件不是QT中默认控件,需要手动编译。用CMAKE编译VTK过程中,需要选择VTK支持QT。网络上有很多教程,不再重复了。但有一点要提醒大家:只需要将Release版本中QVTKWidgetPlugin.dll 和 QVTKWidgetPlugin.lib放在designer文件夹下就可以了。

2015-05-18 22:35:33 5232 3

原创 ITK读DICOM数据

ITK提供强大的图像处理功能,VTK则提供强大的图像可视化功能。 比较VTK而言,ITK能够获取更全面的DICOM头文件中所包含的医学信息和病人信息。ITK能够读单张图片或序列图片。

2015-05-18 22:09:08 8009 2

原创 VTK读DICOM头文件中医学信息

VTK提供了2中读取DICOM数据的方式:vtkDICOMImageReader和vtkVolume16Reader。

2015-05-18 21:44:11 4717

原创 QT访问Mysql数据库

QT4默认不支持Mysql数据库访问,需要手动编译动态链接库qsqlmysqld.dll和qsqlmysql.dll。QT5默认支持Mysql数据库访问,默认已经生成了上述2个DLL文件。

2015-05-18 21:19:08 1091

原创 软件框架设计

一个数字图像处理软件,用QT做UI, 基于OpenCV, ITK, VTK常用的库现实图像的操作,显示等功能。OpenCV提供了很多接口可以对2D图像处理,ITK, VTK则更多倾向于3D医学图像的处理和显示。

2015-04-30 23:01:12 950

原创 直方图

基于OpenCV库绘制灰度图,彩色图的直方图。 灰度图为单通道图,每个像素只有一个采样颜色。cvConvertImage()函数可以将其他图转换为单通道图像。

2015-04-30 22:34:22 446

原创 对比OpenCV, QT, ITK库对图像像素级的操作

本文以常见的二维BMP图像为例,对比OpenCV, QT, ITK库对图像像素级的操作。

2015-04-20 21:25:48 2455

QT多线程—主界面卡死解决方案

由于耗时的操作会独占系统cpu资源 ,让界面卡死在那里,这时需要考虑多线程方案,将耗时的操作放在主线程之外的线程中执行。该demo通过多线程为主界面卡死提供一种解决方案。

2015-05-31

空空如也

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

TA关注的人

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