- 博客(28)
- 收藏
- 关注
原创 边缘检测 - Scharr 滤波器
一. Scharr 滤波器简介我们一般称 Scharr 为滤波器,而不是算子,它在OpenCV中主要是配合Sobel算子的运算而存在。当Sobel算子的内核大小为 3 时,可能产生比较明显的误差(Sobel算子只是球去了导数的近似值而已)。未解决这一问题,OpenCV提供了Scharr函数,但函数仅作用于大小为 3 的内核。该函数的运算与Sobel函数一样快,但结果却更加精确。二. Scha...
2020-03-02 23:40:45 1123
原创 边缘检测 - Laplacian算子
一. Laplacian算子简介Laplacian算子是 n 维欧几里德空间中的一个二阶微分算子。二阶导数可以用来进行检测边缘。因为图像是“二维”,需要在两个方向进行求导。使用Laplacian算子将会使求导过程变得简单。Laplacian算子的定义为:需要说明的是,由于Laplacian算子使用了图像梯度,它内部的代码其实是调用了Sobel算子。二. Laplacian() 函数介绍...
2020-03-02 23:25:20 5675
原创 边缘检测 - Sobel算子
一. Sobel算子简介Sobel算子是一个主要用于边缘检测的离散微分算子(discrete differentiation operator)。它结合了高斯平滑和微分求导,用来计算图像灰度函数的近似梯度。二. Sobel算子的计算过程分别在 x 和 y 两个方向求导。① 水平变化:将图像与一个奇数大小的内核Gx进行卷积。② 垂直变化:将图像与一个奇数大小的内核Gy进行卷积。在图...
2020-03-02 23:04:17 1545
原创 边缘检测 - Canny算子
一. Canny 算法简介Canny边缘检测算子是 John F.Canny 于 1986 年开发出来的一个多级边缘检测算法。更为重要的是,Canny 创立了边缘检测计算理论(Computational theory ofedge detection),解释了这项技术是如何工作的。Canny边缘检测算法以Canny的名字命名,被很多人推崇为当今最优的边缘检测的算法。二. Canny 边缘检测的...
2020-03-01 23:18:03 1628
原创 边缘检测 简介
边缘检测的一般步骤:【第一步】滤波边缘检测的算法主要是基于图像强度的一阶导数和二阶导数,但导数通常对噪声很敏感,因此必须采用滤波器来改善与噪声有关的边缘检测器的性能。常见的滤波有高斯滤波。【第二步】增强确定图像各点领域强度的变化值,增强算法可以将图像灰度点领域强度值有显著变化的点凸显出来,在编程的时候,可以通过计算梯度幅值来确定。【第三步】检测经过增强的图像,往往邻域中有很...
2020-03-01 22:20:09 807
原创 点多边形测试
点多边形测试测试一个点是否在给定的多边形内部、边缘或外部。API介绍double pointPolygonTest (InputArray contour, // 输入的轮廓Point2f pt, // 测试点bool measureDist)第三个参数 measureDist:当 measureDist 设置为 true 时,返回实际距离值。若返回值为正,表示点在多边形内...
2019-10-31 00:10:33 367 1
原创 使用多边形将轮廓包围
API介绍返回外部矩形边界:boundingRect() 函数此函数计算并返回指定点集最外面的矩形边界。Rect boundingRect( InputArray points )其唯一的一个参数为输入的二维点集,可以试 vector 或 Mat 类型。寻找最小包围矩形:minAreaRect() 函数此函数用于对给定的 2D 点集,寻找可旋转的最小面积的包围矩形。Rotat...
2019-10-29 23:58:49 348
原创 凸包 (Convex Hull)
凸包的定义在一个多边形边缘或内部,任意两个点的连线都包含在多变形边界或者内部。正式定义:包含点集合 S 中所有点的最小凸多边形称为凸包。凸包是一个计算几何中常见的概念。给定二维平面上的点集,凸包就是将最外层的点连接起来构成的凸多边形,它是能包含点集中所有点的。理解图形形状或轮廓的一种比较有用的方法便是计算一个物体的凸包,然后计算其图缺陷(convexity defects),。很多复杂物...
2019-10-28 23:52:19 2520
原创 轮廓发现
轮廓发现轮廓发现是基于图像边缘提取的寻找对象轮廓的方法。由于基于边缘提取,所以边缘提取的阈值选定会影响最终轮廓发现的结果。API介绍findContours() 发现轮廓void findContours(InputOutputArray image,OutputArrayOfArrays contours,OutputArray hierarchy,int mod...
2019-10-25 00:35:00 390
原创 模板匹配
参考资料:http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/imgproc/histograms/template_matching/template_matching.html?highlight=%E6%A8%A1%E6%9D%BF%E5%8C%B9%E9%85%8D模板匹配介绍模板匹配是一项在一幅图像中寻找与另一幅模...
2019-10-23 23:01:40 848
原创 直方图绘制(折线图)
基本概念对于图像梯度、像素值、像素角度等一切图像的属性值,都可以通过统计建立直方图。基于图像像素灰度直方图比较常见。直方图常见属性:dims 表示维度,对灰度图像来说只有一个通道值,dims=1;bins 表示在维度中子区域大小划分,划分256个级别则 bins=256;range 表示值得范围,灰度值范围为 [0~255] 之间;API说明把多通道图像分为多个单通道图像...
2019-10-21 18:44:16 2868
原创 直方图均衡化(Histogram)
图像的直方图直方图是图像中像素强度分布的图形表达方式。它统计了每一个强度值所具有的像素个数。直方图均衡化直方图均衡化是通过拉伸像素强度分布范围来增强图像对比度的一种方法。说得更清楚一些, 以上面的直方图为例, 你可以看到像素主要集中在中间的一些强度值上. 直方图均衡化要做的就是 拉伸 这个范围. 见下面左图: 绿圈圈出了 少有像素分布其上的 强度值. 对其应用均衡化后, 得到了中...
2019-10-20 12:19:53 2220 1
转载 Mat矩阵(图像容器)的创建及CV_8UC1,CV_8UC2等参数详解
转载:https://blog.csdn.net/maweifei/article/details/51221259
2019-10-19 23:48:10 728
原创 像素重映射
原理把输入图像中各个像素按照一定的规则映射到另外一张图像的对应位置上去,形成一张新的图像。简单来说,就是把一个图像中一个位置的像素放置到另一个图片指定位置的过程。假设我们有一个图像 I , 我们想满足下面的条件作重映射:h(x,y) = (I.cols - x, y )图像会按照 x 轴方向发生水平翻转: API介绍:remapremap(InputArray src, ...
2019-10-19 23:44:08 443
原创 (卷积)边缘像素处理
卷积边界问题:图像进行卷积操作时,图像的边界像素并不能被卷积操作到,原因在于边界像素没有完全跟 kernel 重叠,例如当33滤波时有1个像素的边缘没有被处理,55滤波时有2个像素的边缘没有被处理。边缘问题解决方法:在卷积操作开始之前,先增加边缘像素,比如3*3滤波时,在图像四周各填充1个像素的边缘,这样就确保图像的边缘能被处理,在卷积处理之后再去掉这些边缘。常用方法有:BORDE...
2019-10-06 18:47:40 4815
原创 自定义线性滤波
卷积简介卷积是图像处理中的一个操作,是 kernel 在图像的每个像素上的操作(kernel 本质上是一个固定大小的矩阵数组,其中心点称为锚点)把 kernel 放到像素数组之上,求锚点周围覆盖的像素乘积之和(包括锚点),用来替换锚点覆盖下像素点值,该过程称为卷积处理常用算子Robert 算子(Robert X 算子 和 Robert Y 算子) Sobel 算子(Sobel ...
2019-10-06 14:59:49 193
原创 图像阈值(threshold)
阈值是什么?最简单的图像分割的方法。应用举例:从一副图像中利用阈值分割出我们需要的物体部分(当然这里的物体可以是一部分或者整体)。这样的图像分割方法是基于图像中物体与背景之间的灰度差异,而且此分割属于像素级的分割。为了从一副图像中提取出我们需要的部分,应该用图像中的每一个像素点的灰度值与选取的阈值进行比较,并作出相应的判断。(注意:阈值的选取依赖于具体的问题。即:物体在不同的图像中有可能会...
2019-10-05 18:21:19 10665
原创 图像金字塔
一、概念图像的金字塔是一系列以金字塔形状排列的分辨率逐步降低,且来源于同一张原始图的图像集合。其通过梯次向下采样获得,直到达到某个终止条件才停止采样。我们将一层一层的图像比喻成金字塔,层级越高,则图像越小,分辨率越低。- 在图像处理中常常会调整图像大小,最常见的就是放大(zoom in)和缩小(zoom out)。这里的向下与向上采样,是对图像的尺寸而言的(和金字塔的方向相反),向上...
2019-10-05 15:54:24 247
原创 提取水平与垂直线
原理与方法:图像形态学操作的时候,可以自定义结构元素,通过该结构元素,可以使输入图像敏感的部分改变而不敏感的部分保留输出。通过使用两个最基本的形态学操作 -腐蚀和膨胀,使用不同的结构元素实现对输入图像的操作,最终得到想要的结果。提取步骤:输入色彩图像 -imread转换为灰度图像 -cvtColor转换为二值图像 -adaptiveThreshold定义结构元素开操作(腐蚀+膨胀...
2019-10-04 16:06:37 263
原创 形态学操作(开操作,闭操作,形态学梯度,顶帽,黑帽)
一、开操作 Open算法说明:对图像进行 先腐蚀后膨胀 的操作dst = open(src, element) = dilate(erode(dst, element))应用:假设图片对象前景色为白色,背景色为黑色,通过开操作,可以去掉小范围的对象元素。同样,也可以用于有效的消除亮点(白点)噪音。效果示例:二、闭操作 Close算法说明:对图像进行 先膨胀后腐蚀 的操...
2019-10-04 13:27:33 1354
原创 膨胀和腐蚀 (形态学操作简介)
一、形态学操作简介简单来说,形态学操作就是基于形状的一系列图像处理操作,通过将 结构元素 作用于输入图像来产生输出图像。(主要是基于集合论基础上的形态学数学)基本的形态学操作包括:膨胀、腐蚀、开、闭膨胀和腐蚀是图像处理中最常用的形态学操作,基本运用:消除噪声;分割独立的图像元素,连接相邻的图像元素;寻找图像中明显的极大值域或极小值域;二、膨胀将原图像 A 与任意形状的内核 B...
2019-09-29 11:26:57 6434
原创 图像模糊
图像模糊(Blur),是图像处理中简单且常用的操作之一,该操作的作用之一是为了给图像预处理是降低噪声。操作背后的原理是数学的卷积计算。通常卷积算子的计算都是线性操作,所以又叫线性滤波。(???一、归一化盒子滤波(均值滤波)相关API:均值模糊二、高斯滤波应用高斯分布,会保留图像原有的一些特点(高斯分布,中间权重大,大的值加权运算后还是比较大)相关API:高斯模糊...
2019-09-23 23:52:10 1281
原创 绘制形状和文字
绘制点Point()绘制线lint()绘制矩形rectangle()绘制圆形circle()绘制椭圆(或者弧线)ellipse()绘制多边形绘制填充多边形
2019-09-23 23:40:26 117
原创 线性图像混合
线性图像混合公式:g(x) = (1 - a) * f0(x) + a * f1(x) (a∈[0,1])图像线性相加API:addWeighted()首先,读取两张图片,两张图片的大小和类型必须相等(rows, cols, type相等)然后调用函数进行线性相加:Mat dst;double alpha = 0.5;addWeighted(src1, alpha, src2,...
2019-09-22 15:32:11 622
原创 读写像素
利用 image.at(i,j) 方法可以读写位置(i,j)处的像素值读写单通道图片像素值举个栗子:int pixel = src.at(row, col); // 读取像素值dst.at(row, col) = pixel; // 写入像素值程序示例:Mat gray;cvtColor(src, gray, CV_BGR2GRAY); // 转为灰度单通道图像Mat gray...
2019-09-22 11:09:59 731
原创 Mat对象特点
输出图像的内存是自动分配的使用OpenCV的C++接口,不需要考虑内存分配和释放等问题赋值操作和拷贝构造函数只会复制头部分和指针 //同一个指针指向同一个数据 Mat src = imread("*.jpg"); Mat dst1 = src; //赋值 Mat dst2(src); //拷贝构造函数使用clone()和copyTo()两个函数实现数据的完全复制...
2019-09-21 18:16:02 434
原创 掩膜操作(手动操作,API操作)
掩膜操作文中用到的掩膜:[0, -1, 0,-1, 5, -1,0, -1, 0]该掩膜同一颜色区域内不会改变颜色值,但是可以使亮色更亮,暗色更暗,加强对比度(突出颜色边界)#include <iostream>#include <opencv2/opencv.hpp>#include <opencv2/imgproc/types_c.h>#i...
2019-09-21 11:14:27 402
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人