
OpenCV从入门到转行
文章平均质量分 80
含OpenCV环境配置,像素操作,视频处理,图像特征提取、匹配与追踪,(双目)相机标定等入门内容。
-牧野-
这个作者很懒,什么都没留下…
展开
-
CUDA二维纹理内存+OpenCV图像滤波
CUDA和OpenCV混合编程,使用CUDA的纹理内存,实现图像的二值化以及滤波功能。#include #include #include using namespace cv;int width = 512;int height = 512;// 2维纹理texture texRef;// 核函数__global__ void transformKerne原创 2017-02-08 21:04:09 · 4043 阅读 · 2 评论 -
OpenCV绘制朱利亚(Julia)集合图形
朱利亚集合是一个在复平面上形成分形的点的集合。以法国数学家加斯顿·朱利亚(Gaston Julia)的名字命名。朱利亚集合可以由下式进行反复迭代得到:对于固定的复数c,取某一z值(如z = z0),可以得到序列 这一序列可能反散于无穷大或始终处于某一范围之内并收敛于某一值。我们将使其不扩散的z值的集合称为朱利亚集合。以下使用OpenCV编码绘制J原创 2017-02-03 20:50:20 · 5826 阅读 · 0 评论 -
OpenCV dll 源码调试—附加到进程
使用CMake可以生成OpenCV源码的解决方案,然后就可以对OpenCV函数进行修改,功能剪切等操作了,对这部分内容感兴趣的可以浏览一下上一篇文章:CMake生成OpenCV解决方案&&编译OpenCV源码自己修改过的函数实现可能有Bug,或者我们想跟踪查看DLL被别的程序调用时候的运行情况,这个时候就可以用到VS编译器的一个调试功能—“附加到进程”。例如对于OpenCV原创 2017-01-07 21:40:02 · 2959 阅读 · 0 评论 -
CMake生成OpenCV解决方案&&编译OpenCV源码
生成OpenCV工程需要用到CMake,所以第一步需要下载CMake软件,下载链接:CMake下载目前最新的版本是3.7.1,这里选择下载Platform下的Windows win32-x86 ZIP,大小21M:把下载完成的压缩包解压出来就可以了,不用安装。打开解压后的路径下…\cmake-3.7.1-win32-x86\bin\cmake-gui.exe,会弹出如下原创 2017-01-05 21:57:09 · 19752 阅读 · 5 评论 -
OpenCV图像修复
在OpenCV的“photo.hpp”中定义了一个inpaint函数,可以用来实现图像的修复和复原功能,inpaint函数的原型如下:void inpaint( InputArray src, InputArray inpaintMask, OutputArray dst, double inpaintRadius, int flags )原创 2016-12-21 23:13:45 · 14102 阅读 · 9 评论 -
OpenCV实现马赛克和毛玻璃滤镜效果
一、马赛克马赛克的实现原理是把图像上某个像素点一定范围邻域内的所有点用邻域内随机选取的一个像素点的颜色代替,这样可以模糊细节,但是可以保留大体的轮廓。以下OpenCV程序实现马赛克效果,通过鼠标左键在图像上划定马赛克的矩形框。#include #include using namespace cv;Mat imageSourceCopy; //原始图像Mat imageSo原创 2016-12-19 22:48:25 · 9102 阅读 · 2 评论 -
OpenCV图像增强算法实现(直方图均衡化、拉普拉斯、Log、Gamma)
1. 基于直方图均衡化的图像增强直方图均衡化是通过调整图像的灰阶分布,使得在0~255灰阶上的分布更加均衡,提高了图像的对比度,达到改善图像主观视觉效果的目的。对比度较低的图像适合使用直方图均衡化方法来增强图像细节。彩色图像的直方图均衡化实现:#include #include #include using namespace cv;int main原创 2016-12-15 23:46:19 · 98537 阅读 · 25 评论 -
OpenCV 图像白平衡算法(相机自动白平衡)
彩色相机内部有三个CCD电子耦合元件,分别用来感受红绿蓝三中颜色的光线,默认情况下,三个颜色的感光电路信号的放大比例是1:1:1的。在理想的拍摄环境下,纯白色的RGB分量按照1:1:1的比例放大之后,得到的是没有偏色的白色,当在非理想的环境光条件下,白色成像出来的效果会偏向环境光的颜色,而不是纯白色。相机的自动白平衡就是要通过改变RGB感光电路信号的放大比例,让受环境光影响的白色还原成原创 2016-12-09 22:50:49 · 37538 阅读 · 5 评论 -
OpenCV 图像清晰度评价(相机自动对焦)
相机的自动对焦要求相机根据拍摄环境和场景的变化,通过相机内部的微型驱动马达,自动调节相机镜头和CCD之间的距离,保证像平面正好投影到CCD的成像表面上。这时候物体的成像比较清晰,图像细节信息丰富。相机自动对焦的过程,其实就是对成像清晰度评价的过程,对焦不准确,拍摄出来的图像清晰度低,视觉效果模糊,如果是在工业检测测量领域,对焦不准导致的后果可能是致命的;对焦准确的图像清晰度较高,层次鲜原创 2016-12-09 20:33:08 · 71356 阅读 · 14 评论 -
双目相机标定以及立体测距原理及OpenCV实现
单目相机标定的目标是获取相机的内参和外参,内参(1/dx,1/dy,Cx,Cy,f)表征了相机的内部结构参数,外参是相机的旋转矩阵R和平移向量t。内参中dx和dy是相机单个感光单元芯片的长度和宽度,是一个物理尺寸,有时候会有dx=dy,这时候感光单元是一个正方形。Cx和Cy分别代表相机感光芯片的中心点在x和y方向上可能存在的偏移,因为芯片在安装到相机模组上的时候,由于制造精度和组装工艺的影响...原创 2016-10-31 22:59:24 · 40309 阅读 · 12 评论 -
OpenCV调试利器——Image Watch插件的安装和使用
各大编译工具在调试的时候都可以实时查看变量的值,了解变量值的变动情况,在图像处理相关的程序调试中,是否也可以实时查看内存中图像变量的图形信息以及图像上指定区域或点位的数值变化情况呢?在工业机器视觉领域应用广泛的Halcon中,提供了一个程序设计界面HDevelop,HDevelop中有一个图像窗口,可以很方便的观察到随着程序运行图形的变化情况;以及包含一个图像数据和控制数据的小窗口,可以监测到...原创 2016-10-31 20:49:32 · 6204 阅读 · 10 评论 -
张正友相机标定Opencv实现以及标定流程&&标定结果评价&&图像矫正流程解析(附标定程序和棋盘图)
使用Opencv实现张正友法相机标定之前,有几个问题事先要确认一下,那就是相机为什么需要标定,标定需要的输入和输出分别是哪些?相机标定的目的:获取摄像机的内参和外参矩阵(同时也会得到每一幅标定图像的选择和平移矩阵),内参和外参系数可以对之后相机拍摄的图像就进行矫正,得到畸变相对很小的图像。相机标定的输入:标定图像上所有内角点的图像坐标,标定板图像上所有内角点的空间三维坐标(一般情况下...原创 2016-10-27 01:09:24 · 153842 阅读 · 147 评论 -
Opencv 张正友相机标定傻瓜教程
注: 程序所用的OpenCV版本是 2.4.10 ,3.0以上的版本可能会有不同先贴一下完整的工程代码:#include "opencv2/core/core.hpp"#include "opencv2/imgproc/imgproc.hpp"#include "opencv2/calib3d/calib3d.hpp"#include "opencv2/highgui/highgui.hpp...原创 2016-10-26 00:41:01 · 48081 阅读 · 78 评论 -
Opencv目标跟踪—CamShift算法
CamShift算法全称是“Continuously Adaptive Mean-Shift”(连续的自适应MeanShift算法),是对MeanShift算法的改进算法,可以在跟踪的过程中随着目标大小的变化实时调整搜索窗口大小,对于视频序列中的每一帧还是采用MeanShift来寻找最优迭代结果,至于如何实现自动调整窗口大小的,可以查到的论述较少,我的理解是通过对MeanShift算法中零阶矩的判原创 2016-10-09 23:03:18 · 34745 阅读 · 10 评论 -
Opencv均值漂移pyrMeanShiftFiltering彩色图像分割流程剖析
meanShfit均值漂移算法是一种通用的聚类算法,它的基本原理是:对于给定的一定数量样本,任选其中一个样本,以该样本为中心点划定一个圆形区域,求取该圆形区域内样本的质心,即密度最大处的点,再以该点为中心继续执行上述迭代过程,直至最终收敛。可以利用均值偏移算法的这个特性,实现彩色图像分割,Opencv中对应的函数是pyrMeanShiftFiltering。这个函数严格来说并不是图像的分割,而原创 2016-09-29 23:52:36 · 36807 阅读 · 3 评论 -
使用Opencv中均值漂移meanShift跟踪移动目标
Mean Shift均值漂移算法是无参密度估计理论的一种,无参密度估计不需要事先知道对象的任何先验知识,完全依靠训练数据进行估计,并且可以用于任意形状的密度估计,在某一连续点处的密度函数值可由该点邻域中的若干样本点估计得出。Mean shift将特征空间视为先验概率密度函数,那么输入就被视为是一组满足某种概率分布的样本点,这样一来,特征空间中数据最密集的地方,对应于概率密度最大的地方,且概率密原创 2016-09-28 23:02:50 · 9645 阅读 · 0 评论 -
Opencv光流运动物体追踪
光流的概念是由一个叫Gibson的哥们在1950年提出来的。它描述是空间运动物体在观察成像平面上的像素运动的瞬时速度,利用图像序列中像素在时间域上的变化以及相邻帧之间的相关性来找到上一帧跟当前帧之间存在的对应关系,从而计算出相邻帧之间物体的运动信息的一种方法。那么所说的光流到底是什么鬼?简单来说,上图表现的就是光流,光流描述的是图像上每个像素点的灰度的位置(速度)变化情况,光流的研究是原创 2016-09-27 20:53:51 · 9079 阅读 · 0 评论 -
Opencv 使用Stitcher类图像拼接生成全景图像
Opencv中自带的Stitcher类可以实现全景图像,效果挺不错。下边的例子是Opencv Samples中的stitching.cpp的简化,源文件可以在这个路径里找到:\opencv\sources\samples\cpp\stitching.cpp#include #include "opencv2/highgui/highgui.hpp"#include "openc原创 2016-09-24 21:16:04 · 22008 阅读 · 13 评论 -
Opencv Sift和Surf特征实现图像无缝拼接生成全景图像
环境: OpenCV2.4.13+VS2012Sift和Surf算法实现两幅图像拼接的过程是一样的,主要分为4大部分:1. 特征点提取和描述2. 特征点配对,找到两幅图像中匹配点的位置3. 通过配对点,生成变换矩阵,并对图像1应用变换矩阵生成对图像2的映射图像4. 图像2拼接到映射图像上,完成拼接过程1、2、3没啥好说的了,关键看看步骤4中的拼接部分。这里先...原创 2016-09-23 00:11:00 · 51600 阅读 · 32 评论 -
Opencv中使用Surf特征实现图像配准及对透视变换矩阵H的平移修正
图像配准需要将一张测试图片按照第二张基准图片的尺寸、角度等形态信息进行透视(仿射)变换匹配,本例通过Surf特征的定位和匹配实现图像配准。配准流程:1. 提取两幅图像的Surf特征2. 对Surf特征进行匹配,找到最匹配的特征点对3. 提取最优配对点的坐标,生成透视变换矩阵4. 对测试图像经过透视变换,生成配准图像以下是Opencv代原创 2016-09-22 22:57:16 · 19987 阅读 · 9 评论 -
Opencv Surf算子中keyPoints,描述子Mat矩阵,配对向量DMatch里都包含了哪些好玩的东东?
Surf算法是一把牛刀,我们可以很轻易的从网上或各种Opencv教程里找到Surf的用例,把例程中的代码或贴或敲过来,满心期待的按下F5,当屏幕终于被满屏花花绿绿的小圆点或者N多道连接线条霸占时,内心的民族自豪感油然而生,仿佛屠龙宝刀在手,屁颠屁颠的很开心。如果对Surf的探究或者使用到此为止,我觉得只是用Surf这把牛刀吓唬了一个小鸡仔,万里长征才刚刚开始第一步,最少有三个问题需...原创 2016-09-21 23:18:49 · 8963 阅读 · 10 评论 -
Opencv Surf算子特征提取与最优匹配
Opencv中Surf算子提取特征,生成特征描述子,匹配特征的流程跟Sift是完全一致的,这里主要介绍一下整个过程中需要使用到的主要的几个Opencv方法。1. 特征提取特征提取使用SurfFeatureDetector类中的detect方法,先定义一个SurfFeatureDetector类的对象,通过对象调用detect方法就可以提取输入图像的Surf特征。可以使用不带原创 2016-09-21 01:25:33 · 24863 阅读 · 10 评论 -
Surf算法特征点检测与匹配
Speeded Up Robust Features(SURF,加速稳健特征),是一种稳健的局部特征点检测和描述算法。最初由Herbert Bay发表在2006年的欧洲计算机视觉国际会议(Europen Conference on Computer Vision,ECCV)上,并在2008年正式发表在Computer Vision and Image Understanding期刊上。Surf原创 2016-09-20 23:53:54 · 114724 阅读 · 24 评论 -
Opencv中integral计算积分图
Paul Viola和Michael Jones在2001年首次将积分图应用在图像特征提取上,在他们的论文“Rapid Object Detection using a Boosted Cascade of Simple Features”中,积分图被当作一种新的图像特征表征方式,可以把检测的Haar特征非常高效的计算出来,用于实时人脸检测系统。积分图是一种能够描述全局信息的矩阵表示方法,其构造方...原创 2016-09-19 22:44:28 · 15709 阅读 · 7 评论 -
Opencv Sift算子特征提取与匹配
SIFT算法的过程实质是在不同尺度空间上查找特征点(关键点),用方向向量的方式对特征点进行描述,最后通过对比描述向量实现目标匹配。概括起来主要有三大步骤:1、提取关键点;2、对关键点附加详细的信息(局部特征)也就是所谓的描述器;3、通过两方特征点(附带上特征向量的关键点)的两两比较找出相互匹配的若干对特征点,建立物体间的对应关系。 Opencv中Sift算子的特征提原创 2016-09-18 22:30:44 · 24751 阅读 · 11 评论 -
FAST特征点检测&&KeyPoint类
FAST特征点检测算法由E.Rosten和T.Drummond在2006年在其论文“Machine Learning for High-speed Corner Detection”中首次提出。英文全称是“Features from Accelerated Segment Test”,可以翻译成“基于加速分割测试的特征”。从论文名字可以看出FAST是一种高效的特征点(角点)检测算法,基本上可以满原创 2016-09-16 07:41:04 · 9046 阅读 · 0 评论 -
goodFeaturesToTrack——Shi-Tomasi角点检测
J.Shi和C.Tomasi在1994年在其论文“Good Features to Track”中,提出了一种对Harris角点检测算子的改进算法——Shi-Tomasi角点检测算子,可以看到,Opencv中函数goodFeaturesToTrack就是直接取自他们论文的名字。goodFeaturesToTrack有比cornerHarris更多的控制参数,函数原型:void go原创 2016-09-15 23:32:21 · 15817 阅读 · 5 评论 -
Harris角点检测
Harris角点检测算子是对Moravec角点检测算子的改进。Moravec角点检测算子通过一个(2*N+1)*(2*N+1)的窗口在图像中逐像素滑动,计算原图像与滑动后图像的像素间的距离和来定义灰度的变化大小,包含了水平、垂直还有4个对角线方向一共8个方向上的移动。Harris扩展了检测方向,检测结果具有旋转不变性;对滑块窗口使用了高斯系数,对离中心越近的点赋予更高的权重,以增强对噪声的原创 2016-09-15 22:16:58 · 3010 阅读 · 2 评论 -
使用Opencv中matchTemplate模板匹配方法跟踪移动目标
模板匹配是一种在图像中定位目标的方法,通过把输入图像在实际图像上逐像素点滑动,计算特征相似性,以此来判断当前滑块图像所在位置是目标图像的概率。在Opencv中,模板匹配定义了6种相似性对比方式: CV_TM_SQDIFF 平方差匹配法:计算图像像素间的距离之和,最好的匹配是0,值越大,是目标的概率就越低。 CV_TM_CCORR 相关匹配法:一种乘法操作;数值从小到大,匹配原创 2016-09-15 09:39:25 · 14795 阅读 · 7 评论 -
Opencv在视频中静态、动态方式绘制矩形框ROI
Opencv视频处理中的目标跟踪经常用到要在视频上画一个矩形框ROI,标注出要跟踪的物体,这里介绍两种在视频中绘制矩形框的方法,一种是“静态的”,一种是“动态的”。静态的是指在绘制过程中,视频暂停播放,画面定格在鼠标左键单击上去时候播放的画面,这时候按着鼠标左键并拖动出一个感兴趣的区域,鼠标左键抬起完成矩形框的绘制。在整个绘制过程中,矩形是连续显示出来的,跟随鼠标位置变化而变化。过原创 2016-09-14 20:00:06 · 13014 阅读 · 2 评论 -
Opencv距离变换distanceTransform应用——细化字符轮廓&&查找物体质心
Opencv中distanceTransform方法用于计算图像中每一个非零点距离离自己最近的零点的距离,distanceTransform的第二个Mat矩阵参数dst保存了每一个点与最近的零点的距离信息,图像上越亮的点,代表了离零点的距离越远。可以根据距离变换的这个性质,经过简单的运算,用于细化物体的轮廓和查找物体质心(中心)。一、细化轮廓#include "原创 2016-09-12 22:09:44 · 22515 阅读 · 5 评论 -
Opencv分水岭算法——watershed自动图像分割用法
分水岭算法是一种图像区域分割法,在分割的过程中,它会把跟临近像素间的相似性作为重要的参考依据,从而将在空间位置上相近并且灰度值相近的像素点互相连接起来构成一个封闭的轮廓,封闭性是分水岭算法的一个重要特征。其他图像分割方法,如阈值,边缘检测等都不会考虑像素在空间关系上的相似性和封闭性这一概念,彼此像素间互相独立,没有统一性。分水岭算法较其他分割方法更具有思想性,更符合人眼对图像的印象。其他关原创 2016-09-11 00:40:26 · 89419 阅读 · 7 评论 -
Opencv中Mat矩阵相乘——点乘、dot、mul运算详解
Mat矩阵点乘——A*BOpencv重载了运算符“*”,姑且称之为Mat矩阵“点乘”,其中一个重载声明为:CV_EXPORTS MatExpr operator * (const Mat& a, const Mat& b);点乘说明:1. A*B是以数学运算中矩阵相乘的方式实现的,即Mat矩阵A和B被当做纯粹的矩阵做乘法运算,这就要求A的列数等原创 2016-09-02 00:00:36 · 166486 阅读 · 16 评论 -
Opencv Mat矩阵中data、size、depth、elemSize、step等属性的理解
data: uchar类型的指针,指向Mat数据矩阵的首地址。可以理解为标示一个房屋的门牌号;dims: Mat矩阵的维度,若Mat是一个二维矩阵,则dims=2,三维则dims=3,大多数情况下处理的都是二维矩阵,是一 个平面上的矩阵。 可以理解为房屋是一个一层的平房,三维或更多维的则是多层楼房原创 2016-08-23 21:44:36 · 86953 阅读 · 9 评论 -
Opencv绘制最小外接矩形、最小外接圆
Opencv中求点集的最小外结矩使用方法minAreaRect,求点集的最小外接圆使用方法minEnclosingCircle。minAreaRect方法原型:RotatedRect minAreaRect( InputArray points );输入参数points是所要求最小外结矩的点集数组或向量;minEnclosingCircle方法原型:vo原创 2016-08-20 12:43:45 · 52972 阅读 · 6 评论 -
findContours函数参数详解
注: 这篇文章用的OpenCV版本是2.4.10, 3以上的OpenCV版本相关函数可能有改动Opencv中通过使用findContours函数,简单几个的步骤就可以检测出物体的轮廓,很方便。这些准备继续探讨一下findContours方法中各参数的含义及用法,比如要求只检测最外层轮廓该怎么办?contours里边的数据结构是怎样的?hierarchy到底是什么鬼?Point()有什么用?先从fi...原创 2016-08-19 21:54:17 · 239181 阅读 · 35 评论 -
findContours 轮廓查找
物体的轮廓勾勒出了物体的整体形状,物体形状的边界像素一起组合成了轮廓。灰度图像边界的明显特征是边界两侧灰度级的突变,根据这个特征,使用Sobel、拉普拉斯或Canny之类的边缘检测算子可以有效的检测到物体的边界,所有连续的边界像素组合在一起成为一个整体,就构成了物体的轮廓。轮廓检测可以使用findContours函数,检测步骤是:1. 使用拉普拉斯或Canny等边缘检测算子处理图像,获得仅包含边界的二值图像。2. 使用findContorus方法,获取图像所有的边界连续像素序列,并保存在con原创 2016-08-18 23:38:17 · 9372 阅读 · 0 评论 -
Opencv保存摄像头视频&&各种编码器下视频文件占用空间对比
打开视频文件或摄像头视频需要使用Opencv中的VideoCapture类,保存视频或摄像头视频到本地磁盘,需要使用Opencv中的VideoWriter类,使用都很简单,这篇文章就记录一下VideoWriter类的用法,主要关注一下VideoWriter在不同编码方式下保存视频文件大小的区别。VideoWriter类的一个常用构造方式如下:VideoWriter(const st原创 2016-08-16 00:05:49 · 14389 阅读 · 6 评论 -
Opencv打开内置摄像头
Opencv中VideoCapture是专门用来处理视频文件或者摄像头视频流的类,详细的说明和用法可以参考Opencv2.4.13的说明文档:点击打开链接使用VideoCapture打开内置摄像头的例子:#include #include #include using namespace cv; int main(int argc,char *arg原创 2016-08-13 20:31:17 · 14057 阅读 · 2 评论 -
Opencv:10个步骤检测出图片中条形码
10个步骤找到图片中条形码:1. 原图像大小调整,提高运算效率2. 转化为灰度图3. 高斯平滑滤波4.求得水平和垂直方向灰度图像的梯度差,使用Sobel算子5.均值滤波,消除高频噪声6.二值化7.闭运算,填充条形码间隙8. 腐蚀,去除孤立的点原创 2016-08-02 16:29:50 · 25183 阅读 · 5 评论