自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

CShilin's Personal Blogs

EN_Name:Shalen Email:724118494@qq.com

  • 博客(41)
  • 资源 (6)
  • 收藏
  • 关注

原创 opencv imgproc模块(三)

在opencv中,使用findContours()函数从二值图像中查找轮廓 配合使用drawContours()进行轮廓的绘画- 寻找物体的凸包

2016-07-28 22:16:56 4336

原创 OpenCV imgproc模块(二)

变换: 我们这节要提一下opencv重映射的概念。 重映射,就是把一幅图像中某位置的像素放置到另一个图片指定位置的过程。为了完成映射过程,需要获得一些插值为非整数像素的坐标,因为原图像与目标图像的像素坐标不是一一对应的。我们通过重映射来表达每个像素的位置(x,y)。 g(x,y) = f(h(x,y))。 重映射比如可以进行图像翻转,如h(x,y) = (I.cols-x,y)就是相对于x方

2016-07-28 17:02:54 2851

转载 线性插值和双线性插值

线性插值如果你只处理分离的数据、想知道分离点之间的某些值,需要用到某种类型的插值。这种情况如图5-17坐标所示。对某些分离的(整数) X值,你知道Y值。当X=2,你知道Y=10,X=3时Y=30。但你不知道X=2.7时的Y值。

2016-07-28 11:18:33 6449

原创 OpenCV imgproc模块

imgproc模块是图像处理模块,这个模块包含如下内容:线性和非线性的图像滤波图像的几何变换其他图像转换直方图相关结构分析和形状描述运动分析和对象跟踪特征检测目标检测高级形态学变换: 腐蚀和膨胀是两种最基本的形态学操作。运用这两个基本操作,可以实现更高级的形态学变换。我们主要讲解OpenCV中的morphologyEx函数,它利用基本的膨胀和腐蚀技术,来执行更加高级的形态学变换。

2016-07-27 21:40:49 3915

原创 OpenCV Core模块

OpenCV core模块提供了基本数据结构,Mat,Point,Rect,Size,Scalar等常用的数据结构类型都是在这个模块中定义。 Scalar()表示具有4个元素的数组,在OpenCV中被大量用于传递像素值,如RGB颜色值。而RGB颜色值为三个参数,其实对于Scale函数来说,如果用不到第四个参数,则不需要写出来,若只写三个参数,OpenCV会认为我们就想表示三个参数。 Scalar

2016-07-27 11:02:51 2285

原创 CMake编译opencv和argc、argv含义

使用CMake生成OpenCV源代码工程的解决方案 如果你需要在下载的OpenCV中尽心编译,为了学习源码或者调试,或者加入开源组织,需要将opencv进行编译生成VS解决方案。 CMake的作用远不止这一个,但是,作为一个程序开发者,而不是一个程序提供者常见的用处可能就是编译成特定操作系统的代码。我们使用windows版本的CMake。 使用很简单: 设置一个源码的位置,我们把它指定到

2016-07-26 20:15:46 3693

转载 应用层协议

DNS协议域名(domain name)是IP地址的代号。域名通常是由字符构成的。对于人类来说,字符构成的域名,比如www.yahoo.com,要比纯粹数字构成的IP地址(106.10.170.118)容易记忆。域名解析系统(DNS, domain name system)就负责将域名翻译为对应的IP地址。在DNS的帮助下,我们可以在浏览器的地址栏输入域名,而不是IP地址。这大大减

2016-07-24 21:13:10 5898

转载 TCP详解

作者:Vamei 出处:http://www.cnblogs.com/vamei 直接融合TCP的4篇博客TCP(Transportation Control Protocol)协议与IP协议是一同产生的。事实上,两者最初是一个协议,后来才被分拆成网络层的IP和传输层的TCP。我们已经在UDP协议中介绍过,UDP协议是IP协议在传输层的“傀儡”,用来实现数据包形式的通信。而TCP协议则

2016-07-21 10:08:46 2363

转载 IPV4的弥补-CIDR与NAT

作者:Vamei 出处:http://www.cnblogs.com/vamei IPv4由于最初的设计原因,长度只有32位,所以只提供了大约40亿个地址。这造成了IPv4地址的耗尽危机。随后,IPv6被设计出来,并可以提供足够多的IP地址。但是IPv4与IPv6并不兼容,IPv4向IPv6的迁移并不容易。一些技术,比如说这里要说的CIDR和NAT,相继推广。这些技术可以缓解IPv4的

2016-07-20 22:00:11 1726

转载 网络层协议-ICMP协议

作者:Vamei 出处:http://www.cnblogs.com/vameiIP协议的一个重要补充是是ICMP协议。根据不同的类型不同。另一方面,ICMP包通常是由某个IP包触发的。这个触发IP包的头部和一部份数据会被包含在ICMP包的数据部分。ICMP协议是实现ping命令和traceroute命令的基础。这两个工具常用于网络排错。 常见的ICMP

