
Opencv
dieju8330
莫道黯然銷魂,何處柳暗花明
博客迁移☞http://epsilonjohn.club/
展开
-
Opencv2.4学习::HOG特征
HOG特征一、什么是HOG特征是关于目标区域梯度方向的特征 是一个向量 二、如何提取HOG特征图片归一化处理,减弱光线、阴影等影响 图像梯度计算,一般用卷积方法,水平模板为[-1,0,1],竖直模板为[-1,0,1]T,看到这个,很容易联想到边缘检测,实际上,这个梯度很大程度上就代表了图像的边缘轮廓信息 统计梯度方向,将目标窗口(win:64*128)继续细分为块(bloc...原创 2019-01-23 21:20:59 · 1013 阅读 · 0 评论 -
Opencv2.4学习::轮廓外接框
轮廓外接框使用findcontours找到轮廓后,由于物体轮廓基本不规则,因此我们一般用规则的框来框取检测到的轮廓常见的有矩形、圆形、椭圆等。基本函数 1、寻找包括点集的最小圆C++: void minEnclosingCircle(InputArray points, Point2f& center, float& radius)InputArray...原创 2018-10-23 16:45:58 · 1043 阅读 · 0 评论 -
Opencv2.4学习::轮廓检测
轮廓检测意义:轮廓信息对于物体检测而言有着十分重要的意义,根据提取到的轮廓信息,通过轮廓点集的特征选择适合的处理算法,即可提取到物体的形状信息,从而提取所需检测的物体。大概原理: 对原图像进行二值化处理,利用边缘点连接的层次差别,提取位于结构特征高的区域点集构成的集合,这部分点集很可能就是物体的轮廓。核心函数:详细参见:https://www.jianshu.com...原创 2018-10-09 22:01:02 · 1480 阅读 · 0 评论 -
Opencv2.4学习::霍夫变换(2)圆变换
霍夫圆变换基本原理 关于基本原理,其思想大概跟霍夫线变换相似,但是有两种说法。第一种:在霍夫线变换中,笛卡尔X-Y直角坐标系中的直线,变换到霍夫空间中则为1个点因此类比可得,笛卡尔X-Y直角坐标系中的圆,变换到abr空间中,则为一条曲线,具体如下:X-Y直角坐标系下圆方程:对应的参数方程为:所以在abr组成的三维坐标系中,一个点可以唯一确定一个圆。那么,...原创 2018-09-30 18:08:59 · 1392 阅读 · 1 评论 -
Opencv2.4学习::凸包检测
凸包检测凸包定义凸包(Convex Hull)是一个计算几何(图形学)中常见的概念。简单来说,给定二维平面上的点集,凸包就是将最外层的点连接起来构成的凸多边形,它是能包含点集中所有点的。理解物体形状或轮廓的一种比较有用的方法便是计算一个物体的凸包,然后计算其凸缺陷(convexity defects)。判断:如果在集合A内连接任意两个点的直线段都在A的内部,则称集合A是凸形的。直...原创 2018-10-14 17:21:42 · 6083 阅读 · 0 评论 -
Opencv2.4学习::边缘检测(5)Canny算法
边缘检测1、Sobel2、Laplace3、Roberts4、CannyCannycanny对边缘检测质量进行分析时,有3个原则:1、信噪比准则 2、定位精度准则 3、单边缘响应准则 canny边缘检测的基本思想是:首先对图像选择一定的Gauss滤波器进行平滑滤波,然后采用非极值抑制技术进行处理得到最后的边缘图像。 Canny算法基本可...原创 2018-09-24 16:44:06 · 32904 阅读 · 5 评论 -
Opencv2.4学习::边缘检测(4)Roberts算子
边缘检测1、Sobel2、Laplace3、Roberts4、CannyRoberts就是以对角线作为差分的方向来检测 实现代码:#include<opencv2/core/core.hpp>#include<opencv2/imgproc/imgproc.hpp>#include<opencv2/highgui/high...原创 2018-09-22 17:59:30 · 10849 阅读 · 5 评论 -
Opencv2.4学习::边缘检测(3)Laplace算子
边缘检测1、Sobel2、Laplace3、Roberts4、CannyLaplace 索贝尔算子 (Sobel) 和拉普拉斯算子 (Laplace) 都是用来对图像进行边缘检测的,不同之处在于,前者是求一阶导,后者是求二阶导。Laplace(f)=∂2f∂x2+∂2f∂y2=f(x+1,y)+f(x−1,y)+f(x,y+1)+f(x,y−1)−4f(x,y)从...原创 2018-09-22 17:12:56 · 4652 阅读 · 0 评论 -
Opencv2.4学习::霍夫变换(1)线变换
霍夫变换特点:用于识别几何形状 不受旋转角度影响 线变换基本原理对于上述不理解的,可以看下面:对于某直线,可以过原点作其法向量,假设在 ρ为原点到直线距离 和 θ已知的情况下因此,该直线的 截距=ρ/sin θ , 斜率= -1/sin θ可以写出直线方程:(-1/tan θ)*x + ρ/sin θ = y变形后,可得:x*cos θ +...原创 2018-09-27 17:59:24 · 626 阅读 · 0 评论 -
Opencv2.4学习::边缘检测(2)Sobel算子
边缘检测1、Sobel2、Laplace3、Roberts4、CannySobel 核心函数:void Sobel( InputArray src, OutputArray dst, int ddepth, int dx, int dy, int ksize=3,double scale=1, double delta=0,int borderType=BOR...原创 2018-09-20 20:25:50 · 2882 阅读 · 0 评论 -
Opencv2.4学习::边缘检测(1)边缘检测基础
边缘检测1、Sobel2、Laplace3、Roberts4、Canny边缘检测概念 梯度算子概念但是,图像是离散的数字量,因此梯度一般为像素点与相邻像素点的差值,而方向则与选定的相邻像素点位置有关。 下引用参考博客的叙述:https://blog.youkuaiyun.com/qq_18815817/article/details/78625845对于数字图像而...原创 2018-09-20 16:48:24 · 2644 阅读 · 2 评论 -
Opencv2.4学习::边缘检测(6)Marr-Hildreth算法(LOG算法)
边缘检测1、Sobel2、Laplace3、Roberts4、CannyMarr-Hildreth简单来说,就是先对图像进行(1)高斯滤波,再进行拉普拉斯变换,(2)由于拉普拉斯变换是二阶偏导,边缘点对应的一阶偏导为局部极值,那么其二阶偏导则为0点,(3)所以最后一步为0点检测 相关数学证明请参见:https://blog.youkuaiyun.com/songzit...原创 2018-09-25 19:09:49 · 3581 阅读 · 0 评论 -
Opencv2.4学习::颜色提取
颜色提取 Opencv中,颜色提取的一种方式是将BGR空间下的图像转换为HSV空间下,然后利用opencv自带函数inRange,设置需提取的HSV各分量上下限,从而进行提取。关于颜色空间关于颜色空间转换请参见:https://blog.youkuaiyun.com/dieju8330/article/details/82465616以及https://blog.youkuaiyun.com/Cold...原创 2018-09-19 17:49:30 · 5652 阅读 · 3 评论 -
Opencv2.4学习::轮廓矩【判断形态方向、匹配度】
轮廓矩原理部分:矩一、概率论上的定义 看到矩这个字,很容易联想到概率论,在概率论中,定义如下:或者说:设 X 和 Y 是随机变量,c 为常数,k 为正整数, 如果E(|X−c|^k)E(|X−c|^k)存在,则称E(|X−c|^k)E(|X−c|^k)为 X 关于点 c 的 k 阶矩。c = 0 时, 称为 k 阶原点矩; c = E(x) 时,称为 k 阶中...原创 2018-10-24 18:02:01 · 7406 阅读 · 0 评论 -
Opencv2.4学习::角点检测(一)
角点检测(一)1、moravec角点2、3、基本原理:我们在图片以某像素点为中心,取一邻域(比如3*3),当窗口向各个方向移动时,其内部灰度值变化不是很明显,则该点即处在平坦区域(如左边图);当其内部灰度值只在几个固定的方向上变化较为明显,那么该点则处在边缘区域(如图中间部分);当向各个方向移动,其变化都是很明显,则该点为角点(如图右)。基本步骤:(1) 在当前...原创 2018-10-31 18:31:10 · 940 阅读 · 0 评论 -
CVUI学习::(二)cvui显示图片
cvui显示图片测试有bug:貌似不支持显示灰度图,即CV_8UC1,暂时只能显示彩色图直接进入主题核心函数:void image(cv::Mat& theWhere, int theX, int theY, cv::Mat& theImage);第一个参数:背景图层 第二个参数:图片位于背景图层的坐标x 第三个参数:图片位于背景图层的坐标y 第四个...原创 2019-01-01 21:05:18 · 1878 阅读 · 1 评论 -
CVUI学习::(一)基于OpenCv的ui库
CVUI::基于OpenCv的ui库这里介绍一个简单却强大的ui库,CVUI,该ui库在Opencv的绘图基础上,不需要openGL,不需要imgui,只需要一个.h头文件+Opencv+CMake即可向该项目原作者致敬,github:https://github.com/Dovyski/cvui该库可实现的效果:一、helloworld测试cvui库的hellowor...原创 2019-01-01 20:38:10 · 7952 阅读 · 4 评论 -
粒子滤波初探(二)利用粒子滤波实现视频目标跟踪-代码部分(C++&&opencv2.49)
利用粒子滤波实现视频目标跟踪工程实战放在最前:致谢taotao1233、yangyangcv、yang_xian521 以及先驱 Rob Hess 所开源的代码和思路。本篇:基本为工程翻译,以及对上面版本的一些修正,使用的是opencv2.49,以Mat类型代替了容易导致内存泄漏的Iplimage*类型,总的来说,就是从旧版的opencv数据结构翻译到opencv2.49下。yang_x...原创 2018-12-18 12:21:55 · 6728 阅读 · 25 评论 -
粒子滤波初探(一)利用粒子滤波实现视频目标跟踪的大致流程
粒子滤波初探对于线性、高斯分布的运动模型,有卡尔曼滤波,那么对于非线性、非高斯的运动模型,粒子滤波器发挥出其优越性,主体思想是通过大量试验,对正确的试验状态予以适当的权重分配,从而实现根据权重增加的方向实现跟踪。本文与其他描述粒子滤波的博文不同,先以例子引入,让初步了解的人对粒子滤波有一个大致认识。以视频的目标跟踪为例,解说一下这个粒子滤波跟踪流程。 一、t-1时刻下:假定我们...原创 2018-12-16 01:30:56 · 11230 阅读 · 11 评论 -
Opencv2.4学习::特征分析(一)尺度空间
尺度空间尺度空间就是试图在图像领域中模拟人眼观察物体的概念与方法。这是由于通过计算机视觉系统,我们无法直接获取所关注物体、对象的大小,这时候就需要一个尺度空间来描述感觉还是有点抽象,再引用一段说明:在一定的范围内,无论物体是大还是小,人眼都可以分辨出来。然而计算机要有相同的能力却不是那么的容易,在未知的场景中,计算机视觉并不能提供物体的尺度大小,其中的一种方法是把物体不同尺度...原创 2018-11-27 20:21:44 · 928 阅读 · 0 评论 -
Opencv2.4学习::基于形态学处理+基本特征实现车牌区域提取
基于形态学处理+基本特征实现车牌区域提取1、形态学梯度2、Sobel边缘检测实际上,提取车牌还是那个思路:区域分离->轮廓检测->特征判断这里提供这样一个算法,来源于《OpenCV图像处理编程实例》步骤如下:边缘检测,检测垂直边缘,尽量减少横向的边缘连通车牌区域----->实现手段:形态学梯度、或者Sobel边缘检测的垂直方向,当然也可以用其他边缘检测...原创 2018-11-22 20:54:09 · 1223 阅读 · 0 评论 -
Opencv2.4学习::角点检测(三)Shi-Tomasi角点
角点检测(三) 1、moravec角点2、harris角点3、Shi-Tomasi角点Shi-Tomasi角点从上一篇harris角点可知,harris判断是否角点的评判公式是:R = λ1λ2 - k(λ1 + λ2)²而这里的 Shi-Tomasi角点,是harris角点算法的一个变式,其评判公式为: R = min(λ1, λ2)即为,当矩阵M的两...原创 2018-11-05 16:44:39 · 270 阅读 · 0 评论 -
Opencv2.4学习::形态学滤波-角点检测
形态学滤波-角点检测就是利用形态学处理中的腐蚀和膨胀操作进行的角点检测、边缘检测。基本步骤第一步:十字型核-------->【对原图:膨胀操作】效果:原图在水平和垂直方向会扩展,而45度.135度方向没有得到扩展目的:目的是使得在下一步的腐蚀操作中,保证腐蚀后的边缘与原图一致,而只有角点被腐蚀掉第二步:菱形核-------->【对第一步的结果:腐蚀操作】...原创 2018-11-10 20:05:31 · 1335 阅读 · 1 评论 -
Opencv2.4学习::形态学处理(二)开运算、闭运算操作
形态学处理(二)1、腐蚀、膨胀操作2、开运算、闭运算 开运算开运算(Opening Operation),其实就是先腐蚀后膨胀的操作。作用:去除噪声,消除小物体 在纤细点处分离物体 平滑较大物体的边界的同时并不明显改变其面积简单测试:#include<opencv2/core/core.hpp>#include<opencv2/...原创 2018-11-07 17:41:40 · 21030 阅读 · 3 评论 -
Opencv2.4学习::形态学处理(三)形态学梯度、顶帽、黑帽
形态学处理(三)1、腐蚀、膨胀操作2、开运算、闭运算3、形态学梯度、顶帽、黑帽形态学梯度形态学梯度实为膨胀图与腐蚀图之差。作用:突出高亮区域的外围 为轮廓查找提供新思路测试代码:#include<opencv2/core/core.hpp>#include<opencv2/highgui/highgui.hpp>#incl...原创 2018-11-09 18:44:33 · 4164 阅读 · 0 评论 -
Opencv2.4学习::形态学处理(一)腐蚀、膨胀操作
形态学处理(一)1、腐蚀、膨胀操作 膨胀 简单来讲,膨胀操作就是选定窗口大小,然后在原图上滑动,窗口中心点的取值为窗口内所有像素点的最大值。下给出过程图,个人认为下图比上面的解释图更为通俗易懂。对单个像素的膨胀操作如下: (1)请把下图看做是方格纸,黑色部分也是,第一张图为对像素(1,1)进行膨胀操作,红色框为选取的核大小:(2)第二张图为对像素(2,2...原创 2018-11-06 18:27:45 · 1681 阅读 · 0 评论 -
Opencv2.4学习::角点检测(二)harris角点
角点检测(二)1、moravec角点2、harris角点3、harris角点本节内容是以moravec角点的检测原理为基础的,建议先去浏览。原理部分(1)先从moravec角点算法的兴趣值计算公式说起: ①(2)回顾泰勒公式 ②(3)将(1)中的公式①按二维下的泰勒展开,取近似一阶,有:...原创 2018-11-02 16:10:02 · 314 阅读 · 0 评论 -
Opencv2.4学习::图像污点修复
图像污点修复 原理摘自:https://blog.youkuaiyun.com/qq_20823641/article/details/52252072参考上图,Ω区域是待修复的区域;δΩ指Ω的边界);要修复Ω中的像素,就需要计算出新的像素值来代替原值。现在假设p点是我们要修复的像素。以p为中心选取一个小邻域B(ε),该邻域中的点像素值都是已知的(只要已知的)。(这个ε就是opencv函数中参...原创 2018-09-18 19:47:21 · 4379 阅读 · 0 评论 -
Opencv2.4学习::滤波(5)导向滤波
滤波系列: 均值滤波 中值滤波 高斯滤波 双边滤波导向滤波 下引用 https://blog.youkuaiyun.com/baimafujinji/article/details/74750283 的一段话来说明导向滤波的作用: 无论是简单平滑,还是高斯平滑,它们都有一个共同的弱点,即它们都属于各向同性滤波。我们都知道,一幅自然的图像可以被看成是有(过渡平缓的,也就是梯度较小...原创 2018-09-18 17:47:16 · 2252 阅读 · 2 评论 -
Opencv2.4学习::二值化(2)threshold
二值化系列:(1)OTSU算法(2)固定二值化(3)自适应二值化 比较简单,直接使用即可 #include<opencv2/imgproc/imgproc.hpp>#include<opencv2/highgui/highgui.hpp>#include<iostream>using namespace std;us...转载 2018-09-07 18:32:37 · 2049 阅读 · 0 评论 -
Opencv2.4学习::ROI区域
rect方法:#include<opencv2/highgui/highgui.hpp>#include<opencv2/imgproc/imgproc.hpp>#include<iostream>using namespace std;using namespace cv;//全局下的原图像Mat srcImage;//rect方法vo...原创 2018-09-05 18:20:58 · 1090 阅读 · 3 评论 -
Opencv2.4学习::彩色直方图均衡化
#include<opencv2/opencv.hpp>#include<iostream>using namespace std;using namespace cv;int main(){ Mat srcImage = imread("F:\\opencv_re_learn\\2.jpg"); if (!srcImage.data){ cou...转载 2018-09-08 20:00:11 · 1449 阅读 · 0 评论 -
Opencv2.4学习::亮度平衡--直方图均衡化
算法看起来比较复杂,但是由于opencv已经有内置实现代码,因此调用代码比较简单: #include<opencv2/opencv.hpp>#include<iostream>using namespace std;using namespace cv;int main(){ Mat srcImage = imread("F:\\opencv_r...转载 2018-09-08 19:49:15 · 6044 阅读 · 0 评论 -
Opencv2.4学习::垂直投影法分割字符
1、垂直投影法假定输入图片中字符为白色,背景为黑色即为将图片看作是由【x1,x2,x3,x4.......】列向量组成的矩阵。统计每列中白色像素的个数,并以此来判断是字符区还是背景。测试图片: 车牌号为模拟产生,如有相同,纯属雷同2、代码实现:(主要分3部分)#include<opencv2/imgproc/imgproc.hpp>...原创 2018-09-11 19:56:44 · 16199 阅读 · 15 评论 -
Opencv2.4学习::图像缩放
代码实现:#include<iostream>#include"opencv2/imgproc/imgproc.hpp"#include"opencv2/highgui/highgui.hpp"#include<opencv2/core/core.hpp>using namespace std;using namespace cv;//基于等间隔...原创 2018-09-02 19:01:51 · 397 阅读 · 0 评论 -
Opencv2.4学习::图像读取、显示、保存
#include<iostream>#include"opencv2/imgproc/imgproc.hpp"#include"opencv2/highgui/highgui.hpp"using namespace std;using namespace cv;int main(){ //用Iplimage读取,转换为mat显示 IplImage *pic = cv...原创 2018-09-02 16:31:11 · 918 阅读 · 0 评论 -
Opencv2.4学习::Mat矩阵类型转换
#include<iostream>#include"opencv2/imgproc/imgproc.hpp"#include"opencv2/highgui/highgui.hpp"using namespace cv;void main(){ // Mat 转换到其他 Mat image_white(100, 100, CV_8UC1, Scalar(255));...原创 2018-09-02 16:22:33 · 1163 阅读 · 0 评论 -
Opencv2.4学习::Mat矩阵的创建
Mat类构造函数: 类详细解释参见:https://blog.youkuaiyun.com/qq_37406130/article/details/787254061、Mat::Mat() 无参数构造方法; 2、Mat::Mat(int rows, int cols, int type) 创建行数为 rows,列数为 col,类型为 type 的图像; 3、Mat::Mat(Size si...原创 2018-09-02 16:08:47 · 4827 阅读 · 0 评论 -
Opencv2.4学习::灰度直方图
实现代码:#include<opencv2/imgproc/imgproc.hpp>#include<opencv2/highgui/highgui.hpp>#include<iostream>using namespace std;using namespace cv;int main(){ Mat srcImage = imread...转载 2018-09-07 19:44:38 · 480 阅读 · 0 评论 -
Opencv2.4学习::二值化(3)自适应二值化
二值化系列:(1)OTSU算法(2)固定二值化(3)自适应二值化 adaptiveThresholdvoid adaptiveThreshold(InputArray src, OutputArraydst,double maxValue,int adaptiveMethod,int thresholdType,int blockSize,double C );...转载 2018-09-07 19:01:23 · 3904 阅读 · 0 评论