02 2020 档案
摘要:寻找最值:minMaxLoc 函数 minMaxLoc 函数的作用是在数组中找到全局最小和最大值。 void minMaxLoc(InputArray src, double* minVal, double* maxVal = 0, Point* minLoc = 0, Point* maxLoc
阅读全文
摘要:对比直方图:compareHist 函数 double compareHist(InputArray H1, InputArray H2, int method); H1,H2,是要进行比较的直方图。 method,比较方法。有如下选择: 方法名 标识符 计算公式 相关 Correlation HI
阅读全文
摘要:直方图概述 简单来说,直方图就是对数据进行统计的一种方法,这些数据可以是梯度、方向、色彩或任何其他特征。它的表现形式是一种二维统计表,横纵坐标分别是统计样本和该样本对应的某个属性的度量。 计算直方图:calcHist 函数 calcHist 函数用于计算一个或多个阵列的直方图。 void calcH
阅读全文
摘要:实现图像修补、物体去除:inpaint 函数 void inpaint(InputArray src, InputArray inpaintMask, OutputArray dst, double inpaintRadius, int flags); src,输入图像,即源图像,填 Mat 类对象
阅读全文
摘要:计算轮廓面积:contourArea 函数 double contourArea(InputArray contour, bool oriented = false); contour,输入的二维点集(轮廓顶点),可以是 vector 或 Mat 类型。 oriented,面向区域标识符。有默认值
阅读全文
摘要:计算矩的目的 从一幅图像计算出来的矩集,不仅可以描述图像形状的全局特征,而且可以提供大量关于该图像不同的几何特征信息,如大小,位置、方向和形状等。这种描述能力广泛应用于各种图像处理、计算机视觉和机器人技术领域的目标识别与方位估计中。同时矩函数在图像分析中也有着广泛的应用,如模式识别、目标分类、目标识
阅读全文
摘要:寻找包裹轮廓的最小圆:minEnclosingCircle 函数 返回圆应满足:① 轮廓上的点均在圆形空间内。② 没有面积更小的满足条件的圆。 void minEnclosingCircle(InputArray points, Point2f& center, float& radius); po
阅读全文
摘要:寻找包裹轮廓的最小正矩形:boundingRect 函数 返回矩阵应满足:① 轮廓上的点均在矩阵空间内。② 矩阵是正矩阵(矩形的边界与图像边界平行)。 Rect boundingRect(InputArray points); 唯一一个参数是输入的二维点集,可以是 vector 或 Mat 类型。
阅读全文
摘要:生成逼近曲线:approxPolyDP 函数 该函数采用 Douglas-Peucker 算法(也称迭代终点拟合算法)。可以有效减少多边形曲线上点的数量,生成逼近曲线,简化后继操作。 经典的 Douglas-Peucker 算法描述如下: 在曲线首尾两点 A,B 之间连接一条直线 AB,该直线为曲线
阅读全文
摘要:凸包的定义: 包含点集 S 所有点的最小凸多边形称为凸包。 凸包绘制原理:Graham 扫描法 首先选择 y 方向上最低的点作为起始点 p0。 然后以 p0 为原点,建立极坐标系,做逆时针极坐标扫描,依次添加凸包点 p1,p2 ...pn(排序顺序根据极坐标角度大小) 若当前扫描点与下一个点构成的直
阅读全文
摘要:轮廓图像与 Canny 图像的区别 一个轮廓一般对应一系列的点,也就是图像中的一条曲线。轮廓图像和 Canny 图像乍看起来表现几乎是一致的,但其实组成两者的数据结构差别很大: Canny 边缘图像是一个点的集合,点与点之间没有联系。 轮廓图像是一个点集的集合,每个点集(即轮廓)内的点都是相邻的,点
阅读全文
摘要:直方图均匀化简介 从这张未经处理的灰度图可以看出,其灰度集中在非常小的一个范围内。这就导致了图片的强弱对比不强烈。 直方图均衡化的目的,就是把原始的直方图变换为在整个灰度范围(0~255)内均匀分布的形式,从而增加像素灰度值的动态范围,达到增强图像整体对比度的效果。 直方图均衡化的列表计算 序号 运
阅读全文
摘要:仿射变换的基本概念 仿射变换是一种二维坐标(x, y)到二维坐标(u, v)的线性变换,其数学表达式形式如下: 对应的齐次坐标矩阵表示形式为: 仿射变换保持了二维图形的“平直性”(直线经仿射变换后依然为直线)和“平行性”(直线之间的相对位置关系保持不变,平行线经仿射变换后依然为平行线,且直线上点的位
阅读全文
摘要:重映射的概念 重映射,就是把一幅图像中某位置的像素放置到另一个图片指定位置的过程。 实现重映射:remap 函数 将图像进行重映射几何变换,基于的公式为:dst (x, y) = src ( mapx (x, y), mapy (x, y) )。即 mapx 在(x,y)位置上存储的是目标像素的横坐
阅读全文
摘要:霍夫圆变换原理 霍夫圆变换的基本原理与霍夫线变换(https://www.cnblogs.com/bjxqmy/p/12331656.html)大体类似。 对直线来说,一条直线能由极径极角(r,θ)表示,而对于圆来说,我们需要三个参数:圆心(a,b),半径 r。 笛卡尔坐标系中圆的方程为: (x-a
阅读全文
摘要:霍夫线变换的原理 一条直线在图像二维空间可由两个变量表示,有以下两种情况: ① 在笛卡尔坐标系中:可由参数斜率和截距(k,b)表示。 ② 在极坐标系中:可由参数极经和极角(r,θ)表示。 对于霍夫线变换,我们将采用第二种方式极坐标系来表示直线,因此直线的表达式可为: 化简便可得到: 对于(x0,y0
阅读全文
摘要:Laplacian 算子简介 求多元函数的二阶导数的映射又称为 Laplacian 算子: 计算拉普拉斯变换:Laplacian 函数 void Laplacian(InputArray src, OutputArray dst, int ddepth, int ksize = 1, double
阅读全文
摘要:sobel 算子的基本概念 sobel 算子是一个主要用于边缘检测的离散微分算子,它结合了高斯平滑和微分求导,用于计算图像灰度函数的近似梯度。 其基础来自于一个事实,即在边缘部分,像素值出现“跳跃”或者较大的变化。如果在此边缘部分求取一阶导数,会看到极值的出现。正如下图所示: sobel 算子的计算
阅读全文
摘要:边缘检测的一般步骤 【第一步】滤波 边缘检测的算法主要是基于图像强度的一阶和二阶导数,但导数通常对噪声很敏感,因此必须采用滤波器来改善与噪声有关的边缘检测器的性能。常见的滤波方法主要有高斯滤波,即采用离散化的高斯函数产生一组归一化的高斯核,然后基于高斯核对图像灰度矩阵的每一点进行加权求和。 【第二步
阅读全文
摘要:阈值化 在对图像进行处理操作的过程中,我们常常需要对图像中的像素做出取舍与决策,直接剔除一些低于或高于一定值的像素。 阈值分割可以视为最简单的图像分割方法。比如基于图像中物体与背景之间的灰度差异,可以利用阈值分割出我们需要的物体。这种分割是像素级的分割,为了从一幅图像中提取我们需要的部分,应该用图像
阅读全文
摘要:我们经常会将某种尺寸的图像转化为其他尺寸的图像,如果需要放大或者缩小图像的尺寸,在 OpenCV 中可以使用如下两种方法: resize 函数,最直接的方法。 pyrUp 和 pyrDown 函数,即图像金字塔相关的两个函数,对图像进行向上采样和向下采样的操作。 pyrUp 和 pyrDown 其实
阅读全文
摘要:漫水填充:floodFill 函数 简单来说,漫水填充就是自动选中与种子像素相连的区域,利用指定颜色进行区域颜色填充。Windows 画图工具中的油漆桶功能和 Photoshop 的魔法棒选择工具,都是漫水填充的改进和延伸。 //第一个版本 int floodFill(InputOutputArra
阅读全文
摘要:扩充图像边界:copyMakeBorder 函数 在图像处理过程中,因为卷积算子有一定大小,所以就会导致图像一定范围的边界不能被处理,这时就需要将边界进行适当扩充。 void copyMakeBorder(InputArray src, OutputArray dst, int top, int b
阅读全文
摘要:开运算:先腐蚀后膨胀。 能够排除小亮点。 闭运算:先膨胀后腐蚀。 能够排除小黑点。 形态学梯度:膨胀图 — 腐蚀图。 对二值图像进行这一操作,可将图块的边缘突出出来,故可用来保留物体边缘轮廓。 顶帽:原图 — 开运算结果。 可以认为是找到那些被开运算排除的小亮点。 黑帽:闭运算结果 — 原图。 可以
阅读全文
摘要:腐蚀与膨胀是形态学滤波。其中,腐蚀是最小值滤波,膨胀是最大值滤波,即分别选取内核中的最小值与最大值赋值给锚点。若内核为 N×1 或 1×N 形状,可用于横纵方向直线检测。 膨胀:dilate 函数 void dilate (InputArray src, OutputArray dst, Input
阅读全文
摘要:图像滤波,指在尽量保留图像细节特征的条件下对目标图像的噪声进行抑制,是图像与处理中不可缺少的操作。 邻域算子,指利用给定像素及其周围的像素值,决定此像素的最终输出值的一种算子。线性邻域滤波器就是一种常见的邻域算子,像素的输出值取决于输入像素及其周围像素的加权和,权重是邻域算子相应位置上的值。 线性滤
阅读全文
摘要:归一化:就是将数据通过某种算法,限制需要的一定范围内。 归一化的目的:简而言之,是使得没有可比性的数据变得具有可比性,同时又保持相比较的两个数据之间的相对关系,如大小关系;或是为了作图,原来很难在一张图上作出来,归一化后就可以很方便的给出图上的相对位置等。 矩阵归一化:normalize 函数 vo
阅读全文
摘要:src.at<uchar>(i,j)[0] = saturate_cast<uchar>(data); if (data < 0) data = 0; else if (data > 255) data = 255; 好简单的博客,(●'◡'●)
阅读全文
摘要:对于三通道或四通道图像,有时要对某一通道的像素值进行修改或展示,这就需要进行通道分离操作。修改后,若要进行结果展示,就需要重新将各通道合并。 通道分离:split 函数 void split (InputArray m, OutputArrayOfArrays mv); m ,需要进行分离的多通道矩
阅读全文
摘要:计算数组加权和:addWeighted 可实现两个大小、类型均相同的数组(一般为 Mat 类型)按照设定权重叠加在一起。 void addWeighted(InputArray src1,double alpha,InputArray src2,double beta,double gamma,Ou
阅读全文
摘要:感兴趣区域:ROI 对感兴趣区域进行的一系列操作,相当于直接在原图相应部分进行操作。 Mat imageROI = srcImage(Rect(0,0,dstImage.cols, dstImage.rows)); srcImage 为原图像 Rect(0,0,dstImage.cols, dstI
阅读全文
摘要:动态地址访问像素:src.at<Vec3b>(i, j)[0]、src.at<uchar>(i, j) int b = src.at<Vec3b>(i, j)[0];int g = src.at<Vec3b>(i, j)[1];int r = src.at<Vec3b>(i, j)[2]; 用来访问
阅读全文
摘要:getTickCount 函数 返回 CPU 自某个事件(如启动电脑)以来走过的时钟周期数。 getTickFrequency 函数 返回 CPU 一秒钟所走过的时钟周期数。 二者结合使用,可以用来计算和观察一段程序或一种算法耗时。 代码演示: #include<opencv.hpp> using
阅读全文
摘要:鼠标操作:setMouseCallback 函数 借助回调函数,实现对鼠标每次操作的相应,即每进行一步鼠标操作,都会执行一次回调函数。 void setMouseCallback(const string& window_name, MouseCallback on_Mouse, void* use
阅读全文
摘要:创建滑动条:createTrackbar 函数 createTrackbar 函数用于创建一个可以调整数值的滑动条,并将滑动条附加在指定的窗口上。 int createTrackbar(const string& trackbar_name,const string& window_name,int
阅读全文
摘要:加载图像:imread 函数 Mat imread(const string& filename, int flags = 1); filename:需要载入的图像的路径名。 flags:加载图像的颜色类型,默认值为 1。flags = 1(IMREAD_COLOR):返回一个 BGR 类型的三通道
阅读全文