opencv
淡淡的生活
计算机视觉菜鸟
展开
-
从零使用OpenCV快速实现简单车牌识别系统
这篇文章献给所有第一次听说车牌识别ANPR但需要短时间实现的苦逼同学们。 最近的小学期实训做的是一个车牌识别系统,说实话真不知道学校怎么想的,虽然说图像处理也算的上是数字媒体很重要的一块分支了,但咱这几年学的全是图形渲染啊。图形与图像虽然只差了一个字,但内容真是差了十万八千里了(当然这话是夸张了,事实上在使用shader进行特效渲染的最后一步往往都是在做图像处理,如Bloom, Outli转载 2013-06-26 17:01:15 · 18201 阅读 · 18 评论 -
金字塔Lucas-Kanade稀疏光流
光流分为稀疏光流和稠密光流,稠密光流的每个像素与速度或者可以说是与位移相关,使用稠密光流得以跟踪运动的方法有Horn-Shrunk方法,还有块匹配方法,但是现在已经很少使用到了,这里不做介绍,稠密光流需要使用某种插值方法在比较容易跟踪的像素之间进行插值以解决那些运动不明确的像素,因此可想而知,计算量是相当大的。而对于稀疏光流来说,在他计算时需要在被跟踪之前指定一组点(角点),因此在使用LK方法转载 2013-04-22 11:20:02 · 3499 阅读 · 0 评论 -
opencv c++函数 imgproc模块 17 直方图对比
目标本文档尝试解答如下问题:如何使用OpenCV函数 compareHist 产生一个表达两个直方图的相似度的数值。如何使用不同的对比标准来对直方图进行比较。原理要比较两个直方图( and ), 首先必须要选择一个衡量直方图相似度的 对比标准 () 。OpenCV 函数 compareHist 执行了具体的直方图对比的任务。该函数转载 2013-04-26 17:58:02 · 1312 阅读 · 0 评论 -
opencv c++函数 imgproc模块 14 仿射变换
目标在这个教程中你将学习到如何:使用OpenCV函数 warpAffine 来实现一些简单的重映射.使用OpenCV函数 getRotationMatrix2D 来获得一个 旋转矩阵原理什么是仿射变换?一个任意的仿射变换都能表示为 乘以一个矩阵 (线性变换) 接着再 加上一个向量 (平移).综上所述, 我们能够用仿射变换来表示:转载 2013-04-26 17:39:52 · 2186 阅读 · 0 评论 -
opencv c++函数 imgproc模块 6 实现自己的线性滤波器
目的本篇教程中,我们将学到:用OpenCV函数 filter2D 创建自己的线性滤波器。原理Note 以下解释节选自Bradski and Kaehler所著 Learning OpenCV 。卷积高度概括地说,卷积是在每一个图像块与某个算子(核)之间进行的运算。核是什么?核说白了就是一个固定大小的数值转载 2013-04-26 16:41:10 · 1315 阅读 · 0 评论 -
opencv c++函数 imgproc模块2 腐蚀与膨胀(Eroding and Dilating)
目标本文档尝试解答如下问题:如何使用OpenCV提供的两种最基本的形态学操作,腐蚀与膨胀( Erosion 与 Dilation):erodedilate原理Note 以下内容来自于Bradski和Kaehler的大作: Learning OpenCV .形态学操作简单来讲,形态学操作就是基于形状的一系列图像处转载 2013-04-26 16:16:18 · 2059 阅读 · 0 评论 -
opencv c++函数 imgproc模块 16 直方图计算
目标本文档尝试解答如下问题:如何使用OpenCV函数 split 将图像分割成单通道数组。如何使用OpenCV函数 calcHist 计算图像阵列的直方图。如何使用OpenCV函数 normalize 归一化数组。Note 在上一篇中 (直方图均衡化) 我们介绍了一种特殊直方图叫做 图像直方图 。现在我们从更加广义的角度来考虑直方图的概念,继续往下读!转载 2013-04-26 17:51:21 · 1638 阅读 · 0 评论 -
opencv c++函数 imgproc模块 15 直方图均衡化
目标在这个教程中你将学到:什么是图像的直方图和为什么图像的直方图很有用用OpenCV函数 equalizeHist 对图像进行直方图均衡化原理图像的直方图是什么?直方图是图像中像素强度分布的图形表达方式.它统计了每一个强度值所具有的像素个数.直方图均衡化是什么?直方图均衡化是通过拉伸像素强度分布范围来增强图转载 2013-04-26 17:48:48 · 1655 阅读 · 0 评论 -
opencv c++函数 imgproc模块 10 Canny 边缘检测
目标本文档尝试解答如下问题:使用OpenCV函数 Canny 检测边缘.原理Canny 边缘检测算法 是 John F. Canny 于 1986年开发出来的一个多级边缘检测算法,也被很多人认为是边缘检测的 最优算法, 最优边缘检测的三个主要评价标准是:低错误率: 标识出尽可能多的实际边缘,同时尽可能的减少噪声产生的误报。高定位性: 标识出的转载 2013-04-26 16:51:32 · 2111 阅读 · 0 评论 -
opencv c++函数 imgproc模块 9 Laplace 算子
目标本文档尝试解答如下问题:如何使用OpenCV函数 Laplacian 实现 Laplacian 算子 的离散模拟。原理前一节我们学习了 Sobel 算子 ,其基础来自于一个事实,即在边缘部分,像素值出现”跳跃“或者较大的变化。如果在此边缘部分求取一阶导数,你会看到极值的出现。正如下图所示:如果在边缘部分求二阶导数会出现什么情况?转载 2013-04-26 16:49:35 · 1601 阅读 · 0 评论 -
opencv c++函数 imgproc模块 8 Sobel 导数
目标本文档尝试解答如下问题:如何使用OpenCV函数 Sobel 对图像求导。如何使用OpenCV函数 Scharr 更准确地计算 核的导数。原理Note 以下内容来自于Bradski和Kaehler的大作: Learning OpenCV .上面两节我们已经学习了卷积操作。一个最重要的卷积运算就是导数的计算(或者近似计算)转载 2013-04-26 16:48:00 · 1891 阅读 · 0 评论 -
opencv c++函数 imgproc模块 20 在图像中寻找轮廓
目标在这个教程中你将学到如何:使用OpenCV函数 findContours使用OpenCV函数 drawContours原理例程教程的代码在下面给出. 你也可以从 这里 下载#include "opencv2/highgui/highgui.hpp"#include "opencv2/imgproc/imgproc.hpp"转载 2013-05-03 14:30:34 · 1388 阅读 · 0 评论 -
opencv c++函数 imgproc模块 22 创建包围轮廓的矩形和圆形边界框
目标在这节教程中您将学到:使用OpenCV函数 boundingRect 来计算包围轮廓的矩形框.使用OpenCV函数 minEnclosingCircle 来计算完全包围已有轮廓最小圆.原理代码下面是本节教程源码. 你也可以从 这里 下载.#include "opencv2/highgui/highgui.hpp"#inclu转载 2013-05-03 14:35:24 · 1826 阅读 · 0 评论 -
opencv 形状分析
OpenCV支持大量的轮廓、边缘、边界的相关函数,相应的函数有moments、HuMoments、findContours、drawContours、approxPolyDP、arcLength、boundingRect、contourArea、convexHull、fitEllipse、fitLine、isContourConvex、minAreaRect、minEnclosingCircle、转载 2013-06-25 16:30:43 · 2199 阅读 · 0 评论 -
光流Optical Flow介绍与OpenCV实现
光流Optical Flow介绍与OpenCV实现转自:http://blog.csdn.net/zouxy09 光流(optic flow)是什么呢?名字很专业,感觉很陌生,但本质上,我们是最熟悉不过的了。因为这种视觉现象我们每天都在经历。从本质上说,光流就是你在这个运动着的世界里感觉到的明显的视觉运动(呵呵,相对论,没有绝对的静止,也没有绝对的运动)。例如转载 2013-05-17 17:28:19 · 1912 阅读 · 0 评论 -
opencv c++函数 highgui模块 1 为程序界面添加滑动条
在以前的教程中 (例如 linear blending 和 brightness and contrast adjustments)你有可能注意到需要 input 一些数值到我们的程序中, 例如 和 。我们会在代码中输入这些数据来配合程序的运行。好, 下面来介绍所要用到的一个 GUI 中的工具. OpenCV 提供的 GUI 库在(highgui.h)里. 这是一个 滑动条 的样子转载 2013-05-03 14:44:36 · 1533 阅读 · 0 评论 -
opencv c++函数 imgproc模块 24 多边形测试
目的本教程指导用户:使用OpenCV函数 pointPolygonTest理论代码本教程代码如下所示. 用户也可以点击 这里下载#include "opencv2/highgui/highgui.hpp"#include "opencv2/imgproc/imgproc.hpp"#include #include #inc转载 2013-05-03 14:40:29 · 1154 阅读 · 0 评论 -
opencv c++函数 imgproc模块 23 轮廓矩
目标在这节教程中您将学到:使用OpenCV函数 moments 计算图像所有的矩(最高到3阶)使用OpenCV函数 contourArea 来计算轮廓面积使用OpenCV函数 arcLength 来计算轮廓或曲线长度原理代码下面是本节教程源码. 你也可以从 这里 下载.#include "opencv2/highgui/highg转载 2013-05-03 14:37:19 · 1567 阅读 · 0 评论 -
opencv c++函数 imgproc模块 21 计算物体的凸包
目标在这个教程中你将学习到如何:使用OpenCV函数 convexHull原理例程教程的代码在下面给出. 你也可以从 这里 下载 #include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" #include #include转载 2013-05-03 14:32:08 · 1178 阅读 · 0 评论 -
opencv c++函数 imgproc模块 19 模板匹配
目标在这节教程中您将学到:使用OpenCV函数 matchTemplate 在模板块和输入图像之间寻找匹配,获得匹配结果图像使用OpenCV函数 minMaxLoc 在给定的矩阵中寻找最大和最小值(包括它们的位置).原理什么是模板匹配?模板匹配是一项在一幅图像中寻找与另一幅模板图像最匹配(相似)部分的技术.它是怎么实现的?转载 2013-05-03 14:23:15 · 1654 阅读 · 0 评论 -
opencv c++函数 imgproc模块 18 反向投影
目标本文档尝试解答如下问题:什么是反向投影,它可以实现什么功能?如何使用OpenCV函数 calcBackProject 计算反向投影?如何使用OpenCV函数 mixChannels 组合图像的不同通道?原理什么是反向投影?反向投影是一种记录给定图像中的像素点如何适应直方图模型像素分布的方式。简单的讲, 所谓反向投影就是首先计算某一特征转载 2013-05-03 14:13:09 · 1493 阅读 · 0 评论 -
opencv c++函数 highgui模块 3
目标你可能已经不满足于读取视频,还想要将你产生的一系列结果保存到一个新建的视频文件中。使用OpenCV中的 VideoWriter 类就可以简单的完成创建视频的工作。在接下来的教程中,我们将告诉你:如何用OpenCV创建一个视频文件用OpenCV能创建什么样的视频文件如何释放视频文件当中的某个颜色通道为了使例子简单,我就仅仅释放原始视频RGB通道中的一个,并把它放入新视频文转载 2013-05-03 14:53:24 · 1866 阅读 · 0 评论 -
opencv c++函数 highgui模块 2 OpenCV的视频输入和相似度测量
目标现在找一个能拍摄视频的设备真是太容易了。结果大家都用视频来代替以前的序列图像。视频可能由两种形式得到,一个是像网络摄像头那样实时视频流,或者由其他设备产生的压缩编码后的视频文件。幸运的是,OpenCV可以使用相同的C++类、用同一种方式处理这些视频信息。在接下来的教程里你将学习如何使用摄像头或者视频文件。如何打开和读取视频流两种检查相似度的方法:PSNR和SSIM转载 2013-05-03 14:51:46 · 2273 阅读 · 1 评论 -
opencv c++函数 imgproc模块 4 图像金字塔
目标本文档尝试解答如下问题:如何使用OpenCV函数 pyrUp 和 pyrDown 对图像进行向上和向下采样。原理Note 以下内容来自于Bradski和Kaehler的大作: Learning OpenCV 。当我们需要将图像转换到另一个尺寸的时候, 有两种可能:放大 图像 或者缩小 图像。尽管OpenCV 几转载 2013-04-26 16:30:43 · 1622 阅读 · 0 评论 -
opencv c++函数 imgproc模块1 图像平滑处理
目标本教程教您怎样使用各种线性滤波器对图像进行平滑处理,相关OpenCV函数如下:blurGaussianBlurmedianBlurbilateralFilter原理Note 以下原理来源于Richard Szeliski 的著作 Computer Vision: Algorithms and Applications 以及 Learnin转载 2013-04-26 16:11:50 · 1525 阅读 · 0 评论 -
opencv c++函数 基础5 改变图像的对比度和亮度
目的本篇教程中,你将学到:访问像素值用0初始化矩阵saturate_cast 是做什么用的,以及它为什么有用一些有关像素变换的精彩内容原理Note 以下解释节选自Richard Szeliski所著 Computer Vision: Algorithms and Applications图像处理一般来说,图像处理算转载 2013-04-25 13:20:53 · 1314 阅读 · 0 评论 -
opencv c++函数 基础3 矩阵的掩码操作
矩阵的掩码操作很简单。其思想是:根据掩码矩阵(也称作核)重新计算图像中每个像素的值。掩码矩阵中的值表示近邻像素值(包括该像素自身的值)对新像素值有多大影响。从数学观点看,我们用自己设置的权值,对像素邻域内的值做了个加权平均。测试用例思考一下图像对比度增强的问题。我们可以对图像的每个像素应用下面的公式:上面那种表达法是公式的形式,而下面那种是以掩码矩阵表示的紧凑形转载 2013-04-25 13:10:46 · 1279 阅读 · 0 评论 -
opencv c++函数 基础1 Mat基本图像容器
Mat在2001年刚刚出现的时候,OpenCV基于 C 语言接口而建。为了在内存(memory)中存放图像,当时采用名为 IplImage 的C语言结构体,时至今日这仍出现在大多数的旧版教程和教学材料。但这种方法必须接受C语言所有的不足,这其中最大的不足要数手动内存管理,其依据是用户要为开辟和销毁内存负责。虽然对于小型的程序来说手动管理内存不是问题,但一旦代码开始变得越来越庞大,你需要越来越多转载 2013-04-25 12:12:38 · 1652 阅读 · 0 评论 -
opencv c++函数 基础2 OpenCV如何扫描图像、利用查找表和计时
目的我们将探索以下问题的答案:如何遍历图像中的每一个像素?OpenCV的矩阵值是如何存储的?如何测试我们所实现算法的性能?查找表是什么?为什么要用它?测试用例这里我们测试的,是一种简单的颜色缩减方法。如果矩阵元素存储的是单通道像素,使用C或C++的无符号字符类型,那么像素可有256个不同值。但若是三通道图像,这种存储格式的颜色数就太多了(确切地说,有一千六百转载 2013-04-25 12:46:46 · 1364 阅读 · 0 评论 -
hog源码分析
作者:tornadomeet 出处:http://www.cnblogs.com/tornadomeet 欢迎转载或分享,但请务必声明文章出处。一、网上一些参考资料 在博客目标检测学习_1(用opencv自带hog实现行人检测) 中已经使用了opencv自带的函数detectMultiScale()实现了对行人的检测,当然了,该算法采用的是hog算法,那么h转载 2013-04-15 16:27:37 · 1914 阅读 · 0 评论 -
opencv中HOGDescriptor类说明
来自:http://blog.csdn.net/raocong2010/article/details/6239431最近要做图像特征提取,可能要用下HOG特征,所以研究了下OpenCV的HOG描述子。OpenCV中的HOG特征提取功能使用了HOGDescriptor这个类来进行封装,其中也有现成的行人检测的接口。然而,无论是OpenCV官方说明文档还是各个中英文网站目前都没有这个类的使用转载 2013-04-15 16:49:39 · 2721 阅读 · 0 评论 -
sift算法
作者:tornadomeet 出处:http://www.cnblogs.com/tornadomeet 欢迎转载或分享,但请务必声明文章出处。sift算法在cv领域的重要性不言而喻,该作者的文章引用率在cv界是number1.本篇博客只是本人把sift算法知识点整理了下,以免忘记。本文比较早的一篇博文opencv源码解析之(3):特征点检查前言1 中有使用opencv自带的sif转载 2013-04-15 16:33:55 · 2219 阅读 · 0 评论 -
surf算法
作者:tornadomeet 出处:http://www.cnblogs.com/tornadomeet 欢迎转载或分享,但请务必声明文章出处。在上篇博客特征点检测学习_1(sift算法) 中简单介绍了经典的sift算法,sift算法比较稳定,检测到的特征点也比较多,其最大的确定是计算复杂度较高。后面有不少学者对其进行了改进,其中比较出名的就是本文要介绍的surf算法,surf的中转载 2013-04-15 16:35:30 · 2364 阅读 · 2 评论 -
opencv中的surf和sift
作者:tornadomeet 出处:http://www.cnblogs.com/tornadomeet 欢迎转载或分享,但请务必声明文章出处。因为最近准备看特征点检查方面的源码,而其中最著名的算法就是sift和surf。因此这次主要是学会怎样使用opencv中的sift和surf函数来检测特征点和描述特征点,以及怎样使用其算法来进行特征点匹配。庆幸的是,sift算法虽然是专利,但转载 2013-04-15 16:38:10 · 20543 阅读 · 10 评论 -
camshift跟踪算法介绍
转载自:http://blog.csdn.net/carson2005/article/details/7439125CamShift算法的全称是"Continuously Adaptive Mean-SHIFT",即:连续自适应的MeanShift算法。其基本思想是对视频序列的所有图像帧都作MeanShift运算,并将上一帧的结果(即搜索窗口的中心位置和窗口大小)作为下一帧MeanShi转载 2013-04-23 10:23:09 · 3022 阅读 · 0 评论 -
opencv c++函数 基础7 随机数发生器&绘制文字
目的本节你将学到:使用 随机数发生器类 (RNG) 并得到均匀分布的随机数。通过使用函数 putText 显示文字。代码在之前的章节中 (基本绘图) 我们绘制过不同的几何图形, 我提供了一些绘制参数,比如 coordinates(坐标) (在绘制点 Points 的时候 ), color(颜色), thickness(线条-粗细,点-大小),转载 2013-04-25 13:40:21 · 1807 阅读 · 0 评论 -
opencv c++函数 基础4 使用OpenCV对两幅图像求和(求混合(blending))
目的在这节教程中您将学到线性混合 (linear blending) 是什么以及有什么用处.如何使用 addWeighted 进行两幅图像求和原理Note 以下解释基于Richard Szeliski所著 Computer Vision: Algorithms and Applications在前面的教程中,我们已经了解一点 像素操作转载 2013-04-25 13:14:14 · 2076 阅读 · 0 评论 -
opencv c++函数 imgproc模块 13 Remapping 重映射
目标本教程向你展示如何使用OpenCV函数 remap 来实现简单重映射.理论重映射是什么意思?把一个图像中一个位置的像素放置到另一个图片指定位置的过程.为了完成映射过程, 有必要获得一些插值为非整数像素坐标,因为源图像与目标图像的像素坐标不是一一对应的.我们通过重映射来表达每个像素的位置 :这里 是目标图像, 是源转载 2013-04-26 17:31:12 · 1952 阅读 · 0 评论 -
opencv c++函数 imgproc模块 5 基本的阈值操作
目标:本节简介:OpenCV中的阈值(threshold)函数: threshold 的运用。基本理论:注意:本节的解释出自Bradski与Kaehler的书籍 Learning OpenCV 。什么是阈值?最简单的图像分割的方法。应用举例:从一副图像中利用阈值分割出我们需要的物体部分(当然这里的物体可以是一部分或者整体)转载 2013-04-26 16:35:32 · 1446 阅读 · 0 评论 -
opencv c++函数 imgproc模块 12 霍夫圆变换
目标在这个教程中你将学习如何:使用OpenCV函数 HoughCircles 在图像中检测圆.原理霍夫圆变换霍夫圆变换的基本原理和上个教程中提到的霍夫线变换类似, 只是点对应的二维极径极角空间被三维的圆心点x, y还有半径r空间取代.对直线来说, 一条直线能由参数极径极角 表示. 而对圆来说, 我们需要三个参数来表示一个圆, 如上文转载 2013-04-26 17:25:51 · 2151 阅读 · 0 评论