
Open CV
文章平均质量分 56
以opencv4.12版本 window10版本 VisualStudio2019为编译环境
BOSON_NEO
认识世界,认识自己
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
图像基本操作办法集合
此文涉及:图像的灰度化方法 cvtColor函数 imread函数图像之间的赋值操作 .create函数初始化图像的方法图像信息获取的方法 .channels函数 图像的灰度化方法 方法一: 使用cvtColor模板函数对图像直接进行灰度处理cvtColor(src, dst, CV_BGR2GRAY);//单通道 灰度方法二: 使用imread函数对图像进行导入时,设置其函数第二个实参为IMREAD_GRAYSCALEMat src = imread("D:/实验台/机器视觉/测原创 2021-03-27 14:34:31 · 355 阅读 · 0 评论 -
open cv鼠标操作(回调函数)
鼠标消息回调函数 SetMouseCallback函数原型 c++: void setMousecallback(const string& winname, MouseCallback onMouse, void* userdata=0)winname:窗口的名字onMouse:鼠标响应函数,回调函数。指定窗口里每次鼠标时间发生的时候,被调用的函数指针。 这个函数的原型应该为void on_Mouse(int event, int x, int y, int flags, void* par原创 2020-08-07 15:19:44 · 768 阅读 · 0 评论 -
open cvBrisk特征检测与匹配
什么是BRISK算法BRISK算法是2011年ICCV上《BRISK:Binary Robust Invariant Scalable Keypoints》文章中,提出来的一种特征提取算法,也是一种二进制的特征描述算子它具有较好的旋转不变性、尺度不变性,较好的鲁棒性等。在图像配准应用中速度比较:SIFT<SURF<BRISK<FREAK<ORB,在对有较大模糊的图像配准时,BRISK算法在其中表现最为出色BRISK算法特征点检测的特点BRISK算法主要利用FAST9-16原创 2020-07-31 16:56:17 · 822 阅读 · 2 评论 -
open cvAKAZE局部匹配
AKAZE与SIFT和SUFR比较1.不需要使用Xfeature2d扩展模块2.更加稳定(避免了SIFT、SUFR插值时缺少像素的不足)3.非线性方法构造尺度空间(SIFT、SUFR是线性采样 尺度空间不准确)4.AKAZE速度更加快5.比较新的算法,只有OpenCV新版本才可以用AKAZE局部匹配过程1.AOS 构造尺度空间2.Hessian矩阵特征点检测3.方向指定基于一阶微分图像4.描述子生成#include <opencv2/opencv.hpp>#inc..原创 2020-07-30 22:37:04 · 413 阅读 · 0 评论 -
open cv平面对象检测及翘曲图像校正-基于FLANN的特征检测和透视变换
接着上篇FLANN特征匹配,从上篇可以知道,如果特征匹配时全部是用线进行匹配,匹配效果并不能达到一目了然的效果那么,可不可以把匹配到的结果用矩形或圆表示出来呢 当然可以,这就是平面对象识别关于基于透视变换的平面对象识别主要用到两个新的APIcv::findHomography() – 发现两个平面的透视变换,生成透视变换矩阵cv::perspectiveTransform() – 进行透视变换关于透视变换透视变换(Perspective Transformation)可以对图片进行校正原创 2020-07-30 10:38:35 · 1813 阅读 · 0 评论 -
open cvFLANN特征检测
什么是FLANN特征匹配1.FLANN是快速最近邻搜索包(Fast_Library_for_Approximate_Nearest_Neighbors)的简称 即实现快速高效匹配FlannBasedMatcher中FLANN的含义是Fast Library forApproximate Nearest Neighbors,从字面意思可知它是一种近似法算法更快但是找到的是最近邻近似匹配,所以当我们需要找到一个相对好的匹配但是不需要最佳匹配的时候往往使用FlannBasedMatcher当然也可以通过原创 2020-07-27 21:13:48 · 1547 阅读 · 0 评论 -
open cv特征描述子和BruteForce暴力匹配
关于暴力匹配暴力匹配是指依次查找(穷举搜索)第一组中每个描述符与第二组中哪个描述符最接近。当然初始的暴力匹配得到的误匹配很多。我们可以通过交叉匹配过滤的方法对误匹配进行一定程度的剔除这种技术的思想是用查询集来匹配训练描述符,反之亦然。只返回在这两个匹配中同时出现的匹配。当有足够多的匹配时,这种技术在离群值数目极少的情况下通常会产生最佳效果涉及的类为BFMatch类#include <opencv2/opencv.hpp>#include <opencv2/highgui/high原创 2020-07-26 19:45:34 · 455 阅读 · 0 评论 -
open cv积分图计算
为什么要用积分图像直方图的计算方法为遍历图像的全部像素并累计每个强度值在图像中出现的次数。有时仅需要计算图像中某个特定区域的直方图而如果需要计算图像中多个区域的直方图这些计算过程将变得非常耗时。在这种情况下使用积分图像将极大地提高统计图像子区域像素的效率。积分图像在程序中应用非常广泛什么是积分图像积分图像的定义:取图像左上侧的全部像素计算累加和,并用这个累加和替换图像中的每一个像素,使用这种方式得到的图像称为积分图像#include <opencv2/opencv.hpp>#incl原创 2020-07-25 18:53:58 · 286 阅读 · 0 评论 -
open cvHOG特征检测
什么是HOG特征方向梯度直方图(Histogram of Oriented Gradient, HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子 它通过计算和统计图像局部区域的梯度方向直方图来构成特征。Hog特征结合SVM分类器已经被广泛应用于图像识别中,尤其在行人检测中获得了极大的成功目标检测是用来确定图像上某个区域是否有我们要识别的对象,目标识别是用来判断图片上这个对象是什么。识别通常只处理已经检测到对象的区域,例如,人们总是会使在已有的人脸图像的区域去识别人脸是与SIF.原创 2020-07-25 12:02:52 · 391 阅读 · 0 评论 -
open cvSIFT特征点检测
什么是SIFT特征SIFT (Scale-invariant feature transform): 尺度不变特征转换 一种计算机视觉的算法 它用来侦测与描述影像中的局部性特征它在空间尺度中寻找极值点,并提取出其位置、尺度、旋转不变量,此算法由 David Lowe在1999年所发表,2004年完善总结应用范围应用范围包含物体辨识、机器人地图感知与导航、影像缝合、3D模型建立、手势辨识、影像追踪和动作比对SIFT特征的特性局部影像特征的描述与侦测可以帮助辨识物体,SIFT特征是基于物体上的一原创 2020-07-23 15:07:53 · 549 阅读 · 0 评论 -
open cvSURF特征检测
什么是SURF特征检测(加速鲁棒特征)1.属于尺度不变特征的检测,即不仅在任何尺度下拍摄的物体都能检测到一致的关键点,而且每个被检测的特征点都对应一个尺度因子2.SURF 特征,它的全称为加速稳健特征( Speeded Up Robust Feature ),它不仅是尺度不变特征,而且是具有较高计算效率的特征3.这个算法可被用于对象定位和识别、人脸识别、3D重建、对象跟踪和提取兴趣点 他部分的灵感来自于 SIFT 算法应用场景SURF可以用于对象定位和识别、人脸识别、3D重建、对象跟踪和提取兴趣点原创 2020-07-20 22:26:33 · 392 阅读 · 0 评论 -
呕心沥血!open cv4.1.2添加contrib4.1.2扩展模块
由于知识产权的原因,OpenCV将很多算法放到了opencv_contrib中,在github上,这两块代码就是分别放在不同的repository中的,SURF和SIFT特征检测也在此扩展中所以我们需要对OpenCV原有的dll原创 2020-07-16 21:16:21 · 503 阅读 · 0 评论 -
open cv基于距离变换与分水岭的图像分割
/*什么是图像分割(Image Segmentation)图像分割是图像处理最重要的处理手段之一图像分割的目标是将图像中像素根据一定的规则分为若干(N)个cluster(集群)集合每个集合包含一类像素,根据算法分为监督学习和无监督学习方法,图像分割的算法多数都是无监督学习方法—Kmeans应用领域:如果应用到单幅图像上则是主要为图像窄化 骨架提取 粘连物体的分离等如果应用到原图跟模板图则是应用于图像匹配封闭性是分水岭算法的一个重要特征其他图像分割方法,如阈值,边缘检测等都不会考虑像素在原创 2020-07-05 16:30:05 · 946 阅读 · 0 评论 -
open cv点多边形测试
1、概念介绍测试一个点是否在给定的多边形内部、边缘或者外部API介绍cv::pointPolygonTestpointPolygonTest(InputArray contours,//输入的轮廓Point2f pt,//测试点bool meatureDist//是否返回距离值,如果是false,1表示在内面,0表示在边界上,-1表示在外部,如果是true返回实际距离,外部为负值,内部为正值,返回数据为double类型)步骤构建一张400*400大小的图像Mat::zeros(400,原创 2020-06-28 21:22:59 · 711 阅读 · 0 评论 -
open cv图形矩
/*矩的概念介绍1.矩是描述图像特征的算子图形矩(Image Moments)- 求取图像质心,面积,长度1.几何矩(空间矩)- P(x,y) —像素值,x,y x,yx,y表示像素点的位置,有各阶矩空间矩的实质为面积或者质量。可以通过一阶矩计算质心/重心2.中心矩- mu(ji)中心矩体现的是图像强度的最大和最小方向(中心矩可以构建图像的协方差矩阵)其只具有平移不变性,所以用中心矩做匹配效果不会很好3.中心归一化矩- nu(ji)归一化后具有尺度不变性4.Hu矩由于具有尺度、旋转、原创 2020-06-26 16:39:05 · 460 阅读 · 0 评论 -
open cv轮廓周围绘制圆形和矩形
/*APIapproxPolyDP(精简多边形轮廓点数)作用是把一个很多点的多边形变成一个点数适中的多边形在这个多边形里面找它的最小连接矩形和最小的圆approxPolyDP(InputArray curve,//输入一个多边形(点)OutputArray approxCurve, //输出一个处理后的多边形(点)double epsilon,//表示两点之间的最小距离,小于这个距离舍去,大于这个距离保留bool closed//判断是否封闭(形成的多边形是否闭合 多边形分为凸多边形和原创 2020-06-22 21:09:10 · 676 阅读 · 0 评论 -
open cv凸包
什么是凸包?凸:得到的结果是一个凸出的形状,可以理解为一个凸多边形包:包围图像中的所有东西未封闭的凸包叫做凸壳在一个多边形边缘或者内部任意两个点的连线都包含在多边形边界或者内部凸包跟多边形逼近很像,只不过它是物体最外层的”凸”多边形:集合A内连接任意两个点的直线都在A的内部,则称集合A是凸形的我们也可以理解为这个是一个平面,上面钉了很多钉子,然后用一根细线或者橡皮筋把他包围起来,包围的这一周就是凸包。当然,这个是对于二维平面,我们通过二维平面来理解凸包,那我们现在给出在多维平面(向量空间)中的原创 2020-06-20 11:28:52 · 433 阅读 · 0 评论 -
open cv轮廓发现
/*轮廓发现(find contour)轮廓是图像的特征首先了解一下轮廓的定义。一个轮廓代表一系列的点(像素)这一系列的点构成一个有序的点集,所以可以把一个轮廓理解为一个有序的点集轮廓不是边缘(轮廓是在边缘的基础上寻找的)轮廓发现是基于图像边缘提取的基础寻找对象轮廓的方法所以边缘提取的阈值选定会影响最终轮廓发现结果2、API介绍findContours发现轮廓二值图像上发现轮廓使用APIfindContours(InputOutputArray src,//输入图像,非0的像素被原创 2020-06-15 23:20:37 · 408 阅读 · 0 评论 -
open cv模板匹配
/*模板匹配介绍(Template Match)模板匹配:模板匹配是一项在一幅图像中寻找与另一幅模板图像最匹配(相似)部分的技术模板匹配就是在整个图像区域发现与给定子图像匹配的小块区域所以模板匹配首先需要一个模板图像T(给定的子图像)另外需要一个待检测的图像S工作方法:在待检测图像上,从左到右,从上向下计算模板图像与重叠子图像的匹配度(这样的搜寻策略叫做滑动窗口) 匹配程度越大,两者相同的可能性越大(工作原理类似于卷积操作 逐像素寻找匹配像素)寻找子图像和目标图像直方数据的相似程度!!原创 2020-06-13 15:25:25 · 772 阅读 · 0 评论 -
open cv直方图反向投射
/*直方图反向投射完全讲解https://blog.youkuaiyun.com/shuiyixin/article/details/80331839反向投影作用——目标检测一幅图像的反向投影利用了其原始图像(或目标区域)的直方图,将该直方图作为一张查找表来找对应像素点的像素值,即将目标图像像素点的值设置为原始图像(或目标区域)直方图上对应的bin值该bin值代表了(目标区域)上该像素值出现的概率。从而得到一幅图像的概率值从而我们可以通过这幅概率图可以得知在这幅图像中,目标出现可能出现的位置反向投影原创 2020-06-08 13:16:16 · 289 阅读 · 0 评论 -
open cv直方图对比
/*为什么需要直方图比较?如果你有两张图 就可以对两张直方图进行比较 衡量图像之间的相关性二十四、直方图比较利用两张图片的直方图判断两张图片的相似性,也可以判断两个图片是否为同一图片。1、直方图比较方法对输入的两张图象计算得到直方图H1与H2,归一化到相同的尺度空间然后可以通过计算H1和H2之间的距离得到两个直方图的相似程度进而比较图像本身的相似程度。opencv提供的比较方法有4种:Correlation相关性比较 HISTCMP_CORREL如果两个数组H1、H2一样的情况下,相原创 2020-06-04 20:12:32 · 399 阅读 · 0 评论 -
open cv直方图计算
/*目的:生成直方图直方图概念对于图像像素值、图像梯度、每个像素的角度等一切图像的属性值,都可以建立直方图,不过基于图像像素灰度直方图是最常见的直方图常见的几个属性:dims表示维度(通道数),对灰度图像来说只有一个通道值dims=1bins表示在维度中子区域大小划分,bins=256代表划分为256个级别range表示值的范围,灰度范围为0~255之间API学习split分通道split将3通道图像分为多个单通道图像存放在单通道数组中split(const Mat &原创 2020-06-01 20:16:07 · 611 阅读 · 0 评论 -
open cv直方图均衡化
/*什么是直方图 ?直方图(Histogram),又称质量分布图,是一种统计报告图由一系列高度不等的纵向条纹或线段表示数据分布的情况。一般用横轴表示数据类型,纵轴表示分布情况直方图的功能对任意符合数据特征的数据都可以生成直方图数据特征-数据在一定范围之内 统计范围内数据出现的频率 绘制直方图例如 梯度直方图 灰度直方图 三通道RGB值直方图 方向直方图直方图均衡化介绍:是一种提高对比度的方法 拉伸图像灰度值范围如何实现:通过像素值的映射 把图像中的像素值映射到直方图数据中 经过直方图计原创 2020-05-27 16:42:14 · 392 阅读 · 0 评论 -
open cv像素重映射
/*映射的概念-把数据(像素)按照规则重新排列什么是像素重投影简单点说就是把输入图像中各个像素按照一定的规则映射到另外一张图像的对应位置上去,形成一张新的图像[Math Processing Error] g(x,y)g(x,y) = [Math Processing Error] f(h(x,y))f(h(x,y))[Math Processing Error] g(x,y)g(x,y)是重映射后的图像,[Math Processing Error]hh是功能函数,[Math Proces原创 2020-05-27 14:21:23 · 396 阅读 · 0 评论 -
open cv霍夫变换-圆形检测
/*一看就懂的霍夫直线检测与圆检测原理https://blog.youkuaiyun.com/shenziheng1/article/details/75307410一个圆最重要的信息是圆心坐标XY和半径距离从平面坐标到极坐标转换3个参数C(x0,y0,r)其中x0 ,y0 是圆心 r是半径假设平面坐标的任意一个圆上的点,转换到极坐标中:C(x0,y0,r)处有最大值,霍夫变换正是利用这个原理实现圆的检测霍夫圆检测先检测边缘,将非边缘处都变为零值。遍历所有非零值,将其投影为(a,b,r)空间的一个圆,原创 2020-05-22 17:33:03 · 868 阅读 · 0 评论 -
open cv霍夫变换-直线检测
/*霍夫变换可以实现传统几何形状的检测霍夫直线变换介绍Hough Line Transform用来做直线检测前提条件—边缘检测已经完成平面空间到极坐标空间转换对于任意一条直线上的所有点来说变换到极坐标中,从[0~360]空间,可以得到r的大小属于同一条直线上点在极坐标空间(r, θ \thetaθ)必然在一个点上有最强的信号出现,根据此反算到平面坐标中就可以得到直线上各点的像素坐标,从而得到直线。霍夫变换的原理把 图像上的像素点全部变为极坐标空间形成一条一条的曲线无数个像素点绘制原创 2020-05-20 21:00:28 · 1038 阅读 · 0 评论 -
open cvCanny检测
/*Canny算法是1986年提出的边缘检测器算法Canhy算法介绍-五步in cv::Canny1.高斯模糊 去噪- GaussianBlur2.灰度转换- cvtColor canny只能用于灰度图片3.计算梯度- Sobel/Scharr4.非最大信号抑制 对非边缘信号进行抑制(左右两边的值都小于中间的值 去掉左右的值 因为边缘不能太宽)5.高低阈值输出二值图像 (对连接或未连接的边缘进行链接 小于最低阈值的舍弃 高于阈值的保留)常见高低阈值比值为 高|低=3比1或者2比1原创 2020-05-13 17:35:47 · 300 阅读 · 0 评论 -
open cvLaplance算子
/*理论在二阶导数的时候 最大变化处的值为零既边缘是零值通过二阶导数计算 依据此理论我们可以计算图像二阶导数*提取边缘*不用考虑二阶导数,拉普拉斯算子已经为我们提供了拉普拉斯算子API处理流程高斯模糊—去噪声GaussianBlur转换为灰度图像 cvtColor拉普拉斯—二阶导数计算Laplacian取绝对值convertScaleAbs //保留负数 转换为正数 保留边缘特征二值化—threshold(加上二值化增强显示效果)显示结果Laplacian(Mat gra原创 2020-05-13 17:34:31 · 214 阅读 · 0 评论 -
open cvSobel算子与Scharr算子
/*Sobel算子的特性卷积应用-图像边缘提取●边缘是什么- 是像素值发生跃迁的地方,是图像的显著特征之一,在图像特征提取、对象检测、模式识别等方面都有重要的作用。●如何捕捉/提取边缘 -对图像求它的 一阶导数delta= f(x)-f(x-1), delta越大,说明像素在x方向变化越大,边缘信号越强,●忘记了,不要担心,用Sobel算子就好! 卷积操作 !什么是 Sobel算子●是离散微分算子 ( discrete differentiation operator),用来计原创 2020-05-08 22:09:28 · 350 阅读 · 0 评论 -
open cv边缘的处理
/*为什么需要边缘处理?因为图像卷积操作的时候 总有边界像素不能被卷积操作到33的卷积 1个像素未处理 55 2个边缘未处理处理边缘在卷积开始之前增加边缘像素,填充的像素值为0或者RGB黑色,比如3x3在四周各填充1个像素的边缘,这样就确保图像的边缘被处理,在卷积处理之后再去掉这些边缘。openCV中默认的处理方法是: BORDER_ _DEFAULT此外常用的还有如下几种:...原创 2020-05-01 20:09:35 · 499 阅读 · 0 评论 -
open cv常见算子与自定义线性滤波
/*卷积和卷积如何工作,这个是知道的,卷积的作用就是模糊图像提取边缘,锐化图像。常见的卷积核(算子)有robert算子,sobel算子,拉普拉斯算子,前两个算子是分x方向和y方向的,而拉普拉斯算子是提取整体图像的边缘。提取边缘时,sobel比robert算子效果好,自定义线性滤波器用的API是filter2D(src,dst,图像深度8或32,卷积核模板,锚点)卷积概念●卷积是图像...原创 2020-05-01 20:08:53 · 587 阅读 · 0 评论 -
open cv阈值的基本操作
/*什么是图片的 阈值阈值大小的分类问题图像阈值( threshold )阈值是什么?简单点说是把图像分割的标尺,这个标尺是根据什么产生的,阈值产生算法?阈值类型( Binarysegmentation )阈值算法(分割方法)阈值二值化(threshold binary)THRESH_BINARY规定某个阈值,当像素值大于这个阈值的时候为255;当像素值小于这个阈值的时候为0。...原创 2020-05-01 20:07:47 · 426 阅读 · 3 评论 -
open cv图像上采样与下采样
/*从上向下 上采样 分辨率越高 2倍从下向上 降采样 分辨率越低 2/1图片采样越高 分辨率更密集清晰图像金字塔概念1.我们在图像处理中常常会调整图像大小,最常见的就是放大(zoom in)和缩小( zoom out) , 尽管几何变换也可以实现图像放大和缩小,但图像金字塔可以保证每一层图像的 * 特征不变 *一个图像金字塔式一系列的图像组成, 最底下一张是图像尺寸最大,...原创 2020-04-23 22:25:59 · 1428 阅读 · 0 评论 -
open cv提取水平线与垂直线
/*原理方法图像形态学操作时候,可以通过自定义的结构元素实现结构元素对输入图像-些对象敏感另外- -些对象不敏感,这样就会让敏感的对象改变而不敏感的对象保留输出。通过使用两个最基本的形态学操作-膨胀与腐蚀,使用不同的结构元素实现对输入图像的操作、得到想要的结果。.膨胀,输出的像素值是结构元素覆盖下输入图像的最大像素值.腐蚀,输出的像素值是结构元素覆盖下输入图像的最小像素值举例说明...原创 2020-04-19 16:18:38 · 657 阅读 · 0 评论 -
open cv形态学操作
/*与之前的sturcturingelement对接基本操作 膨胀和腐蚀 (替换中心像素-锚点)形态学操作●开操作- open●闭操作- close●形态学梯度- Morphological Gradient●顶帽- top hat●黑帽- black hat相关API●morphologyEx(src, dest, CV_MOP_BLACKHAT, kernel);//黑帽子...原创 2020-04-17 21:38:07 · 385 阅读 · 0 评论 -
open cv膨胀与腐蚀
/*膨胀与腐蚀形态学操作(morphology operators)-膨胀(空白区域变大了,暗色部分变小了)●dilatel(src, dst, kerne)最大像索值用来替换锚点的像素(背景的像素值最大所以就膨胀了背景)可以运用膨胀消除背景中的小的黑点●图像形态学操作-基于形状的一 系列图像处理操作的合集,主要是基于集合论基础上的形态学数学●形态学有四个基本操作:腐蚀、膨...原创 2020-04-15 23:03:17 · 462 阅读 · 0 评论 -
open cv均值 中值 高斯 双边高斯 滤波及模糊
/*模糊与消噪模糊原理(线性滤波)●Smooth/Blur 是图像处理中最简单和常用的操作之一●使用该操作的原因之一-就为了给图像预处理时候减低噪声●使用Smooth/Blur操作其背后是数学的卷积计算●通常这些卷积算子(kernel掩膜)计算都是线性操作 ,所以又叫线性滤波降低噪点 OCR识别 特征提取 通过smooth让二值化对象提取更准确归一化盒子滤波(均值滤波)高斯滤波...原创 2020-04-12 21:13:39 · 744 阅读 · 0 评论 -
open cvMat的使用
//Mat对象 自动分配内存 不会泄露数据 分 头部和数据部//ipllmage早期对象 需要自行分配与管理内存 导致内存泄漏/*Mat对象构造函数与常用方法常用方法:Mat()Mat (int rows, int cols, int type)Mat(ize size, in type)Mat (int rows, int cols, int type, const Scalar...原创 2020-03-29 21:52:16 · 426 阅读 · 0 评论 -
open cv图像矩阵的掩膜操作
//获取图像像素指针//掩膜操作解释//根据掩膜重新计算每个像素点的值//通过指针获取mat数据对象//让rgb的像素值在0-255之间//衡量程序的执行时间//参考 http://www.freesion.com/article/7436164618/#include <opencv2/opencv.hpp>#include <opencv2/highgui/h...原创 2020-03-22 21:47:33 · 266 阅读 · 0 评论 -
open cv图片混合
//线性混合操作//g(x)=(1-a)f0(x)+af1(x)//a的取值范围0~1之间//f0(x),f1(x)为等待混合的两张图像//g(x)为混合后的图像//API addWeighted 加权函数#include <opencv2/opencv.hpp>#include <opencv2/highgui/highgui_c.h>#include &...原创 2020-04-06 16:08:06 · 216 阅读 · 0 评论