![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
OpenCV/OpenGL/Graphics/VR/AR
红鲤鱼遇绿鲤鱼
只要思想不滑坡,办法总比困难多~
展开
-
Kitchen-Rosenfeld 角点检测算法 源码&实现
原理与代码来自opencv源码与opencv源码分析原理:这算法基本上属于古董级别的论文了,最初在一篇论文的摘要当中发现的,搜了很久才知道在opencv当中已有实现,弄到了一些资料了解了一番。其实,研究一下特征点检测的原始思想对于特征检测的和特征工程还是非常有帮助的,该篇论文发表于1982年,比我本人岁数还大了十几岁-_-论文下载链接如下https://pan.baidu.com/s/1k...原创 2018-12-17 17:36:34 · 1446 阅读 · 1 评论 -
python opencv入门 BRIEF算法(36)
内容来自OpenCV-Python Tutorials 自己翻译整理目标:了解BRIEF算法的基本原理原理:在SIFT算法使用128维的描述符,因为使用float类型描述,所以需要512字节的内存。 在SURF算法中,以64维描述符来计算,至少需要256字节的内存。 在创建一个含有数千个特征的向量会消耗大量的内存,这种情况在资源的有限的设备上不实用,尤其是嵌入式设备。 此外,计...原创 2018-03-18 23:59:06 · 2531 阅读 · 0 评论 -
python opencv入门 FAST算法(35)
内容来自OpenCV-Python Tutorials 自己翻译整理目标: 学习FAST算法的基本原理 使用opencv中的FAST算法寻找角点原理:之前学习到的一些特征点探测算法效果都很好,但是在实际使用当中速度不够快。一个最好的例子就是SLAM(同步定位与地图构建),运动状态的机器人对计算资源要求有不小的限制。为了解决此问题,两个科学家提出了FAST算法,详细内弄可以参考原...原创 2018-03-09 00:30:18 · 5441 阅读 · 0 评论 -
python opencv入门 SURF算法(34)
内容来自OpenCV-Python Tutorials 自己翻译整理目标:SURF算法基础 opencv总SURF算法的使用原理:上节课使用了SIFT算法,当时这种算法效率不高,需要更快速的算法。在06年有人提出了SURF算法“加速稳定特征”,从名字上来看,他是SIFT算法的加速版本。(原文) 在SIFT算法当中使用高斯差分方程(Difference of Gaus原创 2018-01-27 15:47:55 · 13898 阅读 · 1 评论 -
python opencv入门 SIFT算法(33)
内容来自OpenCV-Python Tutorials 自己翻译整理目标:学习SIFT算法的概念 学习在图像中查找SIFT关键的和描述符原理:(原理部分自己找了不少文章,内容中有不少自己理解和整理的东西,为了方便快速理解内容和能够快速理解原理,本文尽量不使用数学公式,仅仅使用文字来描述。本文中有很多引用别人文章的内容,仅供个人记录使用,若有错误,请指正出来,万分感谢)参考文章:参考文章1 参考文原创 2017-10-08 15:07:52 · 19740 阅读 · 3 评论 -
python opencv入门 Shi-Tomasi 角点检测和适合图像追踪的特征(32)
内容来自OpenCV-Python Tutorials 自己翻译整理目标: Shi-Tomasi 角点检测方法 函数cv2.goodFeatureToTrack()原理: 在harris角点检测的方法中,对角点判断的打分公式为 R=λ1λ2−k(λ1+λ2)2R=\lambda_1\lambda_2-k(\lambda_1+\lambda_2)^2(λ\lambda的含义见此http://b原创 2017-09-20 15:44:23 · 3178 阅读 · 0 评论 -
python opencv入门 使用 GrabCut 交互式提取前景(30)
内容来自OpenCV-Python Tutorials 自己翻译整理目标:GrabCut算法原理与应用 创建交互式程序完成前景提取原理: 首先用矩形将要选择的前景区域选定,其中前景区域应该完全包含在矩形框当中。然后算法进行迭代式分割,知道达到效果最佳。但是有时分割结果不好,例如前景当成背景,背景当成前景。测试需要用户修改。用户只需要在非前景区域用鼠标划一下即可。 如文档中的图片,运动员和足球被原创 2017-09-03 15:10:36 · 18414 阅读 · 4 评论 -
python opencv入门 Harris角点检测(31)
内容来自OpenCV-Python Tutorials 自己翻译整理角点检测原理参考此博客目标:理解Harris角点检测的概念 使用函数cv2.cornerHarris(),cv2.cornerSubPix()原理:借上面参考博客的一张图 Harris角点检测的方法大概原理就是建立一个窗口区域,然后以当前窗口为中心向各个方向进行偏移。如上图所示,第一个窗口向各个方向偏移的时候,像素的值没有变化,原创 2017-09-17 13:47:45 · 17793 阅读 · 1 评论 -
python opencv入门 分水岭算法(29)
内容来自OpenCV-Python Tutorials 自己翻译整理目标 使用分水岭算法对基于标记的图像进行分割 使用函数cv2.watershed()原理: 灰度图像可以被看成拓扑平面,灰度值高的区域可以看出山峰,灰度值低的区域可以看成是山谷。向每一个山谷当中灌不同颜色的水。水位升高,不同山谷的水会汇合,为防止不同山谷的水汇合,小在汇合处建立起堤坝。然后继续灌水,然后再建立堤坝,直到山峰都掩原创 2017-08-27 18:02:43 · 12886 阅读 · 3 评论 -
python opencv入门 Hough直线变换(27)
内容来自OpenCV-Python Tutorials 自己翻译整理目标: 理解概念 在图片中检测直线 学习函数cv2.HoughLines(),cv2.HoughLinesP()原理: 霍夫变换在检测各种形状的技术中十分流行,如果能用数学表达式写出图形的公式,就可以使用霍夫变换来进行检测。待检测的物体可以存在一些破坏和变型。直线的表达式为y=mx+cy=mx+c或者用极坐标表示为,ρ=xc原创 2017-08-22 14:11:44 · 10378 阅读 · 6 评论 -
python opencv入门 傅里叶变换(25)
内容来自OpenCV-Python Tutorials 自己翻译整理傅里叶变换原理的文章目标 用opencv对图像进行傅里叶变换 numpy进行快速傅里叶变换 傅里叶变换的用处 学习函数函数cv2.dft(),cv2.idft()原创 2017-08-18 19:29:13 · 6294 阅读 · 0 评论 -
python opencv入门 特征点匹配+单应性查找目标(39)
内容来自OpenCV-Python Tutorials 自己翻译整理目标: 我们将结合特征点匹配和寻找单应性的方法,使用calib3d模块在复杂的图像当中寻找已知目标。基础:这里简单说一下什么事单应变换,如果有说的不对,还请各位看官斧正。一般来讲,二维的图像变换可以分成这几类等距变换:简单的说就是对一个图像使用旋转、平移等操作。对应的矩阵也是旋转平移的矩阵相似变换:把...原创 2018-03-30 14:38:07 · 8676 阅读 · 21 评论 -
python opencv入门 ORB算法(37)
内容来自OpenCV-Python Tutorials 自己翻译整理目标: 本章了解ORB算法基础理论: 作为一个OpenCV的爱好者,ORB算法最看重的一点就是本算法来自OpenCV实验室。这个算法由Ethan Rublee, Vincent Rabaud, Kurt Konolige 和Gary R. Bradski科学家在他们的论文“ORB:一种有效的替代SIFT或者SURF的算...原创 2018-03-26 08:53:12 · 12027 阅读 · 0 评论 -
python opencv入门 特征匹配(38)
内容来自OpenCV-Python Tutorials 自己翻译整理目标: 学习匹配一副图片和其他图片的特征。 学习使用OpenCV中的Brute-Force匹配和FLANN匹配。暴力匹配(Brute-Force)基础暴力匹配很简单。首先在模板特征点描述符的集合当中找到第一个特征点,然后匹配目标图片的特征点描述符集合当中的所有特征点,匹配方式使用“距离”来衡量,返回“距离”最近的那...原创 2018-03-28 21:26:12 · 4857 阅读 · 3 评论 -
均值滤波&高斯滤波&中值滤波
均值滤波均值滤波是一种线性滤波器,处理思路也很简单,就是将一个窗口区域中的像素计算平均值,然后将窗口中计算得到的均值设置为锚点上的像素值。该算法有优点在于效率高,思路简单。同样,缺点也很明显,计算均值会将图像中的边缘信息以及特征信息“模糊”掉,会丢失很多特征。计算均值滤波时可以采用很多优化手段,例如使用积分图的方法对图像进行预处理,处理过后的图像可以通过O(1)的时间复杂度获取窗口区域中的像...原创 2018-11-01 20:07:39 · 56235 阅读 · 2 评论 -
图像的腐蚀与膨胀
原理:腐蚀膨胀算法的基本原理很简单,与图像卷积的方法类似,给定一个窗口或者是一个特定形状的卷积核,卷积核中的值全部为1。处理前,先将图像二值化。如果是腐蚀操作,那么在进行卷积的操作过程当中,让卷积核与卷积核所覆盖的的图像区域的取“与”运算操作(如果图像像素值不为空就当成1处理)。如果卷积核中的所有值都是1,那么就将卷积核的锚点设置成1。以上为腐蚀运算。同样,在膨胀运算的过程中使用“与”运...原创 2018-10-01 16:50:42 · 1708 阅读 · 0 评论 -
图像的卷积操作
原理:给定一个奇数尺寸大小的卷积核,对图像进行卷积操作。因为使用奇数尺寸大小的卷积核,其锚点正好在卷积核正中央的位置。如下图中间画了一个锚的就是锚点使锚点覆盖在待计算像素上面,然后计算像素值与被覆盖的卷积核中的值的乘积和。将这个和赋值给当前像素,这就是卷积的过程。公式如下所示此处会有一个问题,如果锚点落在第一个像素点(1,1)上,卷积核当中锚点左侧和上方的卷积值超出了图像的边界外...原创 2018-09-18 23:49:51 · 2552 阅读 · 1 评论 -
图像的平移、旋转、缩放
原理:平移的矩阵: ⎡⎣⎢100010xy1⎤⎦⎥[10x01y001] \left[\begin{array}{ccc} 1&0&x\\ 0&1&y\\ 0&0&1\end{array}\right] 缩放的矩阵: ⎡⎣⎢a000b0001⎤⎦⎥[a000b0001] \left[\begin{array}{ccc} a&0&0\\原创 2018-09-13 00:41:18 · 5445 阅读 · 0 评论 -
图像缩放算法 最近邻插值算法 & 双线性插值算法
图像缩放:resize函数是在OpenCV中经常使用的函数,功能是将一副加载到Mat中的图像调整尺寸或者按照比例进行缩放。其中有两种简单又常用的插值算法用来实现图像缩放,分别是最近邻插值算法和双线性插值算法。最近邻插值算法:最近邻插值算法的思想十分简单设原始图像src的高为h,宽为w,图像上像素值为(x,y)。设目标图像dst的高H,宽为W,图像上的像素值为(X,Y)。...原创 2018-09-05 23:27:53 · 6294 阅读 · 1 评论 -
python opencv入门 背景减除算法法(42)
内容来自OpenCV-Python Tutorials 自己翻译整理目标:这一节要了解背景减除算法在opencv中的应用。基础:背景减除算法是很多以机器视觉为基础的应用中,非常重要的预处理算法。例如,使用固定的摄像头来统计一个房间的进出人数或者交通摄像头提取关于交通工具的信息等等。在所有这些例子当中,你首先要做的就是把人和交通工具单独提取出来。从技术上来讲,你需要把移动的前景从静止...原创 2018-08-11 17:26:43 · 14781 阅读 · 2 评论 -
python opencv入门 光流法(41)
内容来自OpenCV-Python Tutorials 自己翻译整理目标:了解光流的概念,使用lucas-kanade估算方法使用cv2.calcOpticalFlowPyrLK() 方法来追踪视频中的特征点光流: 光流的概念是指在连续的两帧图像当中,由于图像中的物体移动或者摄像头的移动而使得图像中的目标的运动叫做光流。(说简单点,考虑摄像头不会动的情况,就是一个视频当中有一个...原创 2018-07-13 20:11:32 · 41018 阅读 · 15 评论 -
kinect v2 同时获取红外图、深度图、彩色图
#include <stdio.h>#include <Kinect.h>#include <windows.h>#include <opencv\highgui.h>#include <opencv\cv.h>#include <stdlib.h>#include <time.h>#include原创 2018-06-07 21:46:31 · 7314 阅读 · 14 评论 -
python opencv入门 Meanshift 和 Camshift 算法(40)
内容来自OpenCV-Python Tutorials 自己翻译整理目标: 在本章,学习Meanshift算法和Camshift算法来寻找和追踪视频中的目标物体。Meanshift算法:meanshift算法的原理很简单。假设你有一堆点集...原创 2018-05-24 20:34:41 · 9293 阅读 · 0 评论 -
opengl gluLookAt函数实现
函数的原型如下: gluLookAt(GLdouble eyex,GLdouble eyey,GLdouble eyez,GLdouble centerx,GLdouble centery,GLdouble centerz,GLdouble upx,GLdouble upy,GLdouble upz);前三个参数的含义是摄像机的位置,四到六个参数是被观察物体的方向,最后面的三个参数是垂...原创 2018-04-17 09:31:37 · 1455 阅读 · 0 评论 -
python opencv入门 模板匹配(26)
内容来自OpenCV-Python Tutorials 自己翻译整理目标: 使用模板匹配在图像中查找目标 学习函数cv2.matchTemplate(),cv2.minMaxLoc()原理: 模板匹配是在一副图像中寻找模板图像的方法。opencv中有函数cv2.matchTemplate()来实现。与2D卷积一样,它也是用模板图像在输入图像上滑动(类似窗口),在每一个位置对模板图像和输入图像的原创 2017-08-21 00:00:13 · 13333 阅读 · 6 评论 -
python opencv入门 轮廓的层次结构(21)
内容来自OpenCV-Python Tutorials 自己翻译整理目标: 轮廓的层次结构、父子关系原理: 使用cv2.findContours函数查找轮廓时需要传入一个轮廓提取模式的参数(Contour_Retrieval_Mode),通常设置为cv2.RETR_LIST 和 cv2.RETR_TREE。代表什么意思? 结果会得到三个数组,第一个是图像,第二个是轮廓,第三个是层次结构,下面要原创 2017-08-07 10:12:48 · 2777 阅读 · 0 评论 -
python opencv入门 颜色空间转换(9)
内容来自OpenCV-Python Tutorials 自己翻译整理目标学习如何将RGB转换为灰度图,或者RGB转换为HSV 写个程序从一副图像获取某个固定颜色的物体 学习函数cv2.cvtColor(),cv2.inRange()转换颜色空间在opencv中有超过150种颜色空间转换方法(震惊-_-) 但是经常用的只有BGR-灰度图和BGR-HSV使用函数cv2.cvtColor(input原创 2017-07-23 16:59:27 · 22919 阅读 · 3 评论 -
python opencv入门 基本图像操作(6)
内容来自OpenCV-Python Tutorials 自己翻译整理目标: 获取像素值并修改 获取图像属性 设定图像区域 分割和拼接图像上面内容和python中的numpy库操作有重要联系,熟练使用numpy库很重要获取像素值并修改 获取图像值可以通过行列的坐标获取,对于一个BGR图像则返回一个BGR值,对于一个灰度图像则返回它的灰度值import cv2import numpy as原创 2017-07-19 11:43:15 · 1046 阅读 · 3 评论 -
python opencv入门 程序性能检测(8)
内容来自OpenCV-Python Tutorials 自己翻译整理目标 检测程序效率 提高程序效率的技巧 学习函数cv2.getTickCount,cv2.getTickFrequencypython的time模块可以检测程序运行时间profile模块可以获得关于程序的详细信息,如运行时间和函数调用次数等等cv2.getTickCount 返回运行至该函数的时间数,可以在想要获得执行时间的原创 2017-07-22 16:20:50 · 974 阅读 · 0 评论 -
python opencv入门 图像金字塔(16)
内容来自OpenCV-Python Tutorials 自己翻译整理目标: 学习图像金字塔 使用图像金字塔创造新水果“橘果”(橘子+苹果) 学习函数 cv2.pyrUp(), cv2.pyrDown()原理: 正常情况下,我们经常处理固定分辨率的图像。有时也会处理不同分辨率的相同图像。例如在图像中找某个东西,比如找人脸,我们不清楚图像中人脸的大小。这时我们需要创建一堆不同分辨率图像,去寻找物原创 2017-07-31 10:51:58 · 1668 阅读 · 0 评论 -
python opencv入门 滚动条控制调色板(5)
内容来自OpenCV-Python Tutorials 自己翻译整理目标: 使用滚动条绑定窗口 学习如下函数 cv2.getTrackbarPos(), cv2.createTrackbar() 样例代码: 这里建立了一个简单的样例来现实用户指定的颜色。用户使用三个滚动条来指定B,G,R值,同时用户选择的颜色会显示在窗口当中。用户拖动滚动条会关联到窗口中颜色的改变。初始默认的颜色会被设置为黑色原创 2017-07-18 16:38:44 · 3386 阅读 · 1 评论 -
python opencv入门 Canny边缘检测(15)
内容来自OpenCV-Python Tutorials 自己翻译整理目标边缘检测的概念 opencv的函数cv2.Canny()原理 Canny边缘检测很流行,在1986年提出去除噪声 边缘检测容易受到噪声影响,一般第一步都是用5*5的高斯滤波器去除噪声计算图像梯度对平滑后的图像使用sobel算子在水平与竖直方向上计算一阶导数,得到图像梯度(Gx和Gy)。根据梯度图找到边界梯度和方向,公式如下原创 2017-07-30 12:13:06 · 40185 阅读 · 8 评论 -
python opencv入门 图像上的算术运算(7)
内容来自OpenCV-Python Tutorials 自己翻译整理目标 图像加法、减法、位运算 学习函数cv2.add(),cv2.addWeighted()加法: 使用cv2.add()将两个图像相加,可以使用numpy中的矩阵加法来实现。但是在opencv中加法是饱和操作,也就是有上限值,numpy会对结果取模。 综上,使用opencv的效果更好img1=cv2.imread('1.j原创 2017-07-20 17:00:34 · 5690 阅读 · 13 评论 -
python opencv入门 鼠标绘图(4)
内容来自OpenCV-Python Tutorials 自己翻译整理 目标:学习如何操作鼠标事件学习cv2.setMouseCallback()函数简单样例: 首先创建一个鼠标的回调函数,当鼠标事件触发时,该函数执行。 鼠标事件有很多种,比如左键右键,双击等等,该函数提供鼠标点击的坐标。对应事件的触发和鼠标点击的坐标位置,我们可以做任何事,下面代码输出了鼠标事件的种类import nump原创 2017-03-16 20:14:18 · 12178 阅读 · 3 评论 -
python opencv 入门 绘图函数 (3)
内容来自OpenCV-Python Tutorials 自己翻译整理 目标:使用opencv画几何图形学习如下函数 cv2.line(), cv2.circle() , cv2.rectangle(), cv2.ellipse(), cv2.putText()画线:import numpy as npimport cv2#画图窗口大小设置为512*512 通常参数,可选1,3,4img原创 2017-03-10 11:53:26 · 2100 阅读 · 0 评论 -
python opencv 入门 加载视频 (2)
内容来自OpenCV-Python Tutorials 自己翻译整理 目标:读取视频、显示视频、保存视频使用摄像头拍摄并显示学习cv2.VideoCapture(), cv2.VideoWriter()函数使用摄像头拍摄视频: (我的用的是笔记本电脑上面的摄像头) OpenCV 提供了一个非常简单的接口。我们把视频转换成黑白格式,然后显示出来。首先要创建一个VideoCapture对象。原创 2017-03-06 10:28:53 · 1829 阅读 · 3 评论 -
python opencv入门 直方图计算、绘制、分析(22)
内容来自OpenCV-Python Tutorials 自己翻译整理目标: 使用opencv或numpy或Matplotlib函数绘制直方图 学习函数cv2.calcHist(),np.histogram()原理: 通过直方图可以对图像灰度分布有一个整体了解,x轴上是灰度值(0到255),y轴是图片中该灰度值的像素点的数目。 通过图像可以对图片对比度、亮度、灰度分布有一个直观的认识,如下图:原创 2017-08-08 10:46:24 · 9567 阅读 · 2 评论 -
python opencv入门 轮廓(17)
内容来自OpenCV-Python Tutorials 自己翻译整理目标 理解什么是轮廓 找轮廓、绘制轮廓 学习如下函数cv2.findContours(), cv2.drawContours()什么是轮廓? 轮廓可以理解为将所有连续的像素点(沿着边界)连接咋我一起的曲线,这些像素有相同的颜色或者灰度。轮廓在形状分析和物体识别上有重要应用。为了提高精确度、要使用二值图像。寻找轮廓前,要进行原创 2017-08-02 10:32:39 · 2159 阅读 · 0 评论 -
python opencv入门 直方图均衡化(22)
内容来自OpenCV-Python Tutorials 自己翻译整理目标: 直方图均衡化 调整图片对比度原理: 考虑一副图片的的像素限制在一些特定区域的像素值。例如,亮度更高的图片像素值会集中在值更高的地方。但是一个好的图片会将像素值分布到图片的各个区域。你需要拉伸直方图,这就是直方图均衡化的目的。 维基百科对于直方图均衡和的解释很好,有很多细节。详细见此处 查看直方图import c原创 2017-08-09 09:19:50 · 4542 阅读 · 1 评论 -
python opencv入门 图像梯度(14)
内容来自OpenCV-Python Tutorials 自己翻译整理目标: 图像梯度、边界 函数cv2.Sobel(),cv2.Schar(),cv2.Laplacian() 原理: 简单的来说,梯度的原理就是求导数,opencv中有三种不同滤波器,或者说成高通滤波器。分别是Sobel,Scharr 和 Laplacian。Sobel 和 Scharr 导数 Sobel算子是结合了高斯平滑与原创 2017-07-29 13:25:21 · 6932 阅读 · 0 评论