2016-07-20 20:58:35 2373

转载 IP, ARP, RIP和BGP协议

作者:Vamei 出处:http://www.cnblogs.com/vamei 网络层(network layer)是实现互联网的最重要的一层。正是在网络层面上,各个局域网根据IP协议相互连接,最终构成覆盖全球的Internet。更高层的协议,无论是TCP还是UDP,必须通过网络层的IP数据包(datagram)来传递信息。操作系统也会提供该层的socket,从而允许用户直接操作IP

2016-07-20 16:40:10 2353

转载 (二)以太网与WiFi协议

“小喇叭开始广播啦”,如果你知道这个,你一定是老一辈的人。“小喇叭”是五十年代到八十年代的儿童广播节目。在节目一开始,都会有一段这样的播音:“小朋友,小喇叭开始广播了!” 听到这里,收音机前的小朋友就兴奋起来,准备好听节目了:这一期的内容是以太网(Ethernet)协议与WiFi。 我们在邮差与邮局中说到,以太网和WiFi是连接层的两种协议。在连接层,信息以帧(frame)为单位传

2016-07-20 15:41:44 2466

转载 (一)网络协议概观

作者:Vamei 出处:http://www.cnblogs.com/vamei 信号的传输总要符合一定的协议(protocol)。比如说长城上放狼烟,是因为人们已经预先设定好狼烟这个物理信号代表了“敌人入侵”这一抽象信号。这样一个“狼烟=敌人入侵”就是一个简单的协议。协议可以更复杂,比如摩尔斯码(Morse Code),使用短信号和长信号的组合,来代表不同的英文字母。比如SOS(

2016-07-20 15:14:43 2066

原创 基本opencv2处理方法(三)-基本滤波器

滤波是图像处理中的一个基本操作。滤波去除图像中的噪声,提取感兴趣的特征,允许图像重采样。图像中的频率和空域:空间域指用图像的灰度值来描述衣服图像,而频域指用图像灰度值的变化来描述一幅图像。 低通滤波器和高通滤波器的概念是在频率中产生的。低通滤波器指去除图像中的高频成分,而高通滤波器指去除图像中的低频成分。低通滤波器 Mat image = imread("1.jpg",1);

2016-07-19 20:49:09 3624

原创 基本opencv2处理方法(二)

