想要躺平的一枚
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
OpenCV(应用)—— 形状对比之Hu矩函数
在图像处理、计算机视觉和相关领域中,图像矩(image moments)定义为图像像素强度的某个特定加权平均值(矩),或者是此类矩的函数。图像矩通常用于分析、描述分割后的形状。通过图像矩可以获取一些形状的简单属性,比如面积、质心和方向信息。Hu 矩(Hu Moments)是Ming-Kuei Hu于1962年提出的一种图像特征描述方法,有7个用于形状描述的独特特征。它们是从图像的归一化中心矩计算得出的,这些矩是用于描述图像形状和几何特征的不变特征,具有平移、旋转和尺度不变性。原创 2025-06-27 15:42:49 · 311 阅读 · 0 评论 -
OpenCV(应用) —— 凸包检测的实战应用
这个是使用convexHul函数后的一个处理方式,但是convexityDefects 在计算时需要比较每个轮廓点到凸包的距离,这可能需要更多的计算时间,特别是在处理复杂或大量轮廓时。常见的找寻目标的外轮廓有矩形框(如最小外接矩阵)和圆形框,但这种包围框为了保持几何形状,与图形的真实轮廓贴合度较差。如果能找出图形最外层的端点,将这些端点连接起来,就可以围出一个包围图形的最小包围框,这种包围框叫凸包。这是因为该例图比较正,如果是比较倾斜的边,那它的外接矩阵就与图形的真实轮廓贴合度较差。原创 2025-03-13 17:31:39 · 264 阅读 · 0 评论 -
OpenCV(应用) —— 目标轮廓的相关应用
该函数获得返回的角度有一个应用,就是之前博客讲的仿射变换,它返回的中心点和角度可以作为仿射变换矩阵的参数:M = cv2.getRotationMatrix2D((cx, cy), angle, 1) ,这样我们可以将有角度的目标进行仿射变换旋转,让其处于水平方向。此外,OpenCV还提供了一个计算轮廓周长的函数arcLength(),用法和计算面积函数是一样的。目标轮廓的使用在图像分割项目中很常见,因为分割的标签图是一个可以完美检测目标轮廓的二值图。其中,轮廓的面积是一个常用的判别值,原创 2023-11-02 13:44:39 · 848 阅读 · 0 评论 -
OpenCV4(C++)——形态学(腐蚀、膨胀)
腐蚀和膨胀其实可以看成对图片进行了一次(多次)卷积操作。并且需要根据实际情况来选择使用哪种形态学操作,但通常来说,开运算(先腐蚀再膨胀)是比较常用的,因为其可以去除噪音和一些不相干的微小区域,并保留主要区域。(但感觉就像是滤波处理)原创 2023-11-02 10:21:17 · 1745 阅读 · 0 评论 -
OpenCV4(C++)—— 图像连通域的详细分析
图像连通域,其实就是图像分割的一种方法。它通过检测像素之间的连接关系和相似性来划分图像中的区域,以便进行后续处理。图像邻域和图像邻域分析就不介绍了,网上很多。本文会通过代码和结果图来直观展示。原创 2023-10-13 16:37:26 · 6556 阅读 · 3 评论 -
OpenCV4(C++)—— 边缘检测的使用
LINK本文只介绍如何使用。进行边缘检测时,通常是输入灰度图,因为灰度图像边缘检测结果较为明显。每种方法都有其特点和适用范围,具体选择哪种方法取决于应用需求和图像特征。如 Sobel 算子在边缘检测中具有较好的速度,因此被广泛应用于许多实时和性能要求不高的图像处理应用中。原创 2023-10-13 11:45:26 · 1213 阅读 · 0 评论 -
OpenCV4(C++)—— 图像噪声与图像滤波
图像噪声是图像在摄取或传输时所受的随机信号干扰,表现为图像信息或者像素亮度的随机变化。目前最常见的两者噪声是椒盐噪声和高斯噪声。例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考。原创 2023-10-12 15:05:08 · 1557 阅读 · 2 评论 -
OpenCV4(C++)——模板匹配
上面的图是作了一个拼接处理,但一般实际应用的图中,目标通常会存在一些旋转角度,尺寸大小不一致等问题,这些都会影响匹配结果,如下图所示。都是通过多次匹配来进行,无疑会增加很大时间消耗,可能会有更好的办法吧,以后遇到再说。得到相似度特征图后,再找到其中最大的值(或自定义一个阈值)的坐标,根据模板图的宽高,就能找到在原图的所在位置。(最简单的一个例子,用两张相同的图片传入模板匹配函数中,只会进行一次相似计算,最后得到的特征图数值为([1,])result图的数值为灰度值,最白的那个点就是匹配度最高的那个创建。原创 2023-10-12 11:51:09 · 817 阅读 · 0 评论 -
OpenCV4(C++)—— 直方图
直方图(Histogram)最开始在统计学中被提出,由一系列高度不等的纵向条纹或线段表示数据分布的情况。一般用横轴表示数据类型,纵轴表示分布情况。在图像领域,直方图用来更直观地展现各像素值出现的频率,例如常用的灰度直方图反映的是一幅图像中各灰度像素值(0-255)出现的频率之间的关系。原创 2023-10-11 16:53:05 · 2535 阅读 · 1 评论 -
OpenCV4(C++)—— 创建窗口滑动条来调参
可以看到,回调函数是可选参数,当默认为0时,则只更新value,要进行的操作在后面定义。例:二值化,选择参数阈值作为滑动条。使用回调函数,来简化上述代码。原创 2023-10-11 09:42:43 · 1636 阅读 · 0 评论 -
OpenCV4(C++)—— 几何图形的绘制
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考。原创 2023-10-10 14:45:09 · 1408 阅读 · 0 评论 -
OpenCV4(C++)—— 仿射变换、透射变换和极坐标变换
但是还有一点:上图的红色框和蓝色框看起来中心点是一样的,因为红色框位于蓝色框中心位置。(1)getRotationMatrix2D()是为了得到一个仿射变换矩阵,然后通过 cv::warpAffine 函数应用到图像上进行旋转操作(如果我们已知图像旋转矩阵,可以自己生成旋转矩阵而不调用该函数)。((2)前面说到,仿射变换矩阵是一个2×3的形式,而它的第三列就是平移向量b0,b1。根据矩阵相乘的规则,其中线性变换矩阵A为2×2的矩阵,平移向量B为2×1的向量,两者结合就是一个2×3的变换矩阵。原创 2023-10-09 16:45:33 · 1942 阅读 · 0 评论 -
OpenCV4(C++)—— 图片的基本尺寸变换
在 OpenCV 中,裁剪的常用方式有两种:cv::Rect 或 数组索引。但两者的原理都是定义裁剪区域的左上角坐标 (x, y) 和区域的宽度和高度。通常,对一张图片进行裁剪时,采用的是网格裁剪的方法来固定每一小张裁剪图片的大小。注:调整 dsize 参数或缩放因子 fx 和 fy 都可以控制图片大小变化,选择一个即可,原创 2023-10-09 10:53:03 · 1295 阅读 · 0 评论 -
OpenCV4(C++)—— 图像阈值化
图像阈值化在许多计算机视觉和图像处理任务中都是一个重要的预处理步骤。在边缘检测过程中,通过将图像转换为二值图像,可以突出图像中的边缘信息。通过选择适当的阈值,可以使边缘更加明显,以便于进一步的分析和提取。在文字识别任务中,图像阈值化可以用于将文本与背景分离。通过将图像转换为二值图像,可以增强文字的对比度,方便后续的文字检测、定位和识别。在图像分割中,通过将图像转换为二值图像,可以将感兴趣的目标与背景区域进行分离。阈值化可以将目标对象与背景进行明显的分离,从而方便后续的目标检测、跟踪或分析。原创 2023-10-08 15:25:20 · 737 阅读 · 1 评论 -
OpenCV4(C++) —— 图像数据类型转换和颜色模型转换
OpenCV中使用imread读取一张彩色图像时,默认采用的是BGR通道和整数类型(0-255,CV_8U)。还有其他的颜色模型,如YUV、HSV、Lab、GRAY等,都是可以进行转换的。OpenCV采用的是BGR的通道顺序,可以使用通道的分离和融合来进行验证。在某些情况下,会将整数类型(0-255)转换为浮点类型(0-1),可采用。在OpenCV中,彩色图像默认读取为RGB颜色模型(dst = src*缩放因子+偏移量。原创 2023-10-07 16:57:01 · 2480 阅读 · 0 评论 -
OpenCV4(C++)—— 视频和摄像头的加载、显示与保存
(2)VideoWrite()和VideoCapture()一样,都可以通过isOpened()函数判断是否成功创建一个视频流,可以通过get()查看视频流中的各种属性。主要步骤:(1)加载(打开)视频或视像头。(3)在保存视频时,我们只需要将生成视频的图像一帧一帧通过“<<”操作符(或者write()函数)赋值给视频流即可,最后使用release()关闭视频流。(2)在读取内容(每一帧图片)时,和ifstream一样,同样有多种方式,如通过“>>”运算符,或使用read成员函数等。来定义buffer。原创 2023-10-07 14:18:06 · 5292 阅读 · 0 评论 -
OpenCV4(C++)—— 图片的读取、(并排)显示与保存
C++和python两者的使用语法都是相同的imdecode和imencode是进行与内存缓冲区之间的操作(而不是磁盘),在某些场景下更加高效,但C++中使用这两个比较繁琐,python中使用较为方便。原创 2023-09-27 14:53:41 · 4298 阅读 · 3 评论 -
OpenCV4(C++) —— Mat类
在python的opencv中,也就是导入:import cv2。使用的是numpy和内置ndarray来存储和处理图像数据。而对于C++的opencv是没有ndarray的,也没有numpy库,而是使用cv::Mat类来表示图像数据与进行处理的。python是一种动态类型语言,无需显示的指定变量的类型。直接使用imread返回的就是ndarray对象,后续使用numpy库可以直接对其进行相关图像操作。import cv2C++是一种静态类型语言,任何变量都需要显示地指定一个数据类型。原创 2023-09-26 16:24:47 · 4057 阅读 · 1 评论 -
OpenCV4(C++) —— 模块介绍
OpenCV是一个开源的、集成了诸多图像处理模块的软件开发包(Software Development Kit,SDK),不同模块下包含了很多功能函数,并且还在不断更新中,目前主要是4.X版本。此版本有个地方要留意: 在include路径下,以前3.X版本有两个文件夹:opencv和opencv2,现在4.X将其合成opencv2一个文件夹,如:opencv\build\include\opencv2 ,在该文件夹下,就是OpenCV所包含的图像处理模块。原创 2023-09-26 10:01:48 · 462 阅读 · 0 评论
分享