
OpenCV
包含计算机图形视觉及机器学习
kicinio
这个作者很懒,什么都没留下…
展开
-
OpenCV.相机使用
相机使用相机的使用依赖VideoCapture类与具体的硬件设备VideoCapture类new VideoCapture对象的时候,一个构造器为index的构造器决定了初始化时摄像头位置,0代表前置(面向用户),1代表后置。isOpened() 方法返回是否可用避免竞争资源。Java代码(JavaFX Controller层)相关图片...原创 2022-06-03 17:50:07 · 479 阅读 · 1 评论 -
OpenCV.Harris角点检测
模板匹配模板匹配属于模式识别算法,用以从已定义的图片中与模板寻找相似内容。其函数声明如下:matchTemplate(src, templ, result, method);其中src为输入图片(大小W X H),templ为模板图像(大小w X h),result为输出的结果,大小为(W - w + 1) X (H - h + 1);method为计算方法。Java代码(JavaFX Controller层)public class Controller{ @FXML private原创 2022-06-03 17:22:29 · 245 阅读 · 0 评论 -
OpenCV.模板匹配
模板匹配模板匹配属于模式识别算法,用以从已定义的图片中与模板寻找相似内容。其函数声明如下:matchTemplate(src, templ, result, method);其中src为输入图片(大小W X H),templ为模板图像(大小w X h),result为输出的结果,大小为(W - w + 1) X (H - h + 1);method为计算方法。Java代码(JavaFX Controller层)public class Controller{ @FXML private原创 2021-12-21 21:19:25 · 2604 阅读 · 0 评论 -
OpenCV.直方图比较
直方图比较直方图系图像的本身属性之一,所受外界操纵变化较小,可用来比较图像间的相似度。假设两幅图像的直方图为H1与H2,其距离d则表示其相互匹配的程度,下面是OpenCV提供的计算方法:compareHist(H1, H2, method);H1与H2系Mat对象,method系计算方法,枚举类型,其值如下:HISTCMP_CORREL相关性HISTCMP_CHISQR卡方HISTCMP_INTERSECT相交HISTCMP_BHATTACHARYYA巴氏距离HI原创 2021-12-19 20:25:06 · 3136 阅读 · 0 评论 -
OpenCV.直方图均衡化
直方图均衡化直方图均衡化其作用为改变原有的图像直方图分布,用改变后的灰度LUT方式重建图像,来调整图像的亮度与对比度。其函数声明如下:equalizeHist(src, dst);其中src为单通道的8单位灰度图像,dst为输出源。Java代码(JavaFX Controller层)public class Controller{ @FXML private Text fxText; @FXML private ImageView imageView; @FXML pu原创 2021-12-09 20:28:49 · 2584 阅读 · 0 评论 -
OpenCV.图像直方图
图像直方图图像直方图反映的是图像的统计学特征,可大概看出其分布特征。假设某输入源为普通图像,经二值化后其显示像素值范围为0~255,其像素值经过排序后呈正常分布,那么某一像素值或某一像素范围可大概描述其像素特征。即其BIN(BIN越多,直方图对颜色的分辨率越强)取值范围越大,其空间分布越平均,越小则会有尖锐。基于此可以统计图像的BIN以此来绘制其直方图,其函数声明如下:calcHist(images, channels, mask, hist, histSize, ranges);各参数解释如下:原创 2021-12-07 21:20:17 · 782 阅读 · 0 评论 -
OpenCV.轮廓发现与绘制
轮廓发现与绘制一般而言,图像的轮廓都是由一系列的像素点构成,这些像素点属于二值图像的前景图像,每个轮廓都是一组点,而各组点则组成了轮廓。该方式的原理很复杂,简述即通过定义一系列的边缘点类型与拓扑集合结构类型,然后对二值图像的扫描来完成边缘类型的寻找与拓扑结构的构建,以此完成轮廓的发现。轮廓发现的函数声明如下:findContours(image, contours, hierarchy, mode, method, offset);各参数解释如下:image8单通道的输入图像。conto原创 2021-12-04 09:39:19 · 2610 阅读 · 0 评论 -
OpenCV.霍夫圆
霍夫圆霍夫圆的变换与霍夫直线类似,其原理较为复杂,这里暂时不以叙述。其检测实现是以灰度图像来找到候选区域,然会进行霍夫检测,以此减少算法的时间复杂度。但该方式极易受到噪声影响,对图像的噪声敏感,故先须进行噪声抑制处理。其函数声明如下:HoughCircles(image, circles, method, dp, minDist, param1, param2, minRadius, maxRadius);各参数解释如下:image8单位通道的灰度图形。circles输出的3个向量的数原创 2021-12-01 21:01:01 · 3447 阅读 · 0 评论 -
OpenCV.霍夫直线
霍夫直线HoughLinesP(images, lines, rho, theta, threshold, minLineLength, maxLineGap);各参数解释如下:images表示出入图像,8单位通道类型,一般为二值图。ines表示输出的每个直线的极坐标方程的两个参数。rho表示极坐标空间r值的每次步长,一般为1.theta表示角度,每次移动1即可。threshold表示极坐标中该点的累计数,累计值越大,得到的直线可能就越长。一般而言其取值范围为30原创 2021-11-30 20:06:03 · 2207 阅读 · 0 评论 -
OpenCV.Canny边缘检测
Canny边缘检测Canny边缘检测是一个较为特殊的检测图形,其特殊或者创新在于其使用两个阈值进行检测,然后将所有的边缘连接在一起,形成边缘曲线或线段。其对噪声较为敏感,故其在检测前需要进行降噪。滤波器可根据实际情况选择,但一般由于噪声的自然随机性,一般选择高斯滤波进行降噪。Canny一种步骤如下:高斯滤波:抑制噪声;灰度转换:在灰度图像上计算其梯度值;计算梯度:Sobel或Scharr;非最大信号抑制:在梯度图像上寻找局部最大值;高低阈值连接:连接边缘像素为线段,形成轮廓。其函数声明如下原创 2021-11-27 14:29:30 · 1691 阅读 · 0 评论 -
OpenCV.拉普拉斯算子(Laplacian)
拉普拉斯算子Scharr算子与Sobel算子是使用一阶导数进行处理图像的边缘部分。使用任意两者之一的方法进行计算图形梯度的时候在图形的边缘处会有跃迁,即原图像的梯度函数会在边缘处存在极值。那么对其使用二阶导数情况又该如何?请看下面的示例图:此图为一张典型的灰度跃迁图。我们可以很轻易地看到,其左侧向右部分至图形的中点在逐渐变黑,至中点后,其向右逐渐变白。那么其一阶导数图则如下所示:Sobel算子的原理基于此,我们再对其一阶导数进行求导,其二阶导数图如下:由图可知,在一阶导数的跃迁处,二阶导数过零原创 2021-11-27 11:23:40 · 3142 阅读 · 0 评论 -
OpenCV.Scharr梯度
Scharr梯度Scharr梯度算子分为X方向Y与方向,可以分别计算其各自方向的梯度图像,然后将其进行平均权重相加即可。其声明如下:Scharr(src, dst, ddepth, dx, dy);各参数解释如下:src表示此操作的源(输入图像)的Mat对象。dst表示此操作的目标(输出图像)的Mat对象。ddepth表示输出图像的深度,通常为CV_32F或CV_64F等。dx表示X方向的梯度,为1则启用,0则禁用,下同。dy表示Y方向的梯度Scharr算原创 2021-11-25 20:15:22 · 1114 阅读 · 0 评论 -
OpenCV.Sobel梯度
Sobel梯度Sobel梯度算子分为X方向Y与方向,可以分别计算其各自方向的梯度图像,然后将其进行平均权重相加即可。其声明如下:Sobel(src, dst, ddepth, dx, dy);各参数解释如下:src表示此操作的源(输入图像)的Mat对象。dst表示此操作的目标(输出图像)的Mat对象。ddepth表示输出图像的深度,通常为CV_32F或CV_64F等。dx表示X方向的梯度,为1则启用,0则禁用,下同。dy表示Y方向的梯度Sobel算子的Ke原创 2021-11-24 21:15:53 · 1634 阅读 · 0 评论 -
OpenCV.自适应阈值.Adaptive
自适应阈值.TRIANGLE对于Java代码(JavaFX Controller层)public class Controller{ @FXML private Text fxText; @FXML private ImageView imageView; @FXML private Label resultLabel; @FXML public void handleButtonEvent(ActionEvent actionEvent) throws IOExc原创 2021-11-23 20:59:10 · 1842 阅读 · 0 评论 -
OpenCV.自适应阈值.TRIANGLE
自适应阈值.TRIANGLE对于阈值操作,不仅可以手动设置阈值,还可以自动计算阈值,即根据输入源本身特征进行自适应阈值。本节自适应为TRIANGLE。TRIANGLE的含义为将灰度输入源的直方图寻找其最大峰值,从最大峰值作为新三角形的顶点作到水平轴的45°连线,在这个构成的三角形作到直方图的距离d,d即为阈值T。在OpenCV中,其枚举为Imgproc.THRESH_TRIANGLE。其几何描述如下:Java代码(JavaFX Controller层)public class Controller{原创 2021-11-22 21:09:40 · 1756 阅读 · 0 评论 -
OpenCV.自适应阈值.OTSU
自适应阈值.OTSU对于阈值操作,不仅可以手动设置阈值,还可以自动计算阈值,即根据输入源本身特征进行自适应阈值。本节自适应为OTSU。OTSU的含义为将灰度输入源的直方图划为两个部分,并计算其类内方差和类间方差,最小类内方差或最大类间方差即为阈值T。在OpenCV中,其枚举为Imgproc.THRESH_OTSU。其数学描述解释如下:假设src为双峰图像,则OTSU将会找到一个阈值t,以最小化由关系给出的加权类内方差:其中,实际上找到了一个位于两个峰值之间的 t 值,使得两个类的方差最小。J原创 2021-11-21 09:58:18 · 2469 阅读 · 0 评论 -
OpenCV.反阈值取零
反阈值取零反阈值取零的定义与阈值取零相反,即为大于阈值的就返回0,小于阈值的则返回原值。在OpenCV中该类的实现依赖于threshold() 函数。下面是该函数的声明:threshold(src, dst, thresh, maxval, type);各参数解释src表示此操作的源(输入图像)的Mat对象。mat表示目标(输出)图像的类Mat的对象。thresh表示阈值T。maxval表示最大灰度值,一般为255。type表示要使用的阈值类型的整数类型变量,反原创 2021-11-19 23:22:42 · 1717 阅读 · 0 评论 -
OpenCV.阈值取零
阈值取零阈值取零即为大于阈值的就返回原值,小于阈值的则返回0。可以保留原峰点去除特征不太明显的样本。在OpenCV中该类的实现依赖于threshold() 函数。下面是该函数的声明:threshold(src, dst, thresh, maxval, type);各参数解释src表示此操作的源(输入图像)的Mat对象。mat表示目标(输出)图像的类Mat的对象。thresh表示阈值T。maxval表示最大灰度值,一般为255。type表示要使用的阈值类型的整数原创 2021-11-18 20:33:49 · 432 阅读 · 0 评论 -
OpenCV.阈值截断
阈值截断阈值截断即为大于阈值的就返回阈值,小于阈值的则返回原值。可作到削去峰点并维持原样本的作用。在OpenCV中该类的实现依赖于threshold() 函数。下面是该函数的声明:threshold(src, dst, thresh, maxval, type);各参数解释src表示此操作的源(输入图像)的Mat对象。mat表示目标(输出)图像的类Mat的对象。thresh表示阈值T。maxval表示最大灰度值,一般为255。type表示要使用的阈值类型的整数类原创 2021-11-17 20:46:29 · 3990 阅读 · 1 评论 -
OpenCV.反阈值二值化
反阈值二值化反阈值二值化与阈值二值化互为逆操作。在OpenCV中该类的实现依赖于threshold() 函数。下面是该函数的声明:threshold(src, dst, thresh, maxval, type);各参数解释src表示此操作的源(输入图像)的Mat对象。mat表示目标(输出)图像的类Mat的对象。thresh表示阈值T。maxval表示最大灰度值,一般为255。type表示要使用的阈值类型的整数类型变量,反阈值二值化为Imgproc.THRESH原创 2021-11-16 20:28:47 · 2868 阅读 · 0 评论 -
OpenCV.普通阈值
普通阈值阈值本质上就是对图像进行分割的一个过程。利用阈值二值化可对灰度或彩色图像进行像素数据分类。普通阈值即阈值二值化就是针对给定的图像,以T作为阈值进行分割的过程。在OpenCV中该类的实现依赖于threshold() 函数。下面是该函数的声明:threshold(src, dst, thresh, maxval, type);各参数解释src表示此操作的源(输入图像)的Mat对象。mat表示目标(输出)图像的类Mat的对象。thresh表示阈值T。maxval表示最原创 2021-11-15 20:28:47 · 2419 阅读 · 0 评论 -
OpenCV.金字塔(Pyramid).均值偏移金字塔
均值偏移金字塔对于给定的一定数量样本,任选其中一个样本,以该样本为中心点划定一个圆形区域,求取该圆形区域内样本的质心,即密度最大处的点,再以该点为中心继续执行上述迭代过程,直至最终收敛。可以利用均值偏移算法,可实现彩色图像分割。pyrMeanShiftFiltering实现图像在色彩层面的平滑滤波,它可以中和色彩分布相近的颜色,平滑色彩细节,侵蚀掉面积较小的颜色区域,算法跟金字塔图像分割相比耗时较长。在OpenCV中该类的实现依赖于pyrMeanShiftFiltering() 函数。下面是该函数的声明:原创 2021-11-14 11:04:31 · 1623 阅读 · 0 评论 -
OpenCV.金字塔(Pyramid).向下金字塔
向下金字塔金字塔是对图像的一种分辨率操作,使用特定的平滑过滤器(例如高斯,拉普拉斯算子)对输入图像进行初始平滑,然后对平滑后的图像进行二次采样。这个过程重复多次。最主要的用途是图像的分割。用分辨率来解释图片的的简单结构。简单来说,向下金字塔可使输入源的分辨率缩小,如src分辨率为1920x1080,那么dst则为960x540。在OpenCV中该类的实现依赖于pyrDown() 函数。下面是该函数的声明:pyrDown(src, dst, dstsize, borderType);各参数解释sr原创 2021-11-14 10:40:08 · 1953 阅读 · 0 评论 -
OpenCV.金字塔(Pyramid).向上金字塔
向上金字塔金字塔是对图像的一种分辨率操作,使用特定的平滑过滤器(例如高斯,拉普拉斯算子)对输入图像进行初始平滑,然后对平滑后的图像进行二次采样。这个过程重复多次。最主要的用途是图像的分割。用分辨率来解释图片的的简单结构。简单来说,向上金字塔可使输入源的分辨率方法,如输入源分辨率为1920x1080,那么src则为3840x2060。金字塔操作期间,图像的平滑度增加并且分辨率(尺寸)减小。在OpenCV中该类的实现依赖于pyrUp() 函数。下面是该函数的声明:pyrUp(src, dst, dstsiz原创 2021-11-12 22:21:32 · 1972 阅读 · 0 评论 -
OpenCV.SQR箱式滤波
SQR箱式滤波SQR箱式滤波对滤波器内每个像素数值的平方求和,之后根据输入参数选择是否进行归一化操作。在OpenCV中该类的实现依赖于sqrBoxFilter 函数。下面是该函数的声明:sqrBoxFilter(src, dst, ddepth, ksize);各参数解释src表示此操作的源(输入图像)的Mat对象。dst表示此操作的目标(输出图像)的Mat对象。ddepth表示输出图像深度的整数类型变量,值为-1表示与输入图像相同。ksize表示内核大小的Size对象原创 2021-11-11 20:33:39 · 934 阅读 · 0 评论 -
OpenCV.箱式滤波
箱式滤波箱式滤波实现的效果与均值模糊类似,作用是将每个像素替换成其相邻矩形内像素的平均值,是低通滤波器。在OpenCV中该类的实现依赖于boxFilte() 函数。下面是该函数的声明:boxFilter(src, dst, ddepth, ksize, anchor, normalize, borderType);各参数解释src表示此操作的源(输入图像)的Mat对象。dst表示此操作的目标(输出图像)的Mat对象。ddepth表示输出图像深度的整数类型变量。ksize原创 2021-11-10 21:04:08 · 2339 阅读 · 0 评论 -
OpenCV.开闭操作
开闭操作开闭操作依赖于腐蚀和膨胀组合成的新的形态学操作。开操作主要用于去除图形的噪声或元件间连接;而闭操作主要用于填充闭合区域。开闭操作主要场景是较小的特征范围。下面是其声明:morphologyEx(src, dst, op, kernal);各参数解释如下:src表示此操作的源(输入图像)的Mat对象。dst表示此操作的目标(输出图像)的Mat对象。op操作行为,可为Imgproc.MORPH_CLOSE 或Imgproc.MORPH_OPENkernal表示ker原创 2021-11-08 20:34:10 · 1732 阅读 · 0 评论 -
OpenCV.腐蚀与膨胀
腐蚀与膨胀腐蚀与膨胀是图形的形态学操作,常见用于二值化或灰度图像,对与图像的噪声消除、特征处理有很好的作用。所谓膨胀即输入图像与结构元素进行卷积计算,取局部极大值来替代中心值;而腐蚀则为取局部极小值替换中心值。腐蚀与膨胀这两个函数定义如下:dilate(src, dst, kernal); //膨胀erode(src, dst, kernal); //腐蚀膨胀各参数解释:src表示此操作的源(输入图像)的Mat对象。dst表示此操作的目标(输出图像)的Mat对象。kernal原创 2021-11-07 15:28:28 · 3408 阅读 · 0 评论 -
OpenCV.自定义卷积核.梯度
自定义卷积核—梯度OpenCV除了提供由库进行计算的kernel,还支持自定义kernel来进行自定义滤波。常见的包括模糊、锐化、梯度计算等方式。利用梯度可检测图片边缘变化较大的地方,在二值化和特征提取时有很大作用。自定义kernel的实现依赖于filter2D() 函数。下面是该函数的声明:filter2D(src, dst, ddepth, kernel);各参数解释如下:src表示此操作的源(输入图像)的Mat对象。dst表示此操作的目标(输出图像)的Mat对象。ddept原创 2021-11-06 20:08:36 · 697 阅读 · 0 评论 -
OpenCV.自定义卷积核.锐化
自定义卷积核—模糊OpenCV除了提供由库进行计算的kernel,还支持自定义kernel来进行自定义滤波。常见的包括模糊、锐化、梯度计算等方式。自定义kernel的实现依赖于filter2D() 函数。下面是该函数的声明:filter2D(src, dst, ddepth, kernel);各参数解释如下:src表示此操作的源(输入图像)的Mat对象。dst表示此操作的目标(输出图像)的Mat对象。ddepth输出图像深度,值为-1则表示与输入图像一致。kernel自原创 2021-11-05 22:28:24 · 2543 阅读 · 0 评论 -
OpenCV.自定义卷积核.模糊
图像各向异性滤波Java代码(JavaFX Controller层)在这里插入代码片运行图原创 2021-11-04 20:33:17 · 809 阅读 · 0 评论 -
OpenCV.均值迁移滤波
均值迁移滤波均值迁移滤波通过概率密度来估算与中心迁移的方式进行图像边缘保留滤波。在OpenCV中该类的实现依赖pyrMeanShiftFiltering 函数。下面是该函数的声明:pyrMeanShiftFiltering(src, dst, sp, sr);各参数解释src表示此操作的源(输入图像)的Mat对象。dst表示此操作的目标(输出图像)的Mat对象。sp图像色彩空间,即窗口大小sr图像色彩像素值范围,即像素差值范围Java代码(JavaFX Contr原创 2021-11-02 20:51:44 · 590 阅读 · 0 评论 -
OpenCV.高斯双边滤波
高斯双边滤波高斯双边滤波属于非线性滤波,该类滤波被称为图像边缘保留滤波,又称EPF方法,其作用类似于现在的“美颜”、“美图”类产品所呈现的效果。在OpenCV中该类的实现依赖于bilateralFilter() 函数。下面是该函数的声明:bilateralFilter(src, dst, d, sigmaColor, sigmaSpace);各参数解释src表示此操作的源(输入图像)的Mat对象。dst表示此操作的目标(输出图像)的Mat对象。dkernal直径大小,一般取0。原创 2021-11-02 20:33:10 · 485 阅读 · 0 评论 -
OpenCV.最大值滤波与最小值滤波
最值滤波采用统计学方式进行kernal计算不仅有中值滤波,还有最大值与最小值滤波。顾名思义,最值滤波就是取kernal排序后得最大值或最小值来取代中心像素作为输出。不过在OpenCV中并无max或min滤波函数,而是以形态学操作dilate(扩张)与erode(侵蚀)调用而来。下面是其声明:dilate(src, dst, kernal);erode(src, dst, kernal);扩张各参数解释:src表示此操作的源(输入图像)的Mat对象。dst表示此操作的目标(输出图像)的原创 2021-10-31 19:55:39 · 4013 阅读 · 0 评论 -
OpenCV.中值模糊
中值模糊均值模糊与高斯模糊都属于线性滤波,除此之外还包括基于统计排序的滤波器,如本节的中值模糊,可用于特定环境下的图像降噪。所谓中值指的是kernal对像素值进行中值排序而得。在OpenCV中,中值模糊依赖于median() 函数而实现。该函数声明如下:medianBlur(src, dst, ksize)各参数解释如下:src表示此操作的源(输入图像)的Mat对象。dst表示此操作的目标(输出图像)的Mat对象。ksize表示内核大小的Size对象,注意该参数大小必须为奇数且原创 2021-10-30 16:12:16 · 461 阅读 · 0 评论 -
OpenCV.高斯模糊
高斯模糊均值模糊系kernal系数均相等情况下,实际上还存在着在空间上由于相对位置不同而引起kernal中每个系数有不同的权重的模糊,称之为高斯模糊。高斯模糊的每个系数的权重由高斯正太分布而生成,根据高斯公式可知,当δ为1时,对于kernal而言,越在卷积核中心,其系数越高。当然,δ越大,其模糊程度也越明显。在OpenCV中,高斯模糊由**Gaussianblur()**实现,该函数定义如下:GaussianBlur(src, dst, ksize, sigmaX)各参数解释如下:src表示此原创 2021-10-29 21:39:03 · 4496 阅读 · 0 评论 -
OpenCV.均值模糊
均值模糊Java代码(JavaFX Controller层)public class Controller{ @FXML private Text fxText; @FXML private ImageView imageView; @FXML public void handleButtonEvent(ActionEvent actionEvent) throws IOException { Node source = (Node) actionEvent原创 2021-10-28 20:34:14 · 428 阅读 · 0 评论 -
OpenCV.图形绘制.文本
文本绘制在OpenCV中文本的绘制依赖于putText() 该方法。该函数一个常用构造函数如下:putText(img, text, org, fontFace, fontScale,color,thickness)下面是该函数的各参数解释:mat表示要在其上绘制矩形的图像的Mat对象。text表示要添加的文本的字符串变量。org表示图像中左下角文本字符串的Point对象,即文本的第一个字符变量左下角的位置。fontFace表示字体类型的整型变量。fontScal原创 2021-10-27 20:51:49 · 494 阅读 · 0 评论 -
OpenCV.图形绘制.箭头
箭头绘制在OpenCV中箭头的绘制依赖于arrowedLine() 该函数。该函数的一个重载函数如下:Imgproc.arrowedLine(mat, pt1, pt2, color, thickness);各参数解释如下:mat表示要在其上绘制箭头的图像的Mat对象。pt1 和 pt2两个Point对象,表示要绘制的箭头的点。其中pt1系起点,pt2系箭头点。color表示矩形颜色的标量对象(BGR)。thickness表示厚度。Java代码(JavaFX Co原创 2021-10-25 20:58:48 · 1454 阅读 · 0 评论 -
OpenCV.图形绘制.折线
折线绘制在OpenCV中折线的绘制依赖于polylines() 该函数。其解释如下:mat表示要在其上绘制矩形的图像的Mat对象。pts包含MatOfPoint类型的对象的List对象。isClosed指定折线的布尔型类型的参数是否为关闭的。color表示矩形颜色的标量对象(BGR),Scalar类型。thickness表示矩形厚度的整数。其中pts包含的类型解释如下:pts接受一个List对象,该对象只可放入MatOfPoint类型的对象;而MatOfPoint是一组Poin原创 2021-10-24 09:55:01 · 2447 阅读 · 0 评论