Android之OpenCV
文章平均质量分 72
学习Opencv的笔记
Hdnw
Her determination never wavered.
展开
-
报错opencv2:compileDebugJavaWithJavac
在Android studio中导入opencv3.4.3报错FAILURE: Build failed with an exception.What went wrong: Execution failed for task ':opencv:compileDebugJavaWithJavac'.Compilation failed; see the compiler error output for details.原创 2023-09-17 10:50:22 · 415 阅读 · 0 评论 -
OpenCV(四十七):RANSAC优化特征点匹配
RANSAC是一种常用的参数估计方法,全称为Random Sample Consensus(随机抽样一致性)。它的主要思想是通过随机选择一部分数据样本,构建模型并评估其拟合程度,迭代过程中逐步优化模型,最终得到一个拟合较好的模型。随机取样,计算规律(特征点匹配中计算单应矩阵)测试规律是否满足大多数数据循环前两步选取最佳规律,并输出满足数据的点。原创 2023-09-16 12:57:28 · 947 阅读 · 0 评论 -
OpenCV(四十六):特征点匹配
特征点匹配是一种在两幅图像中寻找相互对应的特征点,并建立它们之间的对应关系的过程。具体而言,首先通过特征检测算法在两幅图像中寻找相互对应的特征点,然后,对于每个特征点,通过描述子提取算法计算其描述子,最后,使用匹配算法对两组特征点的描述子进行比较,以找到相互匹配的特征点对。在OpenCV中,特征点匹配的类主要是。是一个抽象基类,用于特征点描述子之间的匹配操作。原创 2023-09-16 09:56:36 · 2363 阅读 · 0 评论 -
OpenCV(四十五):ORB特征点
特征点由关键点和描述子两部分组成:关键点是在图像中检测到的具有显著变化的位置坐标。描述子是用于表示关键点周围局部区域特征的向量或特征向量。2.ORB特征点原理ORB特征点由关键点FAST角点 和描述子BRIEF组成。2.1提取FAST角点的算法 FAST算法的思想:通过比较像素相对于中心像素有较大差别(过亮、过暗)时,则快速地检测出角点。步骤如下:原创 2023-09-15 16:11:05 · 505 阅读 · 0 评论 -
OpenCV(四十三):Shi-Tomas角点检测
Shi-Tomasi(也称为Good Features to Track)角点检测算法是一种改进的角点检测方法,它基于Harris角点检测算法,并针对一些不足进行了改进。与Harris角点检测不同,Shi-Tomasi使用了更简化的角点响应函数。角点响应函数即为较小特征值。原创 2023-09-15 10:02:29 · 820 阅读 · 0 评论 -
OpenCV(四十二):Harris角点检测
什么是角点?角点指的是两条边的交点,图中红色圈起来的点就是角点。Harris角点检测原理:首先定义一个矩形区域,然后将这个矩形区域放置在我的图像中,求取这个区域内所有的像素值之和,之后沿着多个方向移动我这个区域,再次计算新区域的像素值之和,如果移动前和移动后的像素值两者的差值比较小,那么就不是Harris角点,如果两者之间差值比较大,就认定移动前覆盖的区域内存在Harris角点。如图:下图两条线形成角点,而矩形区域分别表示平面、边界、角点。原创 2023-09-14 21:23:40 · 1029 阅读 · 1 评论 -
OpenCV(四十一):图像分割-分水岭法
OpenCV 提供了分水岭算法(Watershed Algorithm)的实现, 使用分水岭算法对图像进行分割,将图像的不同区域分割成互不干扰的区域。分水岭算法模拟了水在图像中的扩散和聚集过程,将标记的边界被看作是阻挡水扩散的高山,通过模拟水的扩散和聚集,最终确定图像的分割边界。原创 2023-09-14 15:45:28 · 560 阅读 · 0 评论 -
OpenCV(四十):图像分割—漫水填充
图像分割中的漫水填充(Flood Fill)算法是一种基于区域增长的像素分类方法。其原理是在图像中从种子点开始,逐渐向周围扩展,并根据一定的条件决定是否将相邻的像素归属于同一区域。漫水填充的基本原理如下:选择种子点。以种子点为中心,判断4邻域或者8邻域的像素值与种子点像素值的差值,将差值小于阈值的像素点添加进区域内。原创 2023-09-13 16:03:52 · 922 阅读 · 0 评论 -
[Android jni] Bitmap与Mat对象的相互转换
JNI实现Bitmap到Mat的转换 JNI实现Mat到Bitmap的转换 调用示例:在target_link_libraries中添加下面的依赖项。记得在CMakelist文件中添加以下代码,不然编译的时候会报错。原创 2023-09-13 15:36:33 · 752 阅读 · 0 评论 -
OpenCV(三十九):积分图像
积分图像中的每个像素表示了原始图像中对应位置及其左上方矩形区域内像素值的总和。如图,p0表示原始图像蓝色区域内像素值的总和。倾斜求和(Skewed Sum)是积分图像的一种扩展形式,用于计算图像区域内的像素和,其中区域并不是矩形而是斜边形。通过倾斜求和的积分图像,可以在常量时间内计算任意斜边形区域内的像素和。。如图,p0表示原始图像灰色区域内像素值的总和。原创 2023-09-12 18:55:11 · 454 阅读 · 0 评论 -
OpenCV(三十八):二维码检测
位置探测图形:通常,二维码中有三个位置探测图形,呈现L型或大角度十字架形状,分布在二维码的三个角上,用于帮助扫描设备定位二维码的位置和方向。对齐标记:通常是一系列小的正方形图案,用于帮助扫描设备在不同的距离和角度下更好地对准和解码二维码。计算模式:通常是一个小的正方形图案,用于校准扫描设备以捕捉和解码二维码的图像。位置探测图形分隔符:帮助扫描设备区分位置探测图形和二维码的数据区域。格式信息:格式信息用于指定二维码的编码格式和纠错级别。数据和纠错码:编码区还包含实际的数据和纠错码。原创 2023-09-12 14:25:57 · 2312 阅读 · 2 评论 -
OpenCV(三十七):拟合直线、三角形和圆形
点集拟合是一种通过拟合函数或曲线来近似描述给定离散数据点的技术,在点集拟合中,可以使用不同的函数或曲线拟合方法来拟合直线、三角形和圆形。: 对于给定的二维或三维数据点集合,可以使用三角形拟合方法来找到尽可能逼近数据点的最佳三角形。: 对于给定的二维数据点集合,可以使用圆形拟合方法来找到与数据点分布最佳匹配的圆。:对于给定的二维数据点集合,可以使用最小二乘法来拟合一条直线。原创 2023-09-11 21:20:40 · 1604 阅读 · 0 评论 -
OpenCV(三十六):霍夫直线检测
Step3:统计参数空间内每个方格出现的次数,选取次数大于某一值的方格作为表示直线的方格。Step2:将图像中每个非0像素通过映射关系求取在参数空间通过的方格。Step4:将参数空间中表示直线的方格的参数作为图像中直线的参数。Step1:将参数空间的坐标轴离散化。原创 2023-09-11 19:55:15 · 1439 阅读 · 1 评论 -
OpenCV(三十五):凸包检测
1.凸包检测介绍凸包检测是计算凸包的一种技术,凸包就是:给定二维平面上的点集,将最外层的点连接起来构成的凸边形,它是包含点集中所有的点。2.凸包检测函数convexHull()原创 2023-09-10 16:13:47 · 706 阅读 · 0 评论 -
OpenCV(三十四):轮廓外接最大、最小矩形和多边形拟合
1.轮廓外接最大矩形boundingRect()Rect cv::boundingRect ( InputArray array )array:输入的灰度图像或者2D点集,数据类型为vector或者Mat。示例代码2.轮廓外接最小矩形minAreaRect()RotatedRect cv::minAreaRect ( InputArray points )array:输入的灰度图像或者2D点集,数据类型为vector或者Ma3.轮廓外接多边形approxPolyDP()原创 2023-09-10 14:58:17 · 3002 阅读 · 0 评论 -
OpenCV(三十三):计算轮廓面积与轮廓长度
轮廓面积(Contour Area)是指轮廓所包围的区域的总面积。通常情况下,轮廓面积的单位是像素的平方。轮廓长度(Contour Length)又称周长(Perimeter),表示轮廓的闭合边界的长度。轮廓的边界可以看作是由一系列相邻像素点组成的连续路径,轮廓长度即为该路径的总长度。通常情况下,轮廓长度的单位是像素。原创 2023-09-10 09:43:01 · 1927 阅读 · 0 评论 -
OpenCV(三十二):轮廓检测
在计算机视觉和图像处理领域中,轮廓是指在图像中表示对象边界的连续曲线。它是由一系列相邻的点构成的,这些点在边界上连接起来形成一个封闭的路径。轮廓提供了对象形状的信息,可以用于图像分析、模式识别、物体检测和跟踪等应用。轮廓层级:轮廓层级(Contour Hierarchy)是指在包含多个轮廓的图像中,轮廓之间的包含关系和顺序关系。轮廓层级通常以树状结构的形式表示,其中每个轮廓是一个节点,节点之间通过层级关系连接。树的根节点表示最外层的轮廓。Next:同级的下一个轮廓,如果没有则为-1。原创 2023-09-08 21:38:06 · 795 阅读 · 0 评论 -
OpenCV(三十一):形态学操作
OpenCV 提供了丰富的函数来进行形态学操作,包括腐蚀、膨胀、开运算、闭运算等。该函数对输入图像中的前景区域进行腐蚀操作,通过用结构元素中的最小值替换区域中的像素值来收缩前景区域。该函数对输入图像中的前景区域进行膨胀操作,通过用结构元素中的最大值替换区域中的像素值来扩展前景区域。开运算是先对图像进行腐蚀操作,然后再进行膨胀操作。闭运算是先对图像进行膨胀操作,然后再进行腐蚀操作。anchor:结构元素中心的位置,默认为(-1, -1)表示结构元素的中心位置为核的中心。原创 2023-09-08 17:10:14 · 499 阅读 · 0 评论 -
OpenCV(三十):图像膨胀
图像膨胀的原理是将一个结构元素(也称为核或模板)在图像上滑动,并将其与图像中对应位置的像素进行比较。如果结构元素的所有像素与图像中对应位置的像素都匹配,那么该位置的像素值保持不变。如果结构元素的任何一个像素与图像中对应位置的像素不匹配,那么 图像中对应位置的像素被置为1,从而改变了图像的形状和结构。原创 2023-09-08 15:34:20 · 942 阅读 · 0 评论 -
OpenCV(二十九):图像腐蚀
腐蚀操作的原理是将一个结构元素(也称为核或模板)在图像上滑动,并将其与图像中对应位置的像素进行比较。如果结构元素的所有像素与图像中对应位置的像素都匹配,那么该位置的像素值保持不变。如果结构元素的任何一个像素与图像中对应位置的像素不匹配,那么该位置的像素值被置为0(或其他指定的像素值),从而改变了图像的形状和结构。原创 2023-09-08 14:21:50 · 2121 阅读 · 0 评论 -
OpenCV(二十七):图像距离变换
1.像素间距离街区距离、欧式距离和棋盘距离2.距离变换函数distanceTransform(),示例代码:原创 2023-09-07 21:05:45 · 855 阅读 · 0 评论 -
OpenCV(二十八):连通域分割
连通域分割是一种图像处理技术,用于将图像中的相邻像素组成的区域划分为不同的连通域。这些像素具有相似的特性,如相近的灰度值或颜色。连通域分割可以用于物体检测、图像分割、目标跟踪等应用。在连通域分割中,常用的领域关系有四领域和八领域。四领域表示一个像素与其上下左右四个相邻像素连接。八领域表示一个像素与其上、下、左、右、左上、右上、左下、右下八个相邻像素连接。原创 2023-09-07 21:09:32 · 2423 阅读 · 1 评论 -
OpenCV(二十六):边缘检测(二)
边缘的宽度和强度取决于Laplacian算子的大小和图像中的灰度变化。一阶导数可以帮助我们检测图像中的边缘,而二阶导数则可以检测边缘的交叉点,即图像中的角点。(大阈值检测图像边缘) (小阈值检测图像边缘) (高斯模糊后检测图像边缘)其中,I(x, y)表示图像中的像素值,d^2表示偏导数,dx表示在X方向上的导数,dy表示在Y方向上的导数。通过将该模板与图像进行卷积操作,我们可以计算图像中每个像素的Laplacian响应。原创 2023-09-07 12:56:46 · 1007 阅读 · 0 评论 -
OpenCV(二十五):边缘检测(一)
有两个Sobel卷积核,一个用于水平方向(x方向)的边缘检测,另一个用于垂直方向(y方向)的边缘检测。它包含两个卷积核,一个用于水平方向(x方向)的边缘检测,另一个用于垂直方向(y方向)的边缘检测。ddepth:输出图像的数据类型,它可以是负值(如-1)表示与输入图像保持一致,也可以是CV_8U、CV_16U、CV_32F等值,表示输出图像的深度。ddepth:输出图像的数据类型,可以是负值(如-1),表示与输入图像保持一致,也可以是CV_8U、CV_16U、CV_32F等值,表示输出图像的深度。原创 2023-09-07 09:37:13 · 654 阅读 · 0 评论 -
OpenCV(二十四):可分离滤波
可分离滤波的原理基于滤波器的可分离性。对于一个二维滤波器,如果它可以表示为水平方向和垂直方向两个一维滤波器的卷积,那么它就是可分离的。也就是说,一个二维滤波器可以通过两次一维卷积来实现,分别在水平和垂直方向进行滤波。函数将它们结合起来,我们可以实现高效的可分离滤波操作。通过将一维滤波器应用于图像的两个方向,并使用。参数表示X和Y方向上的标准差。函数用于获取高斯滤波器。参数表示滤波器的大小,原创 2023-09-06 20:16:45 · 1062 阅读 · 0 评论 -
OpenCV(二十三):中值滤波
中值滤波(Median Filter)是一种常用的非线性图像滤波方法,用于去除图像中的椒盐噪声等离群点。它的原理是基于邻域像素值的排序,并将中间值作为当前像素的新值。原创 2023-09-06 14:38:48 · 1491 阅读 · 0 评论 -
OpenCV(二十二):均值滤波、方框滤波和高斯滤波
由于高斯函数在中心点附近权重较大,而在离中心点越远的像素权重越小,它能够保留图像的整体结构,并且相对于其他平滑滤波器,它对细节的保留更好。方框滤波和均值滤波核基本上是一致的,主要的区别是要不要归一化处理,如果使用归一化处理,方框滤波就是均值滤波。:均值滤波的卷积核越大,图片的失真越明显,图片会更模糊,如果设置核的大小为(1,1),则结果是原始图像。高斯函数是一个连续的概率分布函数,它的形状是一个钟形曲线,中心点最高,两边逐渐变低。遍历图像像素:对于图像中的每个像素,高斯滤波器会考虑其周围邻域像素的值。原创 2023-09-06 14:16:21 · 1720 阅读 · 0 评论 -
OpenCV(二十一):椒盐噪声和高斯噪声的产生
噪声介绍图像在获取或者传输过程中会受到随机信号的千扰产生噪声。椒盐噪声:又被称作脉冲噪声,它会随机改变图像中的像素值,是由相机成像、图像传输、解码处理等过程产生的黑白相间的亮暗点噪声。高斯噪声:高斯噪声是指噪声分布的概率密度函数服从高斯分布(正态分布)的一类噪声。原创 2023-09-05 21:05:57 · 2286 阅读 · 0 评论 -
OpenCV(二十):图像卷积
卷积核是一个小的窗口矩阵,它通过在图像上滑动并与图像的像素进行逐元素相乘,然后求和来计算新图像中每个像素的值。anchor(可选):指定卷积核的锚点位置,如果未提供,则默认为(-1, -1),表示锚点位于卷积核的中心。重复以上步骤,将卷积核应用于图像的每个像素位置,生成最终的卷积结果图像。ddepth:输出图像的深度,通常设置为-1以保持与原始图像相同的深度。将卷积核在图像上滑动一个像素,并重复步骤3和4,直到覆盖整个图像。将卷积核放置在图像的初始位置上(通常是图像的左上角)。原创 2023-09-04 17:25:39 · 1381 阅读 · 0 评论 -
OpenCV(十九):模板匹配
OpenCV提供了一个模板匹配函数,用于在图像中寻找给定模板的匹配位置。图像模板匹配函数matchTemplate CV_EXPORTS_W void matchTemplate( InputArray image, InputArray templ,OutputArray result, int method, InputArray mask = noArray() );image:待模板匹配的原图像,图像数据类型为CV 8U和CV 32F两者中的一个。templ:模板图像,需要与im原创 2023-09-04 14:33:19 · 1679 阅读 · 0 评论 -
OpenCV(十八):图像直方图
示例代码中将原图像image转换为单通道灰度图像,然后将灰度图进行直方图均衡化,之后定义了直方图的参数,包括直方图条目数量、像素值范围、均匀性和累积性。示例代码:计算原始图像和目标图像的直方图,归一化直方图,计算累计直方图,构建累积概率误差矩阵,根据最小差值构建映射表,最后将原始图像的灰度级根据映射表调整为目标图像的灰度级。直方图匹配(Histogram Matching)是一种图像处理技术,用于将一副图像的直方图映射到另一副图像上,从而使它们的亮度分布或颜色分布相似。原创 2023-09-04 12:37:00 · 2228 阅读 · 0 评论 -
OpenCV(十七):拉普拉斯图像金字塔
构建拉普拉斯金字塔:从高斯金字塔的顶层开始,通过将下一层级的图像上采样并与当前层级的图像进行减法运算来构建拉普拉斯金字塔。原创 2023-09-03 15:38:04 · 916 阅读 · 0 评论 -
OpenCV(十六):高斯图像金字塔
高斯图像金字塔是一种多尺度表示的图像结构,通过不断对图像进行降采样(下采样)和上采样操作,获得不同分辨率的图像层级。通过构建高斯图像金字塔,可以获取到原始图像的不同分辨率版本,其中高层级的图像具有较低的分辨率,低层级的图像具有较高的分辨率。dstsize:可选参数,输出图像的尺寸,默认情况下,输出图像的尺寸为输入图像尺寸的一半,也可以手动指定输出图像的尺寸。dstsize:可选参数,输出图像的尺寸,默认情况下,输出图像的尺寸为输入图像尺寸的两倍,也可以手动指定输出图像的尺寸。原创 2023-09-02 18:43:20 · 1888 阅读 · 0 评论 -
OpenCV(十五):拷贝图像
浅拷贝的示例代码使用了简单的赋值操作符=将image赋值给shallowCopy,这只是复制了指针,所以两个图像将共享相同的图像数据。浅拷贝(Shallow Copy)是指将图像对象的指针复制给另一个对象,这两个对象将共享相同的图像数据。深拷贝的示例代码使用了copyTo()函数将image的像素数据复制到新的deepCopy对象中。深拷贝(Deep Copy)是指创建一个新的图像对象,并复制原始图像的像素数据到新对象中。这样每个图像对象都拥有自己的独立像素数据,修改一个图像不会影响其他图像。原创 2023-09-02 17:45:37 · 2759 阅读 · 0 评论 -
OpenCV(十四):ROI区域截取
在OpenCV中,你可以使用Rect对象或cv::Range来截取图像的感兴趣区域(Region of Interest,ROI)。无论你选择使用Rect对象还是cv::Range来截取图像,都能实现相同的效果。根据具体需求,你可以选择适合的方法进行图像截取。原创 2023-09-02 17:39:31 · 2997 阅读 · 0 评论 -
OpenCV(十三):图像中绘制直线、圆形、椭圆形、矩形、多边形和文字
1.绘制直线line()2.绘制圆形circle()3.绘制椭圆形ellipse()4.绘制矩形rectangle()5.绘制多边形fillPoly()6.绘制文字putText()7.例子原创 2023-09-02 15:23:05 · 2250 阅读 · 0 评论 -
OpenCV(十二):图像透视变换
透视变换是一种将原始图像映射到目标图像平面上的投影变换,又称为四点变换。| A B C || D E F || G H I |通过透视变换矩阵来实现,以下是透视变换的数学公式:其中,(x, y) 是原始图像中点的坐标,(x', y') 是透视变换后点的新坐标。矩阵元素 A、B、C、D、E、F、G、H 和 I 是透视变换矩阵的元素,它们决定了透视变换的具体变换方式。原创 2023-08-31 14:52:26 · 1245 阅读 · 0 评论 -
OpenCV(七):图像像素比较
两个图像像素比较操作min() :max() 介绍图像最大值与最小值寻找minMaxLoc()介绍原创 2023-08-31 10:44:46 · 224 阅读 · 0 评论 -
OpenCV(十一):图像仿射变换
仿射变换是由平移、缩放、旋转、翻转和错切组合得到,也称为三点变换。仿射变换可以通过一个2x3的仿射变换矩阵来表示,该矩阵包含了平移、缩放、旋转和剪切等变换的参数。仿射变换矩阵的一般形式如下:其中 (A, B) 和 (C, D) 控制了图像的旋转和缩放,(Tx, Ty) 控制了图像的平移。对于一个点 P(x, y) 在原始坐标系中,经过仿射变换后得到的新坐标 P'(x', y') 可以通过公式计算。仿射变换函数:warpAffine()图像旋转:getRotationMatrix2D()计算仿射变换get原创 2023-08-31 10:39:04 · 3393 阅读 · 1 评论 -
OpenCV(十):图像缩放、翻转、拼接的介绍与使用
使用 cv2.hconcat() 和 cv2.vconcat() 函数可以在水平和垂直方向上进行图像拼接。这是一种最简单的插值方法,它根据目标位置附近的最近一个已知像素的值来估算新的像素值。像素区域重采样是一种在图像缩小时常用的插值方法,它会根据目标位置附近的像素区域的平均值来计算新的像素值。Lanczos 插值是一种高质量的插值方法,它使用一个较大的像素邻域来进行插值。双线性插值考虑了目标位置附近的四个最近已知像素的值,然后根据距离和权重进行插值计算。使用 cv2.flip() 函数可以实现图像的翻转。原创 2023-08-30 21:06:42 · 1192 阅读 · 0 评论