OpenCV
文章平均质量分 72
OpenCV
金戈鐡馬
这个作者很懒,什么都没留下…
展开
-
OpenCV中八种不同的目标追踪算法
但麻烦的是,大数人拥有的是CPU,有没有办法能在自己的电脑上用CPU就能实现自己的目标跟踪能力。在视频目标跟踪中的期望是在当前帧中正确找到跟踪的对象,因为我们已经在所有(或几乎所有)以前的帧中成功跟踪了该对象,所以我们知道对象是如何移动的。对象的新位置是得分最大的位置。尽管跟踪器是通用的,但理论上,通过将传输集与特定类型的对象进行偏移,可以在特定对象(例如行人)上获得更好的结果。最大的区别是,它不只是将对象的当前位置视为一个正示例,还会在当前位置周围的一个小邻域中查找,以生成几个潜在的正示例。原创 2023-12-01 00:26:19 · 853 阅读 · 0 评论 -
OpenCV进阶 —— 调整图像亮度对比度
也就是像素值的大小的区别。那我乘以一个alpha系数,当alpha很大的时候就是放大了这种亮度值的差异,也就是提高了对比度,当alpha很小时,也就是缩小了亮度的差异,也就是缩小了对比度。线性变换有个问题,如上图,α=1.3 and β=40,提高原图亮度的同时,导致云几乎看不见了.如果要看见云的话,建筑的亮度又不够.如果查看不同变换下的灰度直方图的话可以看到.中间是原图的灰度直方图,可以看到低亮度值的像素点很多.与线性变换不同,对不同的原始亮度值,其改变强度是不同的,是非线性的.。最常用的是线性变换。原创 2023-04-17 00:45:00 · 2407 阅读 · 0 评论 -
在OpenCV中基于深度学习的边缘检测
边缘检测是计算机视觉中一个非常古老的问题,它涉及到检测图像中的边缘来确定目标的边界,从而分离感兴趣的目标。最流行的边缘检测技术之一是Canny边缘检测,它已经成为大多数计算机视觉研究人员和实践者的首选方法。让我们快速看一下Canny边缘检测。原创 2023-11-28 00:42:16 · 652 阅读 · 0 评论 -
使用OpenCV DNN模块部署YOLOv5中导出的ONNX模型
在上述代码中,我们使用置信度阈值来过滤预测的边界框,并绘制边界框和类别标签,并显示结果图像。原创 2023-08-05 08:00:00 · 470 阅读 · 0 评论 -
使用 Python 的基于边缘和基于区域的分割
它将为选定的块添加更多的像素,或者进一步将块点缩小为更小的段,并将它们与其他更小的块点合并。基于区域的分割技术包括一种通过将图像分割成具有相似像素特征的不同部分来进行分割的算法。这是理解图像特征的非常重要的一步,因为我们知道边缘由有意义的特征组成并且具有重要的信息。区域中的每个像素(图像对象)在某些属性(如颜色、亮度、位置或纹理)上是相似的,这可以降低图像的复杂性以便于分析。在该代码中,我们使用了 canny 库,这是一种流行的边缘检测算法来检测输入图像的边缘。在分割的帮助下,还可以从图像中检测隐藏信息。原创 2023-11-16 09:49:56 · 241 阅读 · 0 评论 -
OpenCV图像纹理
尺度不变特征转换(Scale-invariantfeaturetransform或SIFT)是一种电脑视觉的算法用来侦测与描述影像中的局部性特征,它在空间尺度中寻找极值点,并提取出其位置、尺度、旋转不变量,此算法由DavidLowe在1999年所发表,2004年完善总结。 其应用范围包含物体辨识、机器人地图感知与导航、影像缝合、3D模型建立、手势辨识、影像追踪和动作比对。SIFT算法是为了解决图片的匹配问题,想要从图像中提取一种对图像的大小和旋转变化保持鲁棒的特征,从而实现匹配。这一算法的灵感也原创 2023-11-16 09:49:02 · 559 阅读 · 0 评论 -
OpenCV中的像素重映射原理及实战分析
把一个图像中一个位置的像素放置到另一个图片指定位置的过程就是像素重映射。为了完成映射过程, 有必要获得一些插值为非整数像素坐标,因为源图像与目标图像的像素坐标不是一一对应的.简单的说就是改变图片的位置(左,右,上,下,颠倒)for example (举个栗子):g(x, y)=f(h(x,y))。这里g()是目标图像,f()是原图像,h(x,y)是作用于(x,y)的映射方法函数。原创 2023-11-17 02:05:55 · 1081 阅读 · 0 评论 -
OpenCV遍历图像像素
迭代器是一种类,专门用于遍历集合的每个元素,并能隐藏遍历过程的具体细节。标准模板库(Standard Template Library,STL)对每个集合类都定义了对应的迭代器类,OpenCV也提供了cv::Mat的迭代器类,并且与C++ STL中的标准迭代器兼容。在编译时必须明确方法返回值的类型,因为cv::Mat可以接受任何类型的元素,所以程序员需要指定返回值的预期类型。为了构建计算机视觉应用程序,需要学会访问图像内容,有时也要修改或创建图像,如何操作图像的像素,就需要遍历一幅图像并处理每一个像素。原创 2023-11-14 19:07:13 · 951 阅读 · 0 评论 -
OpenCV 矩阵元素的数据类型
在以下两个场景中使用 OpenCV 时,我们必须事先知道矩阵元素的数据类型:但面对一大堆代码,我们有时并不清楚当前的矩阵元素究竟是什么类型,这篇文章就是以 类为例来解决这个问题。cv::Mat 类的对象有一个成员函数 用来返回矩阵元素的数据类型,返回值是 类型,不同的返回值代表不同的类型。OpenCV Reference Manual 中对 的解释如下所示:实际的代码如下所示:至此,知道了 函数,下一步更关键的就是返回值和具体类型之间的对应关系了。文章《[LIST OF MAT TYPE I原创 2023-11-14 00:55:47 · 306 阅读 · 0 评论 -
Dlib中matrix<float, 0, 1>矩阵的理解
matrix是 Dlib 中表示一个浮点数矩阵的数据结构。这个数据结构用于存储特征向量,其中每个元素都是一个浮点数。在 Dlib 中,matrix是一个多维数组的模板类,可以用来表示不同类型的矩阵。在这种情况下,float是矩阵中元素的类型,0表示矩阵的行数可以根据需要动态调整,1表示矩阵的列数固定为 1。你可以使用matrix来创建一个特征向量,并对其进行操作,例如计算欧氏距离或进行其他数学运算。原创 2023-09-28 18:58:58 · 574 阅读 · 0 评论 -
如何从Pytorch中导出ONNX模型并使用它实现图像超分
在本教程中,我们将介绍如何将 PyTorch 中定义的模型转换为 ONNX 格式,然后使用 ONNX 运行时运行它。ONNX 运行时是面向 ONNX 模型的以性能为中心的引擎,可跨多个平台和硬件(Windows、Linux 和 Mac)以及 CPU 和 GPU 进行高效推理。ONNX 运行时已被证明可以显著提高多个模型的性能,如此处所述。对于本教程,您需要安装 ONNX 和 ONNX 运行时。可以使用获取 ONNX 和 ONNX 运行时的二进制生成。原创 2023-08-04 08:00:00 · 572 阅读 · 0 评论 -
Opencv C++实现yolov5部署onnx模型完成目标检测
顾名思义,看检测出来的物体的精准度。以测量值为中心,在一定范围内,真值出现在该范围内的几率。根据图像大小,选择相应长度的二维数组。里面存了三个阈值和模型地址,其中。原创 2023-08-03 01:33:04 · 2252 阅读 · 2 评论 -
OpenCV应用实例 —— 二维码识别与定位
定位二维码不仅仅是为了识别二维码;还可以通过二维码对图像进行水平纠正以及相邻区域定位。定位二维码,不仅需要图像处理相关知识,还需要分析二维码的特性,本文先从二维码的特性讲起。二维码特性二维码在设计之初就考虑到了识别问题,所以二维码有一些特征是非常明显的。二维码有三个"回"字形图案,这一点非常明显。中间的一个点位于图案的左上角,如果图像偏转,也可以根据二维码来纠正。特征不明显,不易定位。不易定位二维码倾斜角度。两个点的次序无法确认,很难确定二维码是否放正了。原创 2023-04-18 00:15:00 · 3685 阅读 · 3 评论 -
OpenCV进阶 —— 轮廓查找和多边形包围轮廓
Canny一类的边缘检测算法可以根据像素之间的差异,检测出轮廓边界的像素,但它没有将轮廓作为一个整体。所以要将轮廓提起出来,就必须将这些边缘像素组装成轮廓。OpenCV中有一个很强大的函数,它可以从二值图像中找到轮廓:findContours函数。有时我们还需要把找到的轮廓画出来,那就要用到函数drawContours了。findContours函数和那就要用到函数drawContours函数一般配套使用。原创 2023-04-16 00:30:00 · 518 阅读 · 0 评论 -
OpenCV进阶 —— 模板匹配技术详解
最近我在参与实验室的一个项目,做的是发票的分类,分类的方法我首先采用的是模板匹配,也就是从一类发票中抠出一些特征区域,以此作为模板,自己设定阈值,低于阈值就是算是跟该类发票匹配了,就可以 对其进行分类。其实模板匹配实现的思想也是很简单很暴力的,就是拿着模板图片(姚明头像)在原图(全明星照)中从左上至右下依次滑动,直到遇到某个区域的相似度低于我们设定的阈值,那么我们就认为该区域与模板匹配了,也就是我们找到了姚明的位置,并把它标记出来。模板匹配的作用在图像识别领域作用可大了。可以,这就是模板匹配的要做的事情。原创 2023-04-15 00:15:00 · 741 阅读 · 0 评论 -
OpenCV进阶 —— 重映射与仿射变换
仿射变换本质是一个2* 3的矩阵M乘上原图的每个坐标,得到目标图的对应点坐标。2*3矩阵M中的2表示目标点坐标的x与y,3中的第三维是平移分量。map_x与map_y分别代表目标图中的(x,y)点在原图中的x坐标(由map_x提供)与y坐标(由map_y提供)。很简单,只要在图像一种拿出三个点(1,2,3),图像二也拿出对应的三个点(1,2,3),就可以求出两图间的映射关系!其中的 f 就是映射方式,也就说,像素点在另一个图像中的位置是由 f 来计算的。在OpenCV中,用的是remap函数实现重映射。原创 2023-04-14 00:15:00 · 226 阅读 · 0 评论 -
OpenCV进阶 — 图像拼接和图像融合技术
图像拼接在实际的应用场景很广,比如无人机航拍,遥感图像等等,图像拼接是进一步做图像理解基础步骤,拼接效果的好坏直接影响接下来的工作,所以一个好的图像拼接算法非常重要。再举一个身边的例子吧,你用你的手机对某一场景拍照,但是你没有办法一次将所有你要拍的景物全部拍下来,所以你对该场景从左往右依次拍了好几张图,来把你要拍的所有景物记录下来。那么我们能不能把这些图像拼接成一个大图呢?我们利用opencv就可以做到图像拼接的效果!比如我们有对这两张图进行拼接。原创 2023-03-31 01:00:00 · 2165 阅读 · 5 评论 -
OpenCV进阶 — 掩膜Mask
在OpenCV中我们经常会遇到一个名字:Mask(掩膜)。很多函数都使用到它,那么这个Mask到底什么呢?一开始我接触到Mask这个东西时,我还真是一头雾水啊,也对无法理解Mask到底有什么用。经过查阅大量资料后,也对Mask有一点自己的理解了,下面就说说我的理解。比如我要对一幅图进行抠图操作,这就要用到Mask了,那我就以抠图为例,解释Mask在里面的作用。先上程序,再一句一句剖析。该程序的功能就是抠出指定区域。原创 2023-03-30 00:45:00 · 703 阅读 · 0 评论 -
OpenCV进阶 — ROI区域与LOGO添加技术
它的英文全称是Region Of Interest,对应的中文解释就是感兴趣区域。感兴趣区域,就是我们从图像中选择一个图像区域,这个区域就是图像分析所关注的焦点。我们圈定这个区域,那么我们要处理的图像就从大图像变为一个小图像区域了,这样以便进行进一步处理,可以大大减小处理时间。定义ROI区域有两种方法:第一种,指定矩形的坐标,并且规定好他的长宽。//Rect四个形参分别是:x坐标,y坐标,长,高;注意(x,y)指的是矩形的左上角点第二种,指定感兴趣的行或列的范围。原创 2023-03-31 00:15:00 · 478 阅读 · 0 评论 -
OpenCV进阶 — 角点检测
角点检测是计算机视觉系统中用来获取图像特征的一种方法。我们都常说,这幅图像很有特点,但是一问他到底有哪些特点,或者这幅图有哪些特征可以让你一下子就识别出该物体,你可能就说不出来了。其实说图像的特征,你可以尝试说一下这幅图有几个矩形啊几个圆形啊,有几条直线啊,当然啦,你也可以说一下有几个角点。角点通常被定义为两条边的交点。比如,三角形有三个角,矩形有四个角,这些就是角点,也是他们叫做矩形、三角形的特征,我们看到一些几何图形具有三个角,那么我们便可以脱口而出说这是一个三角形。原创 2023-03-30 00:00:00 · 766 阅读 · 0 评论 -
OCR端到端不定长文本识别CRNN代码实现
CRNN是OCR领域非常经典且被广泛使用的识别算法,CNN采取了经典的VGG16,值得注意的是,在VGG16的第3第4个max pooling层CRNN采取的是1×2的矩形池化窗口(w×h),这有别于经典的VGG16的2×2的正方形池化窗口,这个改动是因为文本图像多数都是高较小而宽较长,所以其feature map也是这种高小宽长的矩形形状,如果使用1×2的池化窗口则更适合英文字母识别(比如区分i和l)。原创 2023-03-14 15:01:56 · 636 阅读 · 1 评论 -
OpenCV实现“全能扫描王”的图像矫正功能
相信很多人手机里都装了个“扫描全能王”APP,平时可以用它来可以扫描一些证件、文本,确实很好用,第一次用的时候确实感觉功能很强大啊算法很牛逼啊。但是仔细一想,其实这些实现起来也是很简单的,我想了下,实现的步骤应该就只有下面三个:将证件轮廓找到提取证件矩形轮廓四点进行透视变换二值化知道原理之后,我马上利用强大的opencv开发一个类似“全能扫描王”扫描工具。整理一下我们要制作的这个扫描工具有哪些功能:图像的信息区域的提取与矫正图像的二值化锐化和增强。原创 2023-03-14 14:12:33 · 2450 阅读 · 1 评论 -
OpenCV中的霍夫圆变换原理及霍夫圆检测
霍夫圆变换是将二维图像空间中一个圆转换为该圆半径、圆心横纵坐标所确定的三维参数空间中一个点的过程,因此,圆周上任意三点所确定的圆,经Hough变换后在三维参数空间应对应一点。霍夫圆变换的基本思路是认为图像上每一个非零像素点都有可能是一个潜在的圆上的一点,跟霍夫线变换一样,也是通过投票,生成累积坐标平面,设置一个累积权重来定位圆。原创 2023-03-07 10:53:20 · 378 阅读 · 0 评论 -
OpenCV中的霍夫线变换原理及霍夫直线检测
在许多应用场合中需要快速准确地检测出直线或者圆。其中一种非常有效的解决问题的方法是霍夫(Hough)变换,其为图像处理中从图像中识别几何形状的基本方法之一,应用很广泛,也有很多改进算法。最基本的霍夫变换是从黑白图像中检测直线(线段)。霍夫变换是在边缘检测的基础上提取边缘的特征,快速从找出边缘中的线段或圆,改进的霍夫变换可以识别出其他的几何形状。我们知道,霍夫线变换是一种用来寻找直线的方法. 在使用霍夫线变换之前, 首先要对图像进行边缘检测的处理,也即霍夫线变换的直接输入只能是边缘二值图像.原创 2023-03-07 10:51:20 · 459 阅读 · 0 评论 -
OpenCV中的SURF特征检测、匹配与对象查找
SURF算法工作原理选择图像中的POI(Points of interest) Hessian Matrix在不同的尺度空间发现关键点,非最大信号压制发现特征点方法、旋转不变性要求生成特征向量。原创 2023-03-06 12:29:22 · 1511 阅读 · 0 评论 -
OpenCV中的SIFT特征检测与匹配
SIFT特征和SURF特征比较比较项目SIFTSURF尺度空间极值检测使用高斯滤波器,根据不同尺度的高斯差(DOG)图像寻找局部极值使用方形滤波器,利用海森矩阵的行列式值检测极值,并利用积分图加速运算关键点定位通过邻近信息插补来定位与SIFT类似方向定位通过计算关键点局部邻域的方向直方图,寻找直方图中最大值的方向作为关键点的主方向通过计算特征点周围像素点x,y方向的哈尔小波变换,将x、y方向小波变换的和向量的最大值作为特征点方向特征描述子。原创 2023-03-06 12:29:05 · 1104 阅读 · 0 评论 -
OpenCV分水岭算法-距离变换应用实战
图像分割作为图像识别的基础,在图像处理中占有重要地位,通常需要在进行图像分割算法前找到轮廓或分割线,因此传统的分割算法主要集中在边缘检测、阈值处理等。分水岭算法分水岭算法是一种图像区域分割法,在分割的过程中,它会把跟临近像素间的相似性作为重要的参考依据,从而将在空间位置上相近并且灰度值相近的像素点互相连接起来构成一个封闭的轮廓,封闭性是分水岭算法的一个重要特征。其他图像分割方法,如阈值,边缘检测等都不会考虑像素在空间关系上的相似性和封闭性这一概念,彼此像素间互相独立,没有统一性。原创 2023-03-06 12:30:16 · 603 阅读 · 0 评论 -
OpenCV分水岭算法详解
通常的mark图像,都是在某个区域定义了一些灰度层级,在这个区域的洪水淹没过程中,水平面都是从定义的高度开始的,这样可以避免一些很小的噪声极值区域的分割。假设我们在盆地的最小值点,打一个洞,然后往盆地里面注水,并阻止两个盆地的水汇集,我们会在两个盆地的水汇集的时刻,在交接的边缘线上(也即分水岭线),建一个坝,来阻止两个盆地的水汇集成一片水域。在真实图像中,由于噪声点或者其它干扰因素的存在,使用分水岭算法常常存在过度分割的现象,这是因为很多很小的局部极值点的存在,比如下面的图像,这样的分割效果是毫无用处的。原创 2023-03-06 12:30:01 · 952 阅读 · 0 评论 -
OpenCV中使用RANSAC算法实现多张图像拼接
思路:(1)获取图像的特征点,将每张图片的特征点保存到一个vector中;(2)通过特征点匹配的方法,找到每张图片的共有特征点,并将其保存到一个vector中;(3)通过RANSAC算法求解出拼接的变换矩阵;(4)根据变换矩阵对每张图片进行仿射变换;(5)将拼接后的图片进行裁剪;(6)将裁剪后的图片拼接起来,最终得到拼接后的图片。原创 2023-02-22 00:45:00 · 1163 阅读 · 0 评论 -
Opencv之图像分割思路及代码实现
实现思路:1、首先对图像进行预处理,包括对图像进行高斯滤波、边缘检测和二值化等操作;2、使用分水岭算法对图像进行分割,它将图片分割成不同的区域;3、最后,根据分割后的区域,我们可以绘制出属于不同区域的轮廓,并将其作为分割图像的结果。原创 2023-02-21 19:15:00 · 534 阅读 · 0 评论 -
OpenCV图像矫正技术基础
OpenCV图像矫正技术是一种基于计算机视觉技术的图像处理技术,能够将一张图像进行矫正,使得图像看起来更加规则、清晰。OpenCV图像矫正技术的实现思路:1、获取图像:首先需要获取要处理的图像,对图像进行预处理,将图像转换成一种可用的格式,例如OpenCV中的Mat格式。2、图像校正:计算图像的主要特征(例如轮廓、线条),并计算出图像的旋转角度,然后使用OpenCV提供的函数进行图像旋转,实现图像校正。3、图像裁剪:校正完成后,可以使用OpenCV提供的函数进行图像剪裁,移除图像中多余的部分,以便用原创 2023-02-17 10:45:00 · 1304 阅读 · 0 评论 -
在Android NDK开发中将Bitmap集合返回给Java调用层输出的解决方案
因为要使用到C/C++,所有对外接口需要封装成JNI接口,传入Bitmap图像使用OpenCV库等工具进行处理后,再返回给Java调用层作输出显示,如果图像数据的传递采用裸数据的形式,直接将传回图像像素值数组明显是很难实现的,这时就需要通过在JNI中利用反射技术,将Java的List、Bitmap等类反射到JNI中去实现了。原创 2022-11-12 17:23:58 · 1448 阅读 · 0 评论 -
OpenCV图像矫正技术深入探讨
我们在日常生活中遇到的可不少,因为拍摄时拍的不好,导致拍出来的图片歪歪扭扭的,很不自然,那么我们能不能把这些图片尽可能地矫正过来呢?原创 2022-11-09 03:29:47 · 896 阅读 · 0 评论 -
OpenCV(C++)操作像素总结
OpenCV中提供了许多操作图像的函数,但是有时候我们需要直接操作像素来实现我们的功能,这篇文章总结了OpenCV中常见的操作像素的方法。原创 2022-11-09 03:15:05 · 1562 阅读 · 0 评论 -
OpenCV皮肤检测技术对比与总结
这篇文章对各大主流的皮肤检测算法做了个总结和实现。其实说白了,每个算法的思想都是大同小异的,都是根据总结出来的一些经验,设定皮肤颜色的范围,再将其过滤出来,不同的只是过滤的过程在不同的颜色空间下进行而已。我们可以根据自己的应用场景,适当地修改这些范围,以获得满意的结果。可以改善的方向就是,我们可以用合适的滤波器或者形态学处理一些噪声,来使得提取出来的皮肤更为干净。原创 2022-11-09 03:10:36 · 998 阅读 · 1 评论 -
OpenCV实现失焦模糊图像恢复
OpenCV实现失焦模糊图像恢复。原创 2022-11-09 02:38:48 · 1817 阅读 · 2 评论 -
利用OpenCV判断图像是否过亮或过暗
在处理图像自动亮度调节时,需要判断图像是否过亮或者过暗,从而根据图像给出的结果,进行调节。原创 2022-11-09 02:28:23 · 3385 阅读 · 0 评论