
《人工智能》OpenCV开发笔记
文章平均质量分 92
Bruceoxl
BruceOu,于2017年10月13日开始在优快云上写博客,博客专注于嵌入式开发、人工智能等。欢迎各位朋友来访!
邮箱: ouxiaolong@bruceou.cn
展开
-
OpenCV 开发笔记博文导航
自博主更新该专栏也很久了,博主今天就把以前的博文整理一下,希望对感兴趣的朋友有所帮助,在此感谢优快云这个平台给出了这个一个交流的机会,也感谢大家的支持。OpenCV相关的网站 OpenCV官网 OpenCV参考文档 OpenCV中文论坛 OpenCV源码-Github Learn OpenCV官网OpenCV开发笔记第一部分 环境搭建 ...原创 2018-08-19 20:03:08 · 1780 阅读 · 0 评论 -
【第二部分 图像处理】第4章 Opencv图像处理高阶【3图像修复】
3.1图像修复概述在实际应用中,我们的图像常常会被噪声腐蚀,这些噪声或是镜头上的灰尘或水滴,或是旧照片的划痕,或者是图像遭到人为的涂画(比如马赛克)或者图像的部分本身已经损坏。如果我们想让这些受到破坏的额图片尽可能恢复到原样,Opencv能帮我们做到吗? OpenCV真的有这个妙手回春的功能!别以为图像修补的工作只能用PS或者美图秀秀那些软件去做,其实由程序员自己写代码去做更加高效! 图像...原创 2018-03-25 08:28:37 · 2398 阅读 · 0 评论 -
【第二部分 图像处理】第4章 Opencv图像处理高阶【2毛玻璃滤镜】
2.1毛玻璃滤镜概述毛玻璃也叫雾面玻璃、防眩玻璃等,是用金刚砂等磨过或以化学方法处理过的一种表面粗糙不平整的的半透明玻璃,也就是磨砂玻璃的俗称,一般用在卫生间的门窗上面,其它的房间的玻璃也可以。毛玻璃效果的实现通过用像素点邻域内随机一个像素点的颜色替代当前像素点的颜色实现。2.2毛玻璃实现实例毛玻璃效果可以通过OpenCV很容易实现,具体参考代码见附件【demo1】。 图1...原创 2018-03-23 13:44:19 · 995 阅读 · 0 评论 -
【第二部分 图像处理】第4章 Opencv图像处理高阶【1马赛克】
1.1马赛克概述笔者今天要讲的是马赛克,相信很多朋友对这个是有有兴趣的,这个号讨厌的,我想大家都懂的哈!好了,言归正传,我们开始今天的讲解吧。 马赛克的实现原理是把图像上某个像素点一定范围邻域内的所有点用邻域内随机选取的一个像素点的颜色代替,这样可以模糊细节,但是可以保留大体的轮廓。1.2马赛克检测1.2.1马赛克检测原理首先讲解马赛克检测吧,以一幅图片为例,来说明马赛克...原创 2018-03-22 08:02:55 · 5080 阅读 · 1 评论 -
【第二部分 图像处理】第3章 Opencv图像处理进阶【6角点检测 D】
6.4自定义角点检测6.4.1自定义角点检测概述前文讲解了利用Harris进行角点检测和利用Shi-Tomasi方法进行角点检测外,也可以自己制作角点检测的函数:使用cornerEigenValsAndVecs()函数和minMaxLoc()函数结合来模拟Harris角点检测,或者使用cornerMinEigenVal()函数和minMaxLoc()函数结合来模拟Shi-Tomasi角...原创 2018-03-21 20:22:03 · 858 阅读 · 0 评论 -
【第二部分 图像处理】第3章 Opencv图像处理进阶【6角点检测 C】
6.3亚像素角点检测6.3.1 亚像素角点检测前文讲解了利用Harris进行角点检测和利用Shi-Tomasi方法进行角点检测外,如果对角点的精度有更高的要求,可以用cornerSubPix()函数将角点定位到子像素,从而取得亚像素级别的角点检测效果。6.3.2 亚像素角点检测:cornerSubPix()函数 cornerSubPix()函数讲解C++: vo...原创 2018-03-20 08:08:58 · 718 阅读 · 0 评论 -
【第二部分 图像处理】第3章 Opencv图像处理进阶【6角点检测 B】
6.2 Shi-Tomasi角点检测6.2.1 Shi-Tomasi角点检测概述及原理Shi-Tomasi 算法是Harris 算法的改进。Harris 算法最原始的定义是将矩阵 M 的行列式值与 M 的迹相减,再将差值同预先给定的阈值进行比较。后来Shi 和Tomasi 提出改进的方法,若两个特征值中较小的一个大于最小阈值,则会得到强角点。 参考论文:hi and C. Tomas...原创 2018-03-19 20:31:00 · 592 阅读 · 0 评论 -
【第二部分 图像处理】第3章 Opencv图像处理进阶【6角点检测 A】
6.1 Harris 角点检测6.1.1角点检测概述及原理关于兴趣点(interest points) 在图像处理和与计算机视觉领域,兴趣点(interest points),或称作关键点(keypoints)、特征点(feature points) 被大量用于解决物体识别,图像识别、图像匹配、视觉跟踪、三维重建等一系列的问题。我们不再观察整幅图,而是选择某些特殊的点,然后对他们进行...原创 2018-03-19 20:11:29 · 1891 阅读 · 0 评论 -
【第二部分 图像处理】第3章 Opencv图像处理进阶【5图像分割】
5.1图像分割概述图像分割就是把图像分成若干个特定的、具有独特性质的区域并提出感兴趣目标的技术和过程。它是由图像处理到图像分析的关键步骤。现有的图像分割方法主要分以下几类:基于阈值的分割方法、基于区域的分割方法、基于边缘的分割方法以及基于特定理论的分割方法等。从数学角度来看,图像分割是将数字图像划分成互不相交的区域的过程。图像分割的过程也是一个标记过程,即把属于同一区域的像索赋予相同的编号。 ...原创 2018-03-12 14:27:49 · 11117 阅读 · 0 评论 -
【第二部分 图像处理】第3章 Opencv图像处理进阶【4 图像轮廓E】
3.5分水岭算法3.5.1分水岭算法概述分水岭分割方法。它是一种基于拓扑理论的数学形态学的分割方法,其基本思想是把图像看作是测地学上的拓扑地貌,图像中每一点像素的灰度值表示该点的海拔高度,每一个局部极小值及其影响区域称为集水盆,而集水盆的边界则形成分水岭。分水岭的概念和形成可以通过模拟浸入过程来说明。在每一个局部极小值表面,刺穿一个小孔,然后把整个模型慢慢浸入水中,随着浸入的加深,每一...原创 2018-03-09 21:05:06 · 1146 阅读 · 0 评论 -
【第二部分 图像处理】第3章 Opencv图像处理进阶【4 图像轮廓D】
3.4图形的矩矩函数有着广泛的应用,如模式识别、目标跟踪、模式识别等。下面笔者就带领大家一起揭开其神秘的面纱。3.4.1图像的矩相关API3.4.1.1图像的矩形API讲解 矩的计算:moments()函数C++: Moments moments( InputArray array, bool binaryImage...原创 2018-03-09 17:19:57 · 1731 阅读 · 0 评论 -
【第二部分 图像处理】第3章 Opencv图像处理进阶【4 图像轮廓C】
3.3使用多边形将轮廓包围在实际运用中,常常会有将检测处的轮廓用多边形包围,本节就为读者讲解如何用多边形包围轮廓。3.3.1多边形包围轮廓的相关API3.3.1.1多边形包围轮廓的相关API讲解 返回外围矩形边界:boundingRect() 函数C++: Rect boundingRect(InputArray points) 【参数】 唯一的参数就是输入...原创 2018-03-09 14:55:21 · 1512 阅读 · 1 评论 -
【第二部分 图像处理】第3章 Opencv图像处理进阶【4 图像轮廓B】
3.2寻找物体的凸包3.2.1概述凸包(Convex Hull)是一个计算几何(图形学)中的概念,在一个实数向量空间V中,对于给定集合X,所有包含X的凸集的交集S被称为X的凸包。 X的凸包可以用X内所有点(x1, x2….xn)的线性组合来构造。在二维欧几里得空间中,凸包可以想象为一条刚好包着所有点的橡皮圈,用不严谨的话来讲,给定二维平面上的点集,凸包就是将最外层的点连接起来构成的...原创 2018-03-08 21:37:47 · 679 阅读 · 0 评论 -
【第二部分 图像处理】第3章 Opencv图像处理进阶【4 图像轮廓A】
3.1查找并绘制轮廓1985年,satoshi suzuki发表的《Topological structural analysis of digitized binary images by border following》论文介绍了两种算法来实现轮廓的提取,当然输入的图像是二值图像。findcontour就是基于这篇论文的思路来实现。他主要介绍了两种算法,用来对数字二值图像进行拓扑分析。第...原创 2018-03-08 21:29:11 · 1951 阅读 · 0 评论 -
【第二部分 图像处理】第3章 Opencv图像处理进阶【3 直方图与匹配 E】
3.6模板匹配3.6.1模板匹配概述及原理模板匹配是一项在一幅图像中寻找与另一幅模板图像最匹配(相似)部分的技术. 那么,模板匹配怎么实现呢?我们需要2幅图像: 原图像 (I): 在这幅图像里,我们希望找到一块和模板匹配的区域; 模板 (T): 将和原图像比照的图像块; 我们的目标是检测最匹配的区域: 图1 为了确定匹配区域, 我们不得不滑动模板图像和原图像进行比较 ...原创 2018-03-05 20:15:54 · 1030 阅读 · 0 评论 -
【第二部分 图像处理】第3章 Opencv图像处理进阶【3 直方图与匹配 D】
3.5反向投射3.5.1反向投射概述及原理反向投影是一种记录给定图像中的像素点如何适应直方图模型像素分布的方式。简单的讲, 所谓反向投影就是首先计算某一特征的直方图模型,然后使用模型去寻找图像中存在的该特征。例如, 你有一个肤色直方图 ( Hue-Saturation 直方图 ),你可以用它来寻找图像中的肤色区域。 我们使用肤色直方图为例来解释反向投影的工作原理。假设你已经通过下图得...原创 2018-03-04 08:56:07 · 745 阅读 · 0 评论 -
【第二部分 图像处理】第3章 Opencv图像处理进阶【3 直方图与匹配 C】
3.4直方图对比3.4.1直方图对比概述要比较两个直方图( and ), 首先必须要选择一个衡量直方图相似度的对比标准 。OpenCV 函数 compareHist 执行了具体的直方图对比的任务。该函数提供了4种对比标准来计算相似度: 相关:Correlation ( CV_COMP_CORREL ) 其中 是直方图中bin的数目。 卡方:Ch...原创 2018-03-03 11:32:34 · 1088 阅读 · 0 评论 -
【第二部分 图像处理】第3章 Opencv图像处理进阶【3 直方图与匹配 A】
3.1图像直方图概述直方图是对数据的集合统计 ,并将统计结果分布于一系列预定义的 bins 中。这里的数据 不仅仅指的是灰度值,统计数据可能是任何能有效描述图像的特征。先看一个例子吧。 假设有一个矩阵包含一张图像的信息 (灰度值0-255 ): 图1 如果我们按照某种方式去统计这些数字,会发生什么情况呢? 既然已知数字的范围包含 256 个值, 我们可以将这个范围分割成子区域...原创 2018-03-03 11:13:35 · 1144 阅读 · 0 评论 -
【第二部分 图像处理】第3章 Opencv图像处理进阶【3 直方图与匹配 B】
3.3直方图均衡化3.3.1直方图均衡化概述直方图是图像中像素强度分布的图形表达方式。它统计了每一个强度值所具有的像素个数。 图1 直方图均衡化是通过拉伸像素强度分布范围来增强图像对比度的一种方法,说得更清楚一些, 以上面的直方图为例, 你可以看到像素主要集中在中间的一些强度值上. 直方图均衡化要做的就是 拉伸 这个范围. 见下面左图: 绿圈圈出了 少有像素分布其上的 ...原创 2018-03-01 09:46:52 · 627 阅读 · 0 评论 -
【第二部分 图像处理】第3章 Opencv图像处理进阶【2 图像变换D-仿射变换】
2.5仿射变换2.5.1 初识仿射变换仿射变换(Affine Transformation或 Affine Map),又称仿射映射,是指在几何中,一个向量空间进行一次线性变换并接上一个平移,变换为另一个向量空间的过程。它保持了二维图形的“平直性”(即:直线经过变换之后依然是直线)和“平行性”(即:二维图形之间的相对位置关系保持不变,平行线依然是平行线,且直线上点的位置顺序不变)。 一...原创 2018-03-01 09:33:05 · 2365 阅读 · 0 评论 -
【第二部分 图像处理】第3章 Opencv图像处理进阶【2 图像变换C-重影射】
2.4重映射2.4.1重映射的概念简析重映射,就是把一幅图像中某位置的像素放置到另一个图片指定位置的过程。为了完成映射过程, 我们需要获得一些插值为非整数像素的坐标,因为源图像与目标图像的像素坐标不是一一对应的。一般情况下,我们通过重映射来表达每个像素的位置 (x,y),像这样 : g(x,y)=f(h(x,y))g(x,y)=f(h(x,y))g(x,y) = f ( h(x,y)...原创 2018-02-27 10:54:47 · 1625 阅读 · 0 评论 -
【第二部分 图像处理】第3章 Opencv图像处理进阶【2 图像变换B-霍夫变换】
2.3霍夫变换2.3.1霍夫变换概述在图像处理和计算机视觉领域中,如何从当前的图像中提取所需要的特征信息是图像识别的关键所在。在许多应用场合中需要快速准确地检测出直线或者圆。其中一种非常有效的解决问题的方法是霍夫(Hough)变换,其为图像处理中从图像中识别几何形状的基本方法之一,应用很广泛,也有很多改进算法。最基本的霍夫变换是从黑白图像中检测直线(线段)。这篇文章就将介绍OpenCV...原创 2018-02-26 20:38:02 · 1740 阅读 · 0 评论 -
【第二部分 图像处理】第3章 Opencv图像处理进阶【2 图像变换A-边缘检测】
2.1关于边缘检测在具体介绍之前,先来一起看看边缘检测的一般步骤吧。 【第一步】滤波:边缘检测的算法主要是基于图像强度的一阶和二阶导数,但导数通常对噪声很敏感,因此必须采用滤波器来改善与噪声有关的边缘检测器的性能。常见的滤波方法主要有高斯滤波,即采用离散化的高斯函数产生一组归一化的高斯核,然后基于高斯核函数对图像灰度矩阵的每一点进行加权求和。 【第二步】增强:增强边缘的基础是确定图像各点邻...原创 2018-02-25 22:27:07 · 3044 阅读 · 0 评论 -
OpenCV插件工具 - Image Watch 插件安装与使用
Image Watch使用 Image Watch是在VS2012及以上版本上使用的一款OpenCV插件工具,能够实时显示图像和矩阵Mat的内容,跟Matlab很像,方便程序调试,相当好用。 下载链接: https://marketplace.visualstudio.com/items?itemName=WolfKienzle.ImageWatch 下载好插件ImageWatch,双击Im原创 2017-12-31 22:23:41 · 3680 阅读 · 0 评论 -
【第二部分 图像处理】第3章 Opencv图像处理进阶-【1 图像处理E-阈值化】(imgproc组件、feature2D组件)
1.7阈值化在对图像的分割中,阈值化是最简单的图像分割的方法。比如我们从一副图像中利用阈值分割出我们需要的物体部分(当然这里的物体可以是一部分或者整体)。这样的图像分割方法是基于图像中物体与背景之间的灰度差异,而且此分割属于像素级的分割。为了从一副图像中提取出我们需要的部分,应该用图像中的每一个像素点的灰度值与选取的阈值进行比较,并作出相应的判断。(注意:阈值的选取依赖于具体的问题。即:物体在不同的原创 2017-12-31 18:55:20 · 2221 阅读 · 0 评论 -
【第二部分 图像处理】第3章 Opencv图像处理进阶-【1 图像处理D-图像金字塔】(imgproc组件、feature2D组件)
1.6图像金字塔1.6.1关于图像金字塔图像金字塔是图像中多尺度表达的一种,最主要用于图像的分割,是一种以多分辨率来解释图像的有效但概念简单的结构。 图像金字塔最初用于机器视觉和图像压缩,一幅图像的金字塔是一系列以金字塔形状排列的分辨率逐步降低,且来源于同一张原始图的图像集合。其通过梯次向下采样获得,直到达到某个终止条件才停止采样。 金字塔的底部是待处理图像的高分辨率表示,而顶部是低分辨率的近似原创 2017-12-31 18:51:52 · 1592 阅读 · 0 评论 -
【第二部分 图像处理】第3章 Opencv图像处理进阶-【1 图像处理C-漫水填充】(imgproc组件、feature2D组件)
1.5漫水填充1.5.1漫水填充的定义漫水填充法是一种用特定的颜色填充联通区域,通过设置可连通像素的上下限以及连通方式来达到不同的填充效果的方法。漫水填充经常被用来标记或分离图像的一部分以便对其进行进一步处理或分析,也可以用来从输入图像获取掩码区域,掩码会加速处理过程,或只处理掩码指定的像素点,操作的结果总是某个连续的区域。1.5.2漫水填充法的基本思想所谓漫水填充,简单来说,就是自动选中了和种子点原创 2017-11-11 10:13:07 · 1269 阅读 · 0 评论 -
【第二部分 图像处理】第3章 Opencv图像处理进阶-【1 图像处理B-形态学处理】(imgproc组件、feature2D组件)
1.3形态学图像处理:膨胀与腐蚀1.3.1理论与概念讲解<1>形态学概述 形态学(morphology)一词通常表示生物学的一个分支,该分支主要研究动植物的形态和结构。而我们图像处理中指的形态学,往往表示的是数学形态学。下面一起来了解数学形态学的概念。 数学形态学(Mathematical morphology) 是一门建立在格论和拓扑学基础之上的图像分析学科,是数学形态学图像处理的基本理论。原创 2017-11-10 14:19:27 · 1879 阅读 · 0 评论 -
【第二部分-图像处理】第3章 Opencv图像处理进阶-【1 图像处理A-滤波】(imgproc组件、feature2D组件)
1.1线性滤波1.1.1理论与概念讲解关于平滑处理 “平滑处理“(smoothing)也称“模糊处理”(bluring),是一项简单且使用频率很高的图像处理方法。平滑处理的用途有很多,最常见的是用来减少图像上的噪点或者失真。在涉及到降低图像分辨率时,平滑处理是非常好用的方法。 图像滤波与滤波器 首先我们看一下图像滤波的概念。图像滤波,即在尽量保留图像细节特征的条件下对目标图像的原创 2017-11-09 16:41:33 · 10458 阅读 · 1 评论 -
【第二部分-图像处理】第2章 Opencv图像处理初阶(core组件)
2.1图像混合2.1.1设定感兴趣区域——ROI(region of interest)在图像处理领域,我们常常需要设置感兴趣区域(ROI,region of interest),来专注或者简化我们的工作过程 。也就是从图像中选择的一个图像区域,这个区域是我们图像分析所关注的重点。我们圈定这个区域,以便进行进一步处理。而且,使用ROI指定我们想读入的目标,可以减少处理时间,增加精度,给图像处理来带不原创 2017-11-01 21:02:02 · 1335 阅读 · 0 评论 -
【第二部分-图像处理】第1章 Opencv图像处理入门
1.1基础图像容器Mat类的使用1.1.1基本图像容器Mat在正式讲解OpenCV之前,首先要介绍的就是Mat。 在2001年刚刚出现的时候,OpenCV基于 C 语言接口而建。为了在内存(memory)中存放图像,当时采用名为 IplImage 的C语言结构体,时至今日这仍出现在大多数的旧版教程和教学材料。但这种方法必须接受C语言所有的不足,这其中最大的不足要数手动内存管理,其依据...原创 2017-10-31 22:20:14 · 9699 阅读 · 2 评论 -
【第一部分-环境搭建】OpenCV环境搭建(Linux)
1.1源码方式安装OpenCV1.1.1安装OpenCV使用OpenCV-2.4.13和Python2.7环境搭建步骤步骤0: 打开终端,我们先更新和升级已安装的软件包,然后更新Raspberry Pi固件。 sudo apt-get update sudo apt-get upgrade sudo rpi-update 等待一段时间后,更新结束,该部分耗时较久。 步骤1: 安装所需的原创 2017-10-15 16:57:36 · 3054 阅读 · 0 评论 -
【第一部分-环境搭建】Opencv环境搭建(Visual Studio+Windows)
1.1 库路径添加方式1.1.1 Opencv的安装及环境变量配置1.下载源码包 图1-1 将源码下载后双击可执行程序,安装在当前盘符下。 图1-2 源码地址:http://opencv.org/ 笔者使用的版本是3.0.0,最新(2017-11-6)的版本是3.3.1。安装方法都是大同小异,希望笔者不要过分在意版本,安装方法都是相通的。 2.为Opencv 添加环境变量原创 2017-10-15 16:40:28 · 2746 阅读 · 0 评论