自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

大坡3D软件开发

自主操作系统和CPU--用软件来改变世界

原创 在OpenCV里用kNN实现手写字母识别

前面学习了使用kNN来识别手写数字,在这里将来学习使用kNN识别手写字母。同前面一样,首先要构造训练数据,那么训练数据来自哪里呢?如果没有网络,还得自己一个一个地构造,幸好有网络帮忙,直接到下载一个即可。下载文件letter-recognition.data,接着用编辑器打开,一看到内容如下: ...

2019-10-31 16:37:08 218 0

原创 如何解决windows.h和WinSocket2.h的冲突

如何解决windows.h和WinSocket2.h的冲突 在一个大的VC++工程里,经常会遇到这样一个问题,比如想要使用一个库,而这个库里要使用<Windows.h>头文件,但是这样会引起后面代码里使用WinSocket2.h的冲突,导致整个工程编译不过。为了解决这个问题,可以把W...

2019-10-31 15:49:33 238 0

原创 error LNK2019: 无法解析的外部符号 __except_handler4_common

4>MSVCRTD.lib(chandler4gs.obj) : error LNK2019: 无法解析的外部符号 __except_handler4_common,该符号在函数 __except_handler4 中被引用 最近在编译一个开源的工程时,发现出这个提示,导致执行文件不能生成...

2019-10-31 15:22:55 1207 1

原创 在OpenCV里用kNN实现手写数字识别

本文里将要学习用kNN来构造一个OCR应用,实现手写数字的识别。为了实现这个需求,我们需要一些训练数据和测试数据,在OpenCV里有一个手写数字的图片digits.png,这个图片里包含有5000个手写字体的数字,每个数字有500个,每个数字图片大小为20X20个像素。如下图所示: 因此,首...

2019-10-30 09:31:29 520 0

原创 在OpenCV里使用kNN算法

在本文里主要学习kNN(k-Nearest Neighbour)算法。kNN是一个在监督学习里最简单的分类学习算法,其思想是在特征空间中寻找测试数据的最接近匹配。可以通过下图来说明: 在上面的图像里,主要有两大家族:蓝色方块和红色三角。把每一个家族相同的特征分开,叫做分类(Class)。他们...

2019-10-28 20:32:22 168 0

原创 在OpenCV里使用立体图像深度图

本文将来学习怎么样从立体图像来创建深度图,在前面学习过对极几何的基本知识,从那里就可以直觉地感觉到,由两幅画像就可以找到深度信息。再来看一下对极几何: 从上图可以看出,使用中学数学里相似三角形的公式,就可以推导出下面的公式: x是左边相机成像平面里最左边与成像点的距离,x′是在右边相机...

2019-10-28 13:27:02 302 0

原创 在OpenCV里使用对极几何

本文将要学习多视角几何的基础知识,极点、极线和对极约束等等。当我们使用一个针孔照相机来拍照照片时,会丢失很多重要的信息,比如物体的深度信息。或者说图像里每个点离相机多远,没有记录下来,因为这是一个从3D到2D的转换过程。那么我们怎么样才可以通过相机来保留深度信息呢?这是需要使用两台以上相机,就跟我...

2019-10-28 10:49:12 152 0

原创 在OpenCV里使用姿态估算

在前面我们学习了怎么样进行相机校准,在这个过程中会发现相机矩阵、畸变系数等等。如果给定一个模式图像,我们可以利用上面的信息来计算它的姿态,或者物体在空间中的位置状态,比如它是如何旋转的,它是如何移位的等等。对于平面对象,往往认为它的Z轴是等于0的,所以现在我们怎么样才能通过平面图像来推导出来相机放...

2019-10-27 17:37:47 190 0

原创 在OpenCV里使用相机校准

本文将要学习摄像机有什么类型失真,如何发现相机的内在和外在特性,如何根据这些特性消除图像的失真。有一些针孔相机会给图像带来严重的失真,主要存在这两种类型:径向畸变和切向畸变。径向畸变会导致直线拍摄出来的图里变成曲线,径向畸变越厉害,那么图像的点就会偏离图像中心点越远。比如如下图所示: 从上图...

2019-10-26 20:38:56 299 0

原创 为什么会提示cv2.error: OpenCV(4.1.1)error: (-215:Assertion failed) ni == ni1错误

