
OpenCV图像处理
OpenCV基础教程
Kratze-Jayue
个人博客网站www.jayuee.cn
展开
-
OpenCV笔记(三十二)基于距离变换与分水岭的图像分割
文章目录一、理论1.图像分割2.距离变换3.分水岭变换二、相关API1.distanceTransform2.watershed三、处理步骤四、综合例程一、理论1.图像分割Image Segmentation图像分割是图像处理最重要的处理手段之一图像分割的目标是将图像中像素根据一定的规则分为若干(N)个cluster集合,每个集合包含一类像素。根据算法分为监督学习方法和无监督学习...原创 2020-04-14 13:28:39 · 358 阅读 · 0 评论 -
OpenCV笔记(三十一)点多边形测试
文章目录一、概念二、相关API三、处理步骤四、综合例程一、概念点多边形测试测试一个点是否在给定的多边形内部,边缘或者外部二、相关APIcv::pointPolygonTestpointPolygonTest(InputArray contour,// 输入的轮廓Point2f pt, // 测试点bool measureDist // 是否返回距离值,如果是fal...原创 2020-04-10 14:42:21 · 231 阅读 · 0 评论 -
OpenCV笔记(三十)图像矩
文章目录一、矩的概念介绍1.几何矩2.图像中心二、相关API1.moments2.contourArea3.arcLength三、处理步骤四、综合例程一、矩的概念介绍1.几何矩几何矩中心距中心归一化距2.图像中心Center(x0, y0)二、相关API1.momentscv::moments 计算生成数据moments(InputArray ...原创 2020-04-10 14:41:49 · 342 阅读 · 0 评论 -
OpenCV笔记(二十九)轮廓周围绘制矩形框和圆形框
文章目录一、相关API1.approxPolyDP2.boundingRect3.minAreaRect4.minEnclosingCircle5.fitEllipse二、处理步骤三、综合例程一、相关API1.approxPolyDP基于RDP算法实现,目的是减少多边形轮廓点数approxPolyDP( InputArray curve, OutputArray a...原创 2020-04-10 14:41:09 · 287 阅读 · 0 评论 -
OpenCV笔记(二十八)凸包
文章目录一、理论1.凸包2.Graham扫描算法二、相关API三、处理步骤四、综合例程一、理论1.凸包Convex Hull什么是凸包,在一个多变形边缘或者内部任意两个点的连线都包含在多边形边界或者内部。正式定义:包含点集合S中所有点的最小凸多边形称为凸包2.Graham扫描算法首先选择Y方向最低的点作为起始点p0从p0开始极坐标扫描,依次添加p1….pn(排序顺序是...原创 2020-04-10 14:40:38 · 232 阅读 · 0 评论 -
OpenCV笔记(二十七)轮廓发现
文章目录一、阈值发现二、相关API1. findContours2.drawContours三、处理步骤四、综合例程一、阈值发现find contour轮廓发现是基于图像边缘提取的基础寻找对象轮廓的方法。所以边缘提取的阈值选定会影响最终轮廓发现结果二、相关API1. findContours轮廓发现InputOutputArray binImg, // 输入图像,非0的像素被看成1,0的像素值保持不变,8-bit OutputArrayOfArrays contours,//原创 2020-05-22 15:03:20 · 461 阅读 · 0 评论 -
OpenCV笔记(二十六)模板匹配
文章目录一、理论1.模板匹配介绍二、匹配算法介绍1.计算平方不同2.计算相关性3.计算相关系数4.计算归一化平方不同5.计算归一化相关性6.计算归一化相关系数7.总结三、相关API四、综合例程一、理论1.模板匹配介绍模板匹配就是在整个图像区域发现与给定子图像匹配的小块区域。所以模板匹配首先需要一个模板图像T(给定的子图像),另外需要一个待检测的图像-源图像S工作方法,在带检...原创 2020-04-10 14:39:28 · 310 阅读 · 0 评论 -
OpenCV笔记(二十五)直方图反向投影
文章目录一、理论二、反向投影-步骤三、处理步骤四、综合例程一、理论反向投影是反映直方图模型在目标图像中的分布情况,简单点说就是用直方图模型去目标图像中寻找是否有相似的对象。通常用HSV色彩空间的HS两个通道直方图模型二、反向投影-步骤建立直方图模型计算待测图像直方图并映射到模型中从模型反向计算生成图像三、处理步骤加载图片imread将图像从RGB色彩空间转换到HSV色彩空...原创 2020-04-05 19:01:52 · 208 阅读 · 0 评论 -
OpenCV笔记(二十四)直方图比较
文章目录一、概述二、比较方法1.相关性计算2.卡方计算3.十字计算4.巴氏距离计算三、处理步骤四、相关API五、综合例程一、概述对输入的两张图像计算得到直方图H1与H2,归一化到相同的尺度空间,然后可以通过计算H1与H2的之间的距离得到两个直方图的相似程度进而比较图像本身的相似程度二、比较方法1.相关性计算CV_COMP_CORREL2.卡方计算CV_COMP_CHISQR...原创 2020-04-05 15:58:58 · 331 阅读 · 0 评论 -
OpenCV笔记(二十三)直方图计算
文章目录一、直方图概念二、相关API1.split2.calaHist三、综合例程一、直方图概念假设有图像数据8x8,像素值范围0~14共15个灰度等级,统计得到各个等级出现次数及直方图如右侧所示,每个紫色的长条叫BIN上述直方图概念是基于图像像素值,其实对图像梯度、每个像素的角度、等一切图像的属性值,我们都可以建立直方图。这个才是直方图的概念真正意义,不过是基于图像像素灰度直方...原创 2020-04-05 15:58:29 · 380 阅读 · 0 评论 -
OpenCV笔记(二十二)直方图均衡化
文章目录一、理论1.图像直方图2.直方图均衡化二、相关API三、综合例程一、理论1.图像直方图Histogram图像直方图,是指对整个图像像在灰度范围内的像素值(0~255)统计出现频率次数,据此生成的直方图,称为图像直方图-直方图。直方图反映了图像灰度的分布情况。是图像的统计学特征。假设有图像数据8x8,像素值范围0~14共15个灰度等级,统计得到各个等级出现次数...原创 2020-04-05 15:56:46 · 191 阅读 · 0 评论 -
OpenCV笔记(二十一)像素重映射
文章目录一、理论二、相关API三、综合例程一、理论像素重映射就是把输入图像中各个像素按照一定的规则映射到另外一张图像的对应位置上去,形成一张新的图像。假设有映射函数:二、相关APIcv::remapRemap(InputArray src,// 输入图像OutputArray dst,// 输出图像InputArray map1,// x 映射表 CV_32FC1...原创 2020-04-05 15:56:11 · 220 阅读 · 0 评论 -
OpenCV笔记(二十)霍夫圆变换
文章目录一、理论1.检测原理2.变换原理二、相关API三、综合例程一、理论1.检测原理2.变换原理从平面坐标到极坐标转换三个参数C(x0,y0,r)C(x_0,y_0,r)C(x0,y0,r)其中x0,y0x_0,y_0x0,y0是圆心假设平面坐标的任意一个圆上的点,转换到极坐标中:C(x0,y0,r)C(x_0,y_0,r)C(x0,y0,r)处有最大值,霍夫...原创 2020-04-05 15:55:41 · 228 阅读 · 0 评论 -
OpenCV笔记(十九)霍夫变换-直线
文章目录一、理论1.检测原理2.变换原理二、相关API1.HoughLines2.HoughLinesP三、综合例程一、理论1.检测原理Hough Line Transfrom用来做直线检测前提条件 – 边缘检测已经完成平面空间到极坐标空间转换2.变换原理对于任意一条直线上的所有点来说变换到极坐标中,从[0~360]空间,可以得到r的大小属于同一条直线上点在极坐标...原创 2020-04-05 15:53:25 · 523 阅读 · 0 评论 -
OpenCV笔记(十八)Canny边缘检测
文章目录一、Canny1.算法介绍2.非最大信号抑制3.**高低阈值输出二值图像**二、处理步骤三、相关API四、综合例程一、Canny1.算法介绍Canny是边缘检测算法,在1986年提出的。是一个很好的边缘检测器2.非最大信号抑制3.高低阈值输出二值图像T1, T2为阈值,凡是高于T2的都保留,凡是小于T1都丢弃,从高于T2的像素出发,凡是大于T1而且相互连接的,都保留。...原创 2020-04-04 18:55:38 · 285 阅读 · 0 评论 -
OpenCV笔记(十七)Laplance算子
文章目录一、理论二、处理流程三、相关API四、综合例程一、理论在二阶导数的时候,最大变化处的值为零即边缘是零值。通过二阶导数计算,依据此理论我们可以计算图像二阶导数,提取边缘。Laplance算子二、处理流程高斯模糊 – 去噪声GaussianBlur()转换为灰度图像cvtColor()拉普拉斯 – 二阶导数计算Laplacian()取绝对值convertScale...原创 2020-04-04 18:55:06 · 219 阅读 · 0 评论 -
OpenCV笔记(十六)Sobel算子
文章目录一、理论二、Sobel算子三、相关API1.cv::Sobel2.cv::Scharr3.其他API四、综合例程一、理论卷积应用-图像边缘提取边缘是什么 – 是像素值发生跃迁的地方,是图像的显著特征之一,在图像特征提取、对象检测、模式识别等方面都有重要的作用如何捕捉/提取边缘 – 对图像求它的一阶导数delta = f(x) – f(x-1), delta越大,说明像素在...原创 2020-04-04 18:54:28 · 276 阅读 · 0 评论 -
OpenCV笔记(十五)处理边缘
文章目录一、理论1.卷积边缘问题2.卷积边界问题二、处理边缘三、相关API四、综合例程一、理论1.卷积边缘问题2.卷积边界问题图像卷积的时候边界像素,不能被卷积操作,原因在于边界像素没有完全跟kernel重叠,所以当3x3滤波时候有1个像素的边缘没有被处理,5x5滤波的时候有2个像素的边缘没有被处理。二、处理边缘在卷积开始之前增加边缘像素,填充的像素值为0或者RGB黑色,比如3x3在...原创 2020-04-04 16:28:44 · 396 阅读 · 0 评论 -
OpenCV笔记(十四)自定义线性滤波
文章目录一、理论1.卷积概念2.卷积如何操作二、常见算子三、自定义卷积模糊四、综合例程一、理论1.卷积概念卷积是图像处理中一个操作,是kernel在图像的每个像素上的操作。Kernel本质上一个固定大小的矩阵数组,其中心点称为锚点(anchor point)2.卷积如何操作把kernel放到像素数组之上,求锚点周围覆盖的像素乘积之和(包括锚点),用来替换锚点覆盖下像素点值...原创 2020-04-04 15:02:02 · 200 阅读 · 0 评论 -
OpenCV笔记(十三)基本阈值操作
文章目录一、理论二、阈值类型1.阈值二值化2.阈值反二值化3.截断4.阈值取零5.阈值反取零6.总结三、综合例程一、理论图像阈值(threshold)阈值是什么?简单点说是把图像分割的标尺二、阈值类型Binary segmentation1.阈值二值化threshold binary左下方的图表示图像像素点Src(x,y)值分布情况,蓝色水平线表示阈值2.阈值反二值...原创 2020-04-03 16:52:41 · 236 阅读 · 0 评论 -
OpenCV笔记(十二)图像金子塔-上采样与降采样
文章目录一、理论1.图像金字塔概念2.高斯金字塔3.高斯不同二、相关API三、综合例程一、理论1.图像金字塔概念我们在图像处理中常常会调整图像大小,最常见的就是放大(zoom in)和缩小(zoom out),尽管几何变换也可以实现图像放大和缩小,但是这里我们介绍图像金字塔一个图像金字塔式一系列的图像组成,最底下一张是图像尺寸最大,最上方的图像尺寸最小,从空间上从上向下看就想一个古代的金...原创 2020-04-03 14:06:54 · 233 阅读 · 0 评论 -
OpenCV笔记(十一)形态学操作应用
文章目录一、原理方法1.原理2.结构元素3.提取步骤二、代码实现第一步:输入彩色图像第二步:转换为灰度图像第三步:转换为二值图像第四步:定义结构元素第五步:开操作(腐蚀+膨胀)-检测第六步:后处理三、综合例程一、原理方法1.原理图像形态学操作时候,可以通过自定义的结构元素实现结构元素对输入图像一些对象敏感、另外一些对象不敏感,这样就会让敏感的对象改变而不敏感的对象保留输出。通过使用两个最基...转载 2020-04-03 13:19:43 · 295 阅读 · 0 评论 -
OpenCV笔记(十)形态学操作
文章目录一、形态学操作1.开操作2.闭操作3.形态学梯度四.顶帽5.黑帽二、相关API三、综合例程一、形态学操作1.开操作open先腐蚀后膨胀可以去掉小的对象,假设对象是前景色,背景是后景色 2.闭操作close先膨胀后腐蚀(bin2)可以填充小的洞(fill hole),假设对象是前景色,背景是黑色3.形态学梯度Morphological ...原创 2020-04-03 11:59:21 · 195 阅读 · 0 评论 -
OpenCV笔记(九)膨胀与腐蚀
文章目录一、形态学操作-膨胀二、形态学操作-腐蚀三、相关API四、综合例程五、附注TrackBar一、形态学操作-膨胀图像形态学操作 – 基于形状的一系列图像处理操作的合集,主要是基于集合论基础上的形态学数学形态学有四个基本操作:腐蚀、膨胀、开、闭膨胀与腐蚀是图像处理中最常用的形态学操作手段跟卷积操作类似,假设有图像A和结构元素B,结构元素B在A上面移动,其中B定义其中心...原创 2020-04-02 20:05:14 · 184 阅读 · 0 评论 -
OpenCV笔记(八)模糊图像
文章目录一、模糊原理1.前言2.卷积原理3.滤波分类1.归一化盒子滤波(均值滤波)2.高斯滤波3.中值滤波4.双边滤波二、相关API1.均值滤波2.高斯模糊3.中值模糊4.双边模糊三、综合例程一、模糊原理1.前言Smooth/Blur 是图像处理中最简单和常用的操作之一,使用该操作的原因之一就为了给图像预处理时候减低噪声使用Smooth/Blur操作其背后是数学的卷积计算,通常这些卷积算子...原创 2020-04-02 17:16:40 · 279 阅读 · 0 评论 -
OpenCV笔记(七)绘制形状与文字
文章目录使用cv::Point与cv::Scalar绘制线、矩形、圆、椭圆等基本几何形状填充矩形随机数生成cv::RNG绘制添加文字使用cv::Point与cv::ScalarPoint表示2D平面上一个点x,yPoint p;p.x = 10;p.y = 8;orp = Pont(10,8);Scalar表示四个元素的向量Scalar(a, b, c);// a = b...原创 2020-03-30 15:42:05 · 196 阅读 · 0 评论 -
OpenCV笔记(六)调整图像亮度与对比度
文章目录理论重要的API理论图像变换可以看作如下:像素变换 – 点操作邻域操作 – 区域调整图像亮度和对比度属于像素变换 - 点操作g(i,j)=αf(i,j)+βg(i,j)=\alpha f(i,j) + \betag(i,j)=αf(i,j)+β其中α > 0, β是增益变量重要的APIMat new_image = Mat::zeros( image....原创 2020-03-30 13:20:33 · 192 阅读 · 0 评论 -
OpenCV笔记(五)图像混合
文章目录理论-线性混合操作相关API(addWeighted)理论-线性混合操作g(x)=(1−α)f0(x)+αf1(x)g(x)=(1-\alpha)f_0(x)+\alpha f_1(x)g(x)=(1−α)f0(x)+αf1(x)其中α\alphaα的取值范围为0~1之间相关API(addWeighted)void cv::addWeighted( inp...原创 2020-03-30 12:00:25 · 171 阅读 · 0 评论 -
OpenCV笔记(四)图像操作
文章目录读写图像读写像素修改像素值Vec3b与Vec3F读写图像imread 可以指定加载为灰度或者RGB图像Imwrite 保存图像文件,类型由扩展名决定读写像素读一个GRAY像素点的像素值(CV_8UC1)Scalar intensity = img.at(y, x);或者 Scalar intensity = img.at(Point(x, y));读一个RGB像...原创 2020-03-30 10:21:55 · 168 阅读 · 0 评论 -
OpenCV笔记(三)Mat对象
文章目录一、Mat对象与IpIImage对象二、Mat对象构造函数与常用方法三、Mat对象使用四、Mat对象使用-四个要点五、Mat对象创建六、综合例程一、Mat对象与IpIImage对象Mat对象OpenCV2.0之后引进的图像数据结构、自动分配内存、不存在内存泄漏的问题,是面向对象的数据结构。分了两个部分,头部与数据部分IplImage是从2001年OpenCV发布之后就一直存在,是C...原创 2020-04-03 11:05:08 · 200 阅读 · 0 评论 -
OpenCV笔记(二)矩阵的掩膜操作
文章目录一、获取图像像素指针二、像素范围处理三、掩膜操作实现图像对比度调整四、综合例程函数调用filter2D功能五、附注1.OpenCV坐标系与row&col的关系2.getTickCount() & getTrickFrequency()一、获取图像像素指针CV_Assert(myImage.depth() == CV_8U);Mat.ptr(int i=0) 获取像素...原创 2020-04-03 11:02:42 · 226 阅读 · 0 评论 -
OpenCV笔记(一) 加载、修改、保存图像
文章目录一、加载图像二、修改图像三、显示图像四、保存图像五、综合例程一、加载图像 cv::imreadimread功能是加载图像文件成为一个Mat对象,其中第一个参数表示图像文件名称第二个参数,表示加载的图像是什么类型,支持常见的三个参数值IMREAD_UNCHANGED (<0) 表示加载原图,不做任何改变IMREAD_GRAYSCALE ( 0)表示把原图作为灰度图像加载...原创 2020-04-03 11:00:53 · 252 阅读 · 0 评论