OpenCV算法及源码解析
介绍OpneCV的算法原理,并对源码进行深入解析
高精度计算机视觉
人工智能与视像技术,对技术有点执着
展开
-
OpenCV之Kalman fileter(卡尔曼滤波)
原理的通俗解释用一个网上流传温度估计的例子(根据 k-1 时刻的温度值,估算 k 时刻的是实际温度值),为了通俗会意,我这里尽量避免使用专业术语。假设我们相信温度是恒定的,所以得到 k 时刻的温度预测值是跟 k-1 时刻一样的,假设是23 度,同时该值的高斯噪声的偏差是 5 度。然后,你从温度计那里得到了 k 时刻的温度值,假设是25 度,同时该值的偏差是 4 度。可见,整个Kal...原创 2018-12-13 13:24:57 · 1255 阅读 · 0 评论 -
OpenCV中cv::Mat 数据类型 depth()和type()
OpenCV中如何获取数据 矩阵cv::Mat的数据类型?一般有2个常用函数,depth()返回是基本的数据类型,也就是说每个数据元素的类型,该函数并不关心矩阵cv::Mat的维度,// <interface.h>#define CV_8U 0#define CV_8S 1#define CV_16U 2#define CV_16S 3#define...原创 2019-08-02 22:07:58 · 8944 阅读 · 0 评论 -
OpenCv截取任意形状 -- 实例
OpenCV实例: 在图中按下鼠标画一个任意形状的区域,右击截取该区域内的图像,其中copyTo函数可根据掩码提取图片内容。#include "pch.h"#include<iostream>#include<opencv2\opencv.hpp>using namespace std;using namespace cv;cv::Mat img;cv:...原创 2019-06-12 00:07:02 · 2534 阅读 · 2 评论 -
OpenCV几个概念:dilate, erode, 开运算,闭运算
今天写程序的时候,差点把膨胀dilate的腐蚀erode弄反了。所以发个贴给自己备注一下。总结:膨胀dilate是白色的扩张,腐蚀erode是黑色的扩张;开运算=腐蚀>>膨胀,闭运算=膨胀>>腐蚀膨胀即是求局部最大值的操作,图像A与核B作卷积运算,计算核B覆盖区域的像素点的最大值,并把这个值赋值给锚点(anchor point)指定的像素。膨胀dilate针对白...原创 2019-02-14 22:36:53 · 2054 阅读 · 0 评论 -
SIFT算法相关的几个常见疑问
参考博客:SIFT算法的Matlab实现https://www.sun11.me/blog/2016/sift-implementation-in-matlab/SIFT特征详解https://www.cnblogs.com/wangguchangqing/p/4853263.html下面我列一下博客中讲到,但涉及源码时又不够透彻的地方(其实是否透彻还是取决于个人的经验和理解)用到...原创 2018-12-07 10:52:56 · 865 阅读 · 0 评论 -
OpenCV源码解析之在图片中找四边形-FindSquares
这个FindSquares算是比较典型的综合技能项目吧,用到的小技巧还不少,我们先看一下几个函数吧,函数static double angle的作用是求角度根据余弦定理:在平面座标中通过计算变换,最后可以得到:嗯,函数中直接用了这个结果。其余函数的说明1.函数Canny进行边缘检测,和Sobel原理差不多,不过相对加了些料,稍有点复杂,以后有时间再说吧。 2.函数...原创 2018-12-04 17:47:04 · 3114 阅读 · 1 评论 -
OpenCV源码解析:多尺度检测的训练trainCascade
(没时间一次性写完,更新中)该项目在Opencv Application的一部分,项目名称为opencv_trainCascade,它即可以用来训练lbp特征分类器,也可以是haar特征,有人说lbp特征训练起来更快,我没有专门比较过,不作评论;根据个人经验,lbp在很多场合会更稳定,所以我一般会选lbp特征。这里和检测(detectMultiScale)对应,这里我们仍然以汽车外形检测为例。...原创 2018-08-24 17:32:59 · 1177 阅读 · 1 评论 -
OpenCV源码解析:目标检测trainCascade算法剖析之LBP基础
本文重点讲解LBP特征及OpenCV中LBP特征的基本处理。目标检测,也叫目标提取,是一种基于目标几何和统计特征的图像分割。用级联分类器实现目标检测在AI人工智能识别中应用十分广泛。正样本的选取原则正样本的尺寸不是必须一致的,从源码可以看到,这个是可以在输入图片文件的尺寸时设置大小从而实现在CreateSamples中进行裁剪的(参考cvCreateTrainingSamplesF...原创 2018-10-27 12:40:19 · 1890 阅读 · 0 评论 -
OpenCv源码解析:对HAL硬件加速层的支持
OpenCV的硬件加速层全称是OpenCV Hardware Acceleration Layer (HAL),一般来说,硬件厂商或开发人员可能会根据自己的实际情况,开发出独立于OpenCV的运算函数,以支持硬件优化,加快运算速度。这些功能性模块有可能是闭源的。为了实现顺利对接,OpenCV提供了一个简单的接口模块,当各厂家需要开发自己的运算模块时,只要实现这些接口即可。根据【1】,OpenC...原创 2018-08-12 15:24:45 · 6382 阅读 · 0 评论 -
OpenCV源码详解之InputArray, OutputArray
在OpenCV中,有两个代理类是经常出现的:InputArray和OutputArray,它巧妙地利用了C++的定义转换,辅助完成对矩阵的管理。定义typedef const _InputArray& InputArray;typedef InputArray InputArrayOfArrays;typedef const _OutputArray& OutputA...原创 2018-12-12 20:05:49 · 12276 阅读 · 1 评论 -
OpenCV中,使用C++类的构造函数进行定义转换
OpenCV中采用了很多类似下面方式,在类的构造函数中动态进行定义转换#include "stdafx.h"class Mat {public: int val; void init() { val = 100; }};class holder{public: Mat* pMat; holder(Mat& test) { test.val = 101;...原创 2018-08-10 14:26:02 · 609 阅读 · 0 评论 -
OpenCV源码解析之基本数据类型操作与概念
Mat是何处理数据类型的在OpenCV中,矩阵在创建时,会传入一个数据类型,比如create函数要求传入_type; 然后,数据类型会被保存到flags中,create函数原型如下,inlinevoid Mat::create(int _rows, int _cols, int _type){ _type &= TYPE_MASK; if( dims <...原创 2018-08-09 10:07:02 · 792 阅读 · 0 评论 -
图像处理常识:内存中的图像宽度的计算
先说公式,sz对齐的到n位的计算方法是(sz + n-1) & -n;或者(sz + n-1) & ~n; 取决于系统要求,图像在内存中的存储,往往和原来的图片尺寸不一样,在windows图像宽度必须是bytes (32 bits) aligned,这里要注意的是sz和n的数据类型,因为他们决定了位数,比如int是32位的,最大只能32位长的数据。如果已...原创 2018-08-08 09:14:51 · 1973 阅读 · 0 评论 -
Visual Studio 2017中OpenCV源码解读入门篇:配置OpenCV3.4.1生成VC项目并进行编译
对于大多数程序猿,图像视频音频等的开发学习,其实最难的不是界面,也不是代码风格,而是算法。而要了解算法,有两条是必经之路,第一是对原理的理解,大部情况下,这是一个数学问题;第二条,就是对源码的解读,你必须 清楚地知道数学理论是如何变成代码,并最终产生想要的结果的。学习OpenCv,也是如此。不过从OpenCV提供的源码来看,跨平台确实考虑得比较全面。当然如果你习惯于其他操作系统,这些可能都不是...原创 2018-08-06 13:07:02 · 1947 阅读 · 7 评论 -
Visual Studio 2017下配置使用OpenCV3.4.1
安装OpenCV首先,到opencv.org上把opencv的windows包下载下来,我是一上去把就能下的几个全部down下来,免得以后要其他的还得再上来,如下,一个android包,一个ios包,windows下用的包就是这个:opencv-3.4.1-vc14_vc15.exe然后自己把这个包解压(安装)到你自己喜欢的目录,比如我自己的给目录名称就是D:\AOpencv,就是这个...原创 2018-08-06 10:07:21 · 5478 阅读 · 0 评论