昨天在调用cv2.calibrateCamera函数时,突然提示下面这个错误: Traceback (most recent call last): File "D:/colorFile45.py", line 40, in <module> ret, mt...

2019-10-26 09:39:01 1539 0

原创 在OpenCV里使用光流算法

前面学习了使用一些运动算法来检测物体的运行,其实还有别的方法来检测运动的物体。比如节日庆祝时进行烟花表演,可以看到一道道光的轨迹,这说明物体在运动,同时也看到光在运动。另外,当你坐在火车上,朝车窗外观看时,会发现近处的物体在飞速地离去,而远处的山又好像静止不动,为什么同样速度的物体会有速度上感觉的...

2019-10-25 13:10:03 239 0

原创 在OpenCV里使用Camshift算法

前面学习过Meanshift算法,在观察这个结果标记时,会发现有这样一个问题,如下图: 汽车比较远时,用一个很小的窗口就可以把它框住,这是符合近大远小的投影原理,当比较近的时候如下: 相同大小的窗口已经不能包围它了,那么这样跟踪目标对象就成为了一个问题,怎么样来更改它呢?那么就是Cam...

2019-10-24 20:42:53 322 0

原创 在OpenCV里使用Meanshift算法

在这里将要学习Meanshift算法,这个算法主要在视频里寻找指定目标区域对象。Meanshift算法的原理在直觉上是很很简单的,假设有一张很点做成的图,如下图: 然后给你一个小的窗口,可以是圆形,也可以是方形,接着不断地移动这个窗口,尽量让这个窗口里的元素最多,也就是密度最大。在这里认为初...

2019-10-24 10:51:16 414 0

原创 在OpenCV里使用背景去除

背景去除(Background subtraction)是一个基本的、广泛使用的技术,用它来生成一个前景掩模(把运动目标的像素生成二值化),以便把后面静态背景去掉。背景去除其实就是从图像里提取出静态的背景,然后把当前获取的图像减去背景,就可以得到前景,然后再把前景进行二值化。如下图所示: 在...

2019-10-23 09:33:37 777 0

原创 在OpenCV里使用特征匹配和单映射变换

前面已经学习特征查找和对应匹配,接着下来在特征匹配之后,再使用findHomography函数来找出对应图像的投影矩阵。首先使用一个查询图片,然后在另外一张图片里找到目标对象,其实就是想在图片里查找所需要目标的一部分区域。为了实现这样的功能,需要使用calib3d库里的一个函数cv.findHom...

2019-10-22 17:09:02 200 0

原创 在OpenCV里使用特征匹配

特征匹配(Feature Matching) 前面我们花费了大量时间来学习特征检测和描述,其实主要的目的就是为了图像是否匹配的问题。在OpenCV里提供了两个匹配技术:Brute-Force和FLANN。 Brute-Force匹配算法是比较简单的,它首先从一个特征集合里取一个特征与另外一...

2019-10-22 15:30:18 182 0

原创 在OpenCV里使用ORB

SIFT和SURF都是比较好的特征检测算法,但是你是否想每年都为这两个算法花一些钱去买它们的使用权呢?这两个算法都是受版本保护的,如果要使用必须付费购买。那么有没有不付费,也有与之相比美的算法呢?OpenCV的爱好者开发了一个新的免费算法来替代SIFT和SURF,这个算法就是ORB。 理论:...

2019-10-22 09:44:21 346 0

原创 在OpenCV里使用BRIEF

BRIEF是Binary Robust Independent Elementary Features缩写。我们知道SIFT使用128维向量做关键描述,由于它使用浮点数,需要512字节,同样的SURF也需要至少256字节(64维),创建上千个这样的向量需要很多内存,在资源受限的应用场景,特别是在嵌...

2019-10-22 07:48:58 119 0

原创 在OpenCV里使用FAST算法

目标:了解FAST算法,在OpenCV里使用FAST算法。 理论: 前面学习了很多特征检测算法,并且表现得非常优秀。如果想从实时应用方面去使用它们,其实都不行,比如SLAM(Simultaneous Localization and Mapping)在移动机器人方面的应用。SLAM也称为C...

2019-10-21 17:09:35 206 0

原创 在OpenCV里使用SURF

目标:学习SURF基本知识 理论: 在前面学习过SIFT,明白了关键点检测和描述,但是SIFT的计算量比较大,并且运行有点慢,因此人们开始思考能否进行改善,让速度更快一些。在2006年,Bay,H.,Tuytelaars,T. 和 Van Gool,L发表论文《SURF: Speeded ...