使用filter2D进行邻域计算:void shape2D(const Mat& image,Mat& result){ Mat kernel(3,3,CV_32FC1,Scalar(0));//3*3 1通道向量 kernel.at<float>(1,1) = 5.0; kernel.at<float>(0,1) = -1.0; kernel.at<float>(

2016-07-19 19:36:47 3314

原创 基本opencv2处理方法

opencv1.0版本于2006年面世,主要基于C语言。2009年发布opencv2,主要基于C++。我主要学习了2.0版本。其实两者之间的函数调用还是有些相同的,只不过有的时候使用的是全局函数cv***,而2.0使用的是不带cv的函数。 此时opencv库被划分为多个模块,这些模块被编译成库文件后,位于lib文件夹中,这是我截取的全部模块,我们需要的就是引用这些模块。 Opencv_core模

2016-07-18 21:08:01 2490

原创 Part6:使用STL编程总结

Rule45:注意count,find,binary_search,lower_bound,upper_bound,equal_range的区别count,find用于一个无序的容器集合内。 count返回是否存在这个值,如果有,那么有多少个? find则用于考虑“是否存在这个值,如果有,那么第一个在哪儿?”找到后立即会返回。 所有,两个的方法的用处不一样,find的效率会高于count,因

2016-07-18 13:18:32 2273

原创 part5:仿函数,仿函数类(一)

Rule38:把仿函数类设计为用于值传递Rule39:用纯函数做判断式 一个行为良好的operator()当然是const,但不只如此。它也得是一个纯函数。不要修改内部成员对象的值,否则会出现未定义的情况。要记住纯函数没有状态,良好的operator也没有。判断式和判断式对象的operator()都是没有状态的。

2016-07-17 20:33:52 5234

原创 Part4:算法(三)

rule37:用accumulate或for_each来做区间统计 count函数能够告诉你区间有多少个等于某个值的元素,而count_if告诉你有多少个元素满足一个判断式。区间的最大值和最小值可以通过min_element和max_element获得。 有时,你需要自己定义对区间的统计信息,比如求和一个区间的元素和,对一个容器中的字符串长度求和。accumulate函数存在于numeric中

2016-07-17 19:33:54 5080

原创 Part4:算法(二)

Rule33:提防在指针的容器上使用类似remove的算法我们可以分析出remove的算法流程,他像这样: 其中B和C对象是不合格的对象,需要从中删除,如果我们使用remove方法,得到的结果是这样: 因为他会将位置2,和3的指针值替换为4,5位置的值,形成一个有效区域(1-3)。这就是最后的有效区间。这个时候,对象B,C已经不能正常回收了。造成了资源泄漏。 然后经过erase方

2016-07-17 14:46:15 6143

原创 Part4:算法(一)

Rule30:如何使用插入迭代器 原标题是“确保目标区间足够大”,我觉得这一部分主要讲了插入元素到容器中遇到的问题。所有,更换一个更能理解的名称。 首先这个需求:int trans(int value){ return value*2;}int _tmain(int argc, _TCHAR* argv[]){ int a[5] = {1,2,3,4,5}; l

2016-07-17 09:16:28 2842

原创 Part3:关联容器(二)&Part4:迭代器

Rule4:当关乎效率时应该在map::operator[]和map-insert之间仔细选择map[key] = value;这是一种简要的写法,这个操作是,如果key值不存在,插入这样一个键值对,如果key值存在,则修改这个键的值。结论是: 当给map添加一个元素时,我们断定insert比operator[]好;而当更新已经在map里的元素值时operator[]更好。Rule25:熟悉非

2016-07-16 16:13:22 4131

原创 Part3:关联容器(一)

Rule20:为指针的关联容器指定比较类型 有如下情况,有一个string*指针的set,你把一些动物的名字插入set:set<string*> ssp;ssp.insert(new string("Anteater"));ssp.insert(new string("Wombat"));ssp.insert(new string("Lemur"));ssp.insert(new stri

2016-07-16 12:51:31 6099

原创 Part2:vector和string(一)

Rule13:尽量使用vector和string来代替动态分配的数组

2016-07-15 11:01:41 1491

原创 Effective STL(4)-线程安全

Rule12:对STL容器线程安全性的期待 STL标准中没有提到任何关于线程的东西,你对STL的线程安全有的第一个想法应该是它因实现而不同。 STL厂商只能为你做一些可以减少你多线程的痛苦的事情,你需要知道他们做了什么: 多个读取者是安全的。多线程可能同时读取一个容器的内容,这将是正确执行的。当然,在读取时不能有任何写入者操作这个容器。对不同容器的多个写入者是安全的。多线程可以同时写不同的容

2016-07-15 10:14:03 2230

原创 Effective STL(3)-删除特定元素

Rule9:在删除选项中仔细选择 本部分主要是讲不同的容器对删除特定元素的方法。 比如要删除容器Container< int > c中所有值为2016的对象,完成这项任务的方法因不同的容器类型而不同:没有一种方法是通用的。如果你有一个连续内存容器(vector,deque,string)最好的方法是erase-remove方法 c.erase(remove(c.begin(),c.end()

2016-07-14 14:59:58 1261

原创 Effective STL(2)

Rule7:当使用new得指针的容器时,记得销毁容器前delete那些指针C++ 中STL的容器的析构函数不用自己调用,系统会进行析构,但是vector内元素的清空需要手动进行。 1. 非指针的数据类型,比如int,string,char,还包括自定义的数据结构、自定义的类等等,只需要手动调用vector的clear函数就行,空间的释放和系统系统就会自动进行。 2. 指针类型的数据,这种情况

2016-07-12 16:29:36 1366

原创 STL基础(三)

Iterator 迭代器 能够让迭代器与算法不干扰的相互发展,最后又能无间隙的粘合起来。 重载了*,++,==,!=,=运算符,用以操作复杂的数据结构。 容器提供迭代器,算法使用迭代器。迭代器的分类: 不同容器提供自己的迭代器,所以不同迭代器具有不同的能力。 这幅图与之前博客所说的一致。Iterator Adaptor (迭代器适配器) 提供和Iterator相同的接口,但是改变

2016-07-10 00:18:31 940

原创 STL基础(二)

容器: 用来管理一组元素。 序列式容器: vector 将元素置于一个动态数组中加以管理。 可以随机存取元素,用索引直接存取。 数组尾部添加或移除元素非常快,但是在中部或头部安插元素比较费时。 // this is the part of vector int a[5] = {1,2,3,4,5}; vector<int> coll(a,a+5); for (i

2016-07-09 20:26:17 1177

原创 STL基础

在开始Effective STL系列之前,有必要对STL基础进行一个全面的基础学习。 学习链接地址如下: http://wenku.baidu.com/link?url=i6SBAotuThXbBw3Nx7pSyg84zPdVQC6m0chFzuC3DZzhlGgJcxiblzpGijIO9_u4GRbkqm9_1pDnUero8tDNJKJTl_45ZBKg6OFz89gkc67

2016-07-09 11:27:23 1146

原创 Effective STL开端

This is the first blog part about STL.

2016-07-07 23:33:45 2468

原创 软件著作权和商业秘密权

王某原是X公司的项目经理,在X公司任职期间主持开发了某软件,但未与X公司签定劳动合同及相应的保密协议。X公司对该软件进行了软件著作权登记并获准。王某随后离职并将其在X公司任职期间掌握的该软件技术信息、客户需求及部分源程序等秘密信息提供给另一软件公司。王某的行为 (68) 。 68. A.既侵犯了科技公司的商业秘密权,又侵犯了科技公司的软件著作权 B.既未侵犯科技公司的商业秘密权,又未侵犯科技

2016-07-07 16:05:54 1807

原创 读书-方与圆

如果你喜欢享乐,见到一个漂亮的女孩,你会冲动甚至激动,然后展开追求,追求到手后,也许你还会激动,但如果没有成熟的爱情做基础,时间久了,你会觉得也就这么回事。实际上任何纯本能的享受都是这样,时间久了就会热情消退;而惟有追求卓越,发展自己,才是一种无止境的快慰。达到了一种境界会有一种更高的境界等待着你去攀登;创造、成功,不断地追求卓越,会使你永远感受到青春、活力和一种无止境的力量。这才是人世间最高级、最

2016-07-07 16:03:17 341

原创 C# string转byte[]

最近做项目时要用到接收到的数据流,自己组合拼接成jpg文件。随便提一下jpg标准格式是以FFD8开头FFD9结尾。需要将数据包进行拼接,转化为文件就需要用到流,可以使用FileStream或MemoryStream,但是参数必须是byte[]。因此存在string转byte[]的操作。string必须是16进制的字符串。 byte[] MyData = new byte[temp.Length /

2016-07-07 16:01:59 3572

原创 Part8:定制new和delete

当计算环境(例如java和.net)夸耀自己内置“垃圾回收能力”的当今,C++对内存管理的纯手工方法看起来老土。但是许多苛刻的系统程序开发人员之所以选择C++,就是因为它允许他们手工管理内存。 这样做的前提是,了解C++内存管理例程的行为。这部分的两个主角是分配例程和归还例程(allocation and deallocation routines,也就是operator new and oper

2016-07-07 11:08:02 2244

原创 Part7 模板与泛型编程 Templates and Generic Programming

Rule47:请使用traits classes表现类型信息 Use traits classes for information about types.STL 主要由“用以表现容器、迭代器和算法”的templates构成,也覆盖了若干工具性templates,其中一个名为advance,用来将某个迭代器移动某个给定距离。 观念上advance只是做iter+=d动作,但是不可以全然那么做,

2016-07-06 23:17:23 1925

原创 Part7 模板与泛型编程 Templates and Generic Programming(二)

Rule44: 将与参数无关的代码抽离templates Factor parameter-independent code out of templates 使用Templates可能会导致代码膨胀,其二进制码带着重复或几乎重复的代码,数据或两者。其结果有可能源码看起来合身而整齐,但目标码却不是那么回事。所以需要知道如何避免这样的二进制浮夸。编写templates时,同样是将重复部分抽出来,但

2016-07-06 14:16:40 1483

原创 Part7 模板与泛型编程 Templates and Generic Programming

Rule41: 了解隐式接口和编译期多态 understand implicit interfaces and compile-time polymorphism.面向对象编程总是以显式接口(explicit interfaces)和运行期多态(runtime polymorphism)解决问题。请记住: (1)classes和Template都支持接口和多态 (2)对class而言接口是

2016-07-04 17:40:37 1435

原创 Part6 继承与OOD Inheritance and Object-Oriented Design(三)

Rule40:明智使用多重继承 Use mutiple inheritance judiciously 最先遇到的一个问题是,当MI进入设计时,程序有可能从一个以上的base classes继承相同名称(如函数、typedef等等),那会导致较多的歧义机会。 上面代码中对checkOut的调用是歧义的,即使两个函数之中只有一个可取用(BorrowwableItem内的checkOut是pub

2016-07-04 10:10:25 1262

原创 Part6 继承与OOD Inheritance and Object-Oriented Design(二)

Rule37 :绝不重新定义继承而来的缺省参数值 Never redefine a function’s inherited default parameter value. 由于重新定义一个继承而来的Non-virtual函数永远是错误的,所以可以安全地将本条款的讨论局限于”继承一个带有缺省参数值的Virtual函数”。#include "stdafx.h"#include <iostre

2016-07-03 19:54:40 1231

oracle10g安装图解

oracle10g安装图解,绝对正宗,详细

2013-03-25

oracle用户创建 授权

Oracle数据库用户角色、表空间创建、删除命令

2013-03-25

Linux常用命令全集

最详尽的linux命令帮助文档,如果不是急缺分用,肯定免费下载。望支持

2012-11-27

关于java 为何 IntelliJ IDEA 比 Eclipse 更好?

为何 IntelliJ IDEA 比 Eclipse 更好

2012-06-27

空空如也

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

TA关注的人

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