2019-10-21 10:32:05 566 0

原创 在OpenCV里使用SIFT

目标:学习SIFT的算法和SIFT关键点、及特征。 理论: 在前面我们学习图像特征检测--角点检测,比如Harris角检测。不过,前面学习的角点检测,只是具有旋转不变性,比如图片进行旋转了,还可以从图像里找到相应的角点。因为图像进行旋转了,角的朝向也跟着旋转,所以没有改角的组成。如果把角进...

2019-10-21 08:08:27 467 0

原创 在OpenCV里Shi-Tomasi角检测

目标:学习Shi-Tomasi角检测, cv.goodFeaturesToTrack()函数。 理论: 在前面的文章学习过Harris角检测,到1994年时J. Shi和C. Tomasi对这个角检测算法进行了改进,发表了论文《Good Features to Track》, 在论文里说...

2019-10-20 12:06:48 124 0

原创 在OpenCV里Harris角检测2

Opencv中的Harris角点检测 Opencv中有一个函数cv2.cornerHarris()用来实现这个算法, 参数是: src- 输入图片,需要灰度图且类型float32 blockSize - 是角点检测考虑的邻域大小 ksize - Sobel所用参数 k - Harr...

2019-10-19 18:15:42 186 0

原创 在OpenCV里Harris角检测

前面学习了很多关于图像的内容,以及变换,那么你有没有问过自己这样一个问题,什么才是图像的特征?如果我们把一个图像进行分割成一小块一小块的,然后打乱之后再想拼到一起,会寻找什么的规律呢?一般情况之下是找对应的条纹,边缘线等,其实最容易确定一般是有十字交叉的线条,因为这样交叉线条组成了角,而角的两条边...

2019-10-19 16:36:38 163 0

原创 在OpenCV里使用GrabCut算法抽取前景

前面学习过分水岭算法来分离背景与前景,现在来学习另一个标记算法GrabCut,它也是通过标记来抽取前景的算法。这个算法与分水岭算法标记不一样,比如只要简单地标记一个前景的方框,就可以抽取出来,不过计算量就有点大了。如下图: 在这里使用红色的矩形把中间的烧鸭选出来,就这样就可以把它放到Open...

2019-10-18 11:43:59 158 0

原创 在OpenCV里实现分水岭算法

目标:学习基于标记的图像分割算法,又叫做分水岭算法,以及使用cv.watershed()函数。 理论: 任何灰度图像都可以看作是一个地形表面,高强度表示山峰和丘陵,低强度表示山谷。你开始用不同颜色的水(标签)填满每个孤立的山谷(局部最小值)。随着水位的上升,根据附近的山峰(坡度),来自不同...

2019-10-18 09:37:16 134 0

原创 在OpenCV里实现模板匹配

目标:使用模板匹配方法在图片里寻找目标对象,学会使用cv.matchTemplate(), cv.minMaxLoc()函数 模板匹配算法是从一个大图像里找到感兴趣的目标对象,OpenCV提供函数cv.matchTemplate()来实现相关的功能。模板匹配的原理其实很简单,就是不断地在原图...

2019-10-17 11:49:28 127 0

原创 在OpenCV里为什么拉普拉斯变换是高通滤波

大家学习了拉普拉斯变换之后,老是喜欢问为什么拉普拉斯变换是高通滤波(HPF)? 在这里通过傅里叶变换来研究一下这些卷积核的本质,就可以清楚地了解它们到底是什么样类型的滤波。下面来把所有卷积核构造出来,然后每个都进行傅里叶变换,再查看它们的频谱图。 例子如下: #python 3.7.4,op...

2019-10-17 10:32:53 242 0

原创 在OpenCV里Numpy傅里叶变换

前面学习使用OpenCV里的函数实现傅里叶变换,其实Numpy里也有相应的变换,它的变换与Matlab更加接近,如果你想从matlab代码转换过来,使用它可能更加容易一些。 好吧,理论就不多说了,直接来看例子: #python 3.7.4,opencv4.1 #蔡军生 https://blo...

2019-10-17 09:39:46 224 0

原创 在OpenCV里实现直方图反向投影算法

目标:理解二维直方图投影算法 理论 本文算法来源于Michael J. Swain , Dana H. Ballard写的论文《Indexing via color histograms》,论文分为两个部分,前面一部分详细描述了颜色直方图以及通过颜色直方图交叉来实现对象鉴别。可以实现对象背...

2019-10-16 17:53:58 104 0

原创 在OpenCV里实现二维直方图

目标:怎么样实现二维直方图 在前面我们学习过一维直方图,也有应用它来解决过很多问题。但是没有使用过二维直方图,那么它是怎么样实现,以及有什么作用呢。本文就来解决这些问题。在一维直方图里只关注了一个特征:灰度值。在二维直方图里,将要考虑两个特征,一般情况就是采用彩色图里的色调(H)和饱和度(S...

2019-10-16 12:03:45 89 0

原创 在OpenCV里实现部分图像的直方图

在前面计算直方图时,总是计算整个图像的直方图,有没有办法计算部分区域的直方图呢?这时要使用函数: hist=cv.calcHist(images, channels, mask, histSize, ranges[, hist[, accumulate]]) 在这里要使用mask参数,就可以计...

2019-10-16 10:23:40 60 0

原创 在OpenCV里轮廓层级的说明

目标:学习contours, hierarchy=cv.findContours(...)函数中的hierarchy层次关系。 在前面我们学习了很多关于轮廓的函数,发现使用cv.findContours()函数时,要向这个函数输入一个参数cv.RETR_EXTERNAL、cv.RETR_LI...

2019-10-16 09:08:06 107 0

原创 在OpenCV里图像外形的比较

在图形里经常会用到比较两个图形的相似程度,因为这是目标识别的一种方法,比如轮胎是圆的,那么就可以拿一个圆来与轮胎的外形进行比较,如果相似度比较高,就有可能是轮胎。在OpenCV里使用cv.matchShapes()函数来进行比较,这个函数返回的值越低,说明匹配越好。其实它是使用图像Hu矩来实现的。...

2019-10-15 11:16:33 128 0

原创 在OpenCV里图像上的点与轮廓的测试

前面学习轮廓一些函数,接着继续学习图像上一点与轮廓的关系,主要使用cv.pointPolygonTest函数: dist = cv.pointPolygonTest(cnt,(50,50),True) 这行代码就是表示点(50,50)与轮廓cnt的最近距离。pointPolygonTest函数...

2019-10-15 09:49:30 140 0

原创 在OpenCV里凸包缺陷分析

凸包缺陷分析 凸包与轮廓的任何偏差都可视为凸包缺陷。OpenCV里提供cv.convexityDefects()函数来实现凸包缺陷检测: hull = cv.convexHull(cnt,returnPoints = False) defects = cv.convexityDefects(...

2019-10-15 08:52:33 203 0

原创 在OpenCV里计算轮廓的特征

目标: 1)通过轮廓找出不同的特征,比如面积、周长、质心点、边缘包装盒 2)学习使用轮廓函数 图像矩(Image moments ) 图像识别的一个核心问题是图像的特征提取,简单描述即为用一组简单的数据(数据描述量)来描述整个图像,这组数据月简单越有代表性越好。良好的特征不受光线、噪点...

2019-10-14 17:37:19 161 0

原创 在OpenCV里轮廓怎么样省内存

目的: 1)理解什么是轮廓 2)学习查找轮廓 3)明白cv.findContours(), cv.drawContours()的使用 什么是轮廓 轮廓可以简单地解释为连接所有连续点(沿边界)的曲线,有相同的颜色或者灰度。轮廓在形状分析、对象检测和对象识别中非常有用。 为了得到好的轮...

2019-10-14 10:40:42 233 0

原创 在OpenCV里生成图像金字塔

今天介绍图像处理邻域中比较常用的一种方法,image pyramid, 也叫图像金字塔。就是将图像进行一层一层的下采样,图像金字塔是为了构建图像的多尺度,让模型能够更好的适应图像的尺度变化,图像金字塔可以广泛应用于图像识别,目标检测,还有光流配准,块匹配都能看到它的身影。图像金字塔主要有两种,一种...

2019-10-14 09:25:58 217 2

原创 在OpenCV里数据类型不对导致边缘消失

在OpenCV里,有时候使用不对的数据类型,比如cv.CV_8U或np.uint8时,可能会出错的,下面就来举一个例子,如下: #python 3.7.4,opencv4.1 #蔡军生 https://blog.csdn.net/caimouse/article/details/5174957...

2019-10-13 18:16:00 83 0

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