![](https://img-blog.csdnimg.cn/20190927151053287.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
OpenCV
文章平均质量分 55
OpenCV干货满满
优惠券已抵扣
余额抵扣
还需支付
¥69.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
thequitesunshine007
探索者
展开
-
opencv实现surface_matching记录
使用的cv版本为4.7.0 , surface_matching功能是附加在contrib中的,并未直接包含在opencv 4.7.0中,因此编译的时候需要考虑contrib。VS版本为2022, CMake版本为3.30-rc4.原创 2024-06-30 01:28:40 · 113 阅读 · 0 评论 -
手眼标定(外参)
flags的选项中有一个是CALIB_CB_CLUSTERING,可以使用or逻辑符与图案标识符一起设置,此时函数会以稍微不同的算法来寻找圆圈,这个替代算法对透视畸变具有较高的鲁棒性,但对背景的干扰也更加敏感,适合标定具有非常宽视野的相机。flags :(默认缺省)标识符,标识所采用的图案类型(对称圆点CALIB_CB_SYMMETRIC_GRID or 非对称圆点CALIB_CB_ASYMMETRIC_GRID)以及相关的算法参数。做圆点标定中的特征点提取时,发现对于部分存在较大透视畸变的标定图片,原创 2024-04-18 12:12:26 · 132 阅读 · 2 评论 -
二维点集的凸包点寻找算法
利用凸凹最直接的性质去判断,即:两个相近的凸点组成的直线,将会把他们的近邻点完全隔离在直线的同一侧。如此一来,先选取一个明显的凸点,如y坐标最小的点,以它为出发点,贪婪式搜寻即可。如下图所示:假设0点为y坐标最小的点,图中带编号的点为其近邻点(kd-tree加速查找),遍历编号1~13的点,当遍历到点1时,点0点1组成的直线将点2~点13完全隔离在直线同一侧(条件),满足这个条件后,将点1作为下一轮的出发点,重复上述过程即可。原创 2024-01-12 16:44:39 · 227 阅读 · 0 评论 -
LS最小二乘圆拟合
是关于列旋转(pivoting)的QR分解。它对所有矩阵都适用,而且速度也很快。原创 2023-10-29 00:44:34 · 204 阅读 · 0 评论 -
查找内轮廓(孔洞)
参数列表中有个数据结构参数:hierarchy(译层次结构),hierarchy是一个向量,其元素个数与查找到的轮廓总数相同,每一个元素中包含4个int类型数据hierarchy[i][0]~hierarchy[i][3]。分别表示:1表示同一级轮廓的下个轮廓的编号,如果这一级轮廓没有下一个轮廓,则为-1。2表示同一级轮廓的上个轮廓的编号,如果这一级轮廓没有上一个轮廓,则为-1。3表示该轮廓包含的下一级轮廓的第一个的编号,假如没有,则为-1。原创 2023-09-19 00:35:04 · 187 阅读 · 0 评论 -
高斯牛顿(非线性最小二乘优化方法)
【代码】高斯牛顿(非线性最小二乘优化方法)原创 2023-08-06 23:49:07 · 177 阅读 · 0 评论 -
求二维离散点集的凸包点
这类求解最外围的点集问题,我们称之为凸包问题,光光是⽤⾁眼去观察的话,这种问题我们很快就能得出答案,并且能马上说出哪⼏个点是解,但是如果让你敲代码,去解决这类的问题,可能很多⼈会不知道如何去下⼿。在讲解凸包这类问题的解法前,我们⾸先要先讲下向量积这个数学⼩知识。了解了上⾯这个数学⼩知识后,我们现在可以正式开始着⼿去解决凸包问题了,⾸先我们先思考下,如果我们要去解决凸包问题,我们就必须要⼀个个去寻找最外围的点,万事开头难,第⼀个点该从哪⾥找起呢?原创 2023-07-30 21:44:13 · 285 阅读 · 0 评论 -
明度补正(基于OpenCV实现)
光源不足够稳定,不同时刻排出的图片的平均亮度不足够稳定时,可以采用明度补正的办法。我们往往需要一张理想的模板图作为标准的亮度水平,其余的图要往模板上尽可能的接近。原创 2023-05-20 23:32:59 · 189 阅读 · 0 评论 -
最小二乘least-squares拟合曲线(三次或多次)
基于最小least-squares去拟合出多次曲线,考虑到了所有的样本点,因此这种方法对噪声敏感,尤其是遇到较为明显的噪声时,曲线的形状易受干扰。原创 2023-05-07 23:11:20 · 497 阅读 · 0 评论 -
基于OpenCV(C++)实现的RANSAC随机抽样一致性的曲线拟合(二次)
这篇文章与其类似,只是从拟合直线变为拟合曲线(二次)。有时候只懂得拟合直线可能是不够的,甚至只拟合二次曲线都不一定能满足实际需求。但好在我们可以触类旁通,举一反三。对于学习算法的人,最重要的就是理解它的思想,久而久之形成自己的思想体系,以后遇到问题的时候就能在脑子里闪现出方案。活学活用四个字很简单,但做起来却是很难很难,跟做人一样,活到老学到老。原创 2023-04-04 23:11:17 · 1177 阅读 · 0 评论 -
基于OpenCV实现的RANSAC随机抽样一致性直线拟合
该方法最早是由Fischler和Bolles提出的一种鲁棒估计方法,最早用于计算机视觉中位姿估计问题,现在已广泛应用于已知模型的参数估计问题中。其思想比较直观和容易理解,即可从坐标点中随机抽取两点,计算一条直线,然后判断所有的点与该直线的吻合程度,不断重复直到挑选出最好的。w为点集中内点的比例,一般可以在初始时设置一个较小值,如0.1,然后迭代更新;n为模型参数估计需要的最小点个数,直线拟合最少需要2个点。本文介绍基于ransac随机抽样一致性随机抽样一致性的直线拟合方法,涵盖一下的内容。原创 2023-03-16 20:12:26 · 776 阅读 · 0 评论 -
OpenCV中phase函数及其输出的角度
输出的四个角度分别为: 45(第一象限平分线) , 315(第四象限平分线) , 135(第二象限平分线) , 225度(第三象限平分线)。而c++中atan2函数是通过正切值返回弧度的,并通过判断x,y的正负决定象限,因此c++中atan2函数值域是从-Pi到Pi的。在图像坐标系 (图中XY)中:phase输出的角度范围为:0~360,顺时针旋转方向(来计算角度,计算精度大约为0.3弧度,当x,y相等时,angle为0。默认为false,即弧度,当置为true时,则输出为角度。phase函数根据函数。原创 2023-03-15 15:52:37 · 333 阅读 · 0 评论 -
图像旋转任意角度及其后图中点坐标的对应变化
图像中有一个点P, 将图像旋转任意角度(默认旋转点为图像中心)后,求旋转后的图像?求原图中的点P在旋转后图像中的坐标?问题分为2大步去解决。1)得到旋转矩阵.主要是借助于getRotationMatrix2D算子。getRotationMatrix2D得到的矩阵为2行3列。2)计算旋转后图像的新大小,旋转后图像的宽高发生变化。此外,图像的中心位置也发生偏移,需要进行偏移量调整。原创 2023-01-28 14:17:58 · 837 阅读 · 0 评论 -
手眼标定之九点法
包含使用背景、方法简述、案例代码。原创 2022-12-29 19:20:11 · 1985 阅读 · 0 评论 -
使用OpenCV求解物体(轮廓)的旋转角度的案例
在本人早期的博客里面介绍了 3种不同的方式去求解图像(轮廓)的旋转角度。今天着重提一下使用PCA(Principal Component Analysis)对轮廓进行主成分分析,进而得出物体的旋转角度。PCA是机器学习里面进行数据降维的常用方法之一。假设你有一组2D点,如上图所示。每个维度都对应于您感兴趣的一个特性。在这里,有些人可能会说点是按随机顺序设置的。然而,如果看得更仔细,你会看到一个线性模式(用蓝线表示),这是很难忽略的。主成分分析的一个关键点是降维。降维是指减少给定数据集的维数的过程。原创 2022-10-31 10:31:31 · 1905 阅读 · 0 评论 -
OpenCV实战案例之宽高度测量
实际项目中,很可能会遇到用视觉测量工件的高度、宽度(也可为直径)的情形,毕竟这类型也比较常见嘛!一般而言测量工件尺寸往往离不开物体的轮廓检测。提到轮廓就自然想到了边缘检测、二值化等一系列关联手段。原创 2022-10-26 13:47:09 · 2620 阅读 · 0 评论 -
基于OpenCV实现的多角度、多目标模板匹配项目实战案例
本案例采用NCC的匹配+金字塔(为了加速)思想,基于OpenCV实现的多角度、多目标模板匹配(不支持尺度不变)。若研究旋转+尺度不变性的匹配,请参考本人的《OpenCV实现多角度多尺度模板匹配(基于形状)》本案例提供代码(内含详细注释)+原始图像。原创 2022-09-14 17:04:38 · 4521 阅读 · 22 评论 -
HoughLines获取的角度说明
上图中,x/y分别为图像的X轴/Y轴(图像坐标系),HoughLines获取的是直线A与Y轴负方向的夹角(黄色箭头线顺时针旋转a度与直线A重合)。//theta为直线与Y轴负方向的夹角,以Y轴负轴为起始轴,逆时针旋转到直线的角度。//theta:弧度线条旋转角度( 0:垂直线;//极半径r:离坐标原点((0, 0)(也就是图像的左上角)的距离.Image必须是8位单通道图(可以使灰度图、二值图、边缘图等)Theta:角度分辨率,一般为CV_PI/180。Stn:(猜测)角度缩放。......原创 2022-08-17 16:35:34 · 343 阅读 · 0 评论 -
如何使用OpenCV在图像中抠出指定的颜色区域
我们往往需要在图像中抠出指定颜色的区域。在实际工况下这种指定颜色不是简单的纯色,往往难以单一的用R G B的某个范围值去确定。本文以PhotoShop为基准,在一副彩色图中按照提取指定范围内的HSV色彩空间。主要流程分为2步: 在PS中确定HSV的各自的范围--->转换值域后使用OpenCV提取颜色区域。......原创 2022-08-17 10:45:31 · 3755 阅读 · 0 评论 -
OpenCV实现多角度多尺度模板匹配(基于形状)
主要流程就是两步1.制作模板2.开始匹配(使用模板在搜索图像上进行匹配)制作模板对所有的模板进行特征提取,这边使用类似于canny边缘提取的算法来提取特征。开始匹配对搜索图像提取特征,将所有的模板在搜索图像上进行相似度计算,然后滑动窗口直到匹配完成。代码实现。三个主要的函数功能:制作模板(MakingTemplates),加载模板(LoadModel),匹配(Matching).........原创 2022-08-11 16:20:51 · 6997 阅读 · 8 评论 -
元器件正反(极性)检测案例
1.判断准则 元器件的中间有一条近似于盘子状的分割线,如果盘子开口是倒扣向下的,则为PASS, 如果盘子开口是向上的,则为FAIL. 2.算法步骤1)为节省运算时间,将原图的宽高均缩小一半。2)提取器件的轮廓。采用HSV过滤(在PhotoShop上先确定好H/S/V的上下界)、形态处理、轮廓查找+尺寸筛选3)求上述所得轮廓的最大内接圆。含圆心坐标与半径.4) 以圆心坐标为参照点,按照先验经验扣取出ROI。5)对ROI进行模糊滤波,与ROI原图进行作差处理。6...原创 2022-08-04 15:25:00 · 606 阅读 · 0 评论 -
基于OpenCV实现的图像拼接(配准)案例
-VS2015 C++-OpenCV 4.5.1-Windows 10 64位 Note: 两幅图像的拼接需要满足基本条件,一是图像本身要层次细节纹理丰富,不可单调重复(比如两张不同角度拍摄的棋盘网格图、重复单调的瓷砖墙/条纹等等是无法拼接的),二是两张图要有一定的重叠部分。1、对每幅图片进行特征点提取(AKAZE、sift、surf、ORB均可);2、对特征点进行描述和匹配;a、将一个点附近邻近点点采用K近邻算法归为一类点b、挑选出优秀的匹配点(good match);c、将匹配点连接在一起;3、进原创 2022-07-29 14:48:14 · 2267 阅读 · 1 评论 -
图像视角矫正实战案例--- 含透视变换矩阵(单应矩阵)/findHomography 与 getPerspectiveTransformd的区别
举个简单例子,在实际机器视觉场景中,由于安装误差,相机的光轴与被测基准平面之间往往不是严格的垂直关系。想靠机械加工去保证很高的垂直度,往往实现起来较为困难。由于上述的垂直度误差,那么一个标准矩形的物体在图像中可能是一个梯形,甚至不是梯形(对边皆不平行)。如下图所示这时候,为了能正常进行后续的图像处理及像素定位,我们需要做就需要视角矫正。需要求出当前拍摄图像与期望图像之间的变换关系(透视变换矩阵(单应矩阵)).............原创 2022-07-28 15:48:02 · 1690 阅读 · 0 评论 -
圆环工件毛刺(凸起)缺口(凹陷)检测案例
圆环工件毛刺(凸起)缺口(凹陷)检测案例 OpenCV C++原创 2022-07-26 18:51:04 · 1678 阅读 · 0 评论 -
使用OpenCV检测锯齿或阶梯状(缺口、残缺)特征
使用OpenCV检测锯齿或阶梯状(缺口、残缺)特征原创 2022-07-13 10:51:51 · 2527 阅读 · 0 评论 -
使用OpenCV+Zbar一维码(条形码)识别
使用OpenCV+Zbar一维码(条形码)识别原创 2022-07-08 16:37:22 · 1545 阅读 · 0 评论 -
求轮廓最大内接圆(后续篇)---距离变换法
求轮廓最大内接圆(后续篇)---距离变换法原创 2022-07-08 15:03:50 · 922 阅读 · 0 评论 -
求轮廓最大内接圆
1 原理介绍1.1 整体原理对于二值图像S的某轮廓C而言。图像中每个像素点Point(col, row),col原创 2022-07-01 11:38:17 · 1219 阅读 · 0 评论 -
OpenCV调用USB摄像头的点滴
OpenCV USB相机原创 2022-07-01 10:29:54 · 4895 阅读 · 0 评论 -
低对比度脏污检测
int main(int argc, char* argv[]){ Mat img = imread("2.png"); cv::Mat gray, blur, x, y, absX, absY, edged, thres; cvtColor(img, gray, COLOR_BGR2GRAY); medianBlur(gray, blur,11); //imshow("blur", blur); //求x方向梯度 Sobel(blur, x, CV_16S, 1, 0, 7); /.原创 2022-05-19 09:36:15 · 445 阅读 · 1 评论 -
表面气泡缺陷检测
int main(int argc, char* argv[]){ Mat img = imread("test.png"); cv::Mat gray, blur, x, y, absX, absY, edged, thres; cvtColor(img, gray, COLOR_BGR2GRAY); GaussianBlur(gray, blur, cv::Size(9, 9), 0); //imshow("blur", blur); //求...原创 2022-05-18 16:55:08 · 2738 阅读 · 0 评论 -
OPenCV将图片转为透明背景
思路: 将彩色图转为BGRA格式,改变A通道(透明度)int main(int argc, char* argv[]){ Mat src = imread("logo.png"); //imshow("src", src); Mat result; cvtColor(src, result, COLOR_BGR2BGRA); for (int i = 0; i < src.rows; i++) { for (int j = 0; ...原创 2022-05-18 14:47:32 · 3654 阅读 · 0 评论 -
计算轮廓的最大内接矩形
1,原理基于中心扩展算法,给定一个初始锚点,往四个方向向外拓展,每个方向在拓展时遇到轮廓边界则停止。获取的矩形是不带旋转的,且能否准确找到最大内接矩形,跟初始锚点的位置选取有一定关系。2,代码代码分为2部分,原理一样,实现方式不同。代码(1):#include <iostream>#include<opencv2/opencv.hpp>#include<vector>using namespace cv;using name原创 2022-05-18 10:58:48 · 1365 阅读 · 0 评论 -
关于单目测距的那些事
使用相似三角形计算物体到相机的距离假设物体的宽度为 W(单位mm),将其放到离相机距离为 D (单位mm)的位置,然后对物体进行拍照。在照片上量出物体的像素宽度 P(单位pixels),于是可以得出计算相机焦距 F 的公式:切记:这里计算出的F并非镜头标称的焦距,F的单位根本不是mm,而是pixels.那么这里的F和真实的镜头焦距f(单位mm)之间是什么关系呢? f = F*factor,其中factor为尺度因子(即在指定的物距D下,单位像素所代表的物理距离mm)...原创 2022-05-17 11:54:14 · 597 阅读 · 0 评论 -
细化图像去毛刺算法实战案例
本算法适用领域为以某种方式细化后的图像。算法的主要思路就是将所有分支与毛刺都看成不同长度的分支,如果分支长度过短小于一定长度就认为是毛刺被去掉。每一个分支的结尾点都是一个端点。算法具体流程:1)遍历所有连通区所有点,找到所有端点,端点的定义为其8邻域点只有一个像素点,如下图红色像素点八邻域内只有黑色点一个像素点,那么判断红色点为端点。原创 2022-04-03 19:09:07 · 5243 阅读 · 0 评论 -
皮革划痕缺陷检测案例(3种不同方法)
0 前言首先声明,这不是一个实战项目,而是偶然在某个地方看到的案例,图片也只有1张,而且是halcon实现的代码,本人对halcon不懂。于是在好奇心驱使下,使用opencv c++去实现一下。后面对检测出的缺陷部分还应该有后续的处理,但这里就省去了。在此主要是记录思想,思想是第一位的。原图案例中仅有的1张原图(原始图是6000x5000,很大,无法在博客上传原图),其有损保存图如下:1 实现说明代码主要展示了3种方法,其本质都是阈值分割:1)普通平滑2)频域平滑(涉及傅里叶变换原创 2022-04-03 18:40:00 · 7431 阅读 · 0 评论 -
OpenCV C++实现频域 巴特沃斯低通滤波
巴特沃思低通滤波器n级巴特沃思低通滤波器(BLPF)定义如下:D0为截至频率距原点的距离,D(u,v)是点(u,v)距 原点的距离不同于ILPF,BLPF变换函数在通带与被滤除的频率 之间没有明显的截断当D(u,v)=D0时,H(u,v)=0.5(最大值是1,当 D(u,v)=0)应用:可用于平滑处理,如图像由于量化不足产生虚假轮 廓时,常可用低通滤波进行平滑以改进图像质量。通常, BLPF的平滑效果好于ILPF(振铃现象)。代码:butterWor..原创 2022-03-27 22:22:32 · 903 阅读 · 0 评论 -
——检测毛刺
代码:cv::Mat Image = cv::imread("fin3.png", CV_LOAD_IMAGE_GRAYSCALE); imshow("src", Image); cv::Mat color; cvtColor(Image, color, ColorConversionCodes::COLOR_GRAY2BGR); //分割出环形区域 cv::Mat Region,close_region; threshold(Image, Region, 100, 2...原创 2022-03-19 23:55:40 · 2179 阅读 · 0 评论 -
OPENCV缺陷检测小例子
前阵子在某公众号看到halcon做缺陷检测的例子,由于不会使用halcon,其附带的.dev代码也看不懂。于是自己写了opencv代码来实现。原图如下:其目的是要检测红框中的缺陷:代码如下:#include "opencv2/core/core.hpp"#include "opencv2/imgproc/imgproc.hpp"#include "opencv2/calib3d/calib3d.hpp"#include "opencv2/highgui/h..原创 2022-03-19 23:07:35 · 7402 阅读 · 16 评论 -
把矩形的四个顶点按照一定的顺序排好(左上、右上、右下、左下,符合人的视角).
/**@ 作 用:把矩形的四个顶点按照一定的顺序排好(左上、右上、右下、左下,符合人的视角).* 因为图像坐标系Y正方向朝下的缘故,排序完成之后实际上左上点、右上点的图像Y坐标比较小。* 首先取四个点中Y坐标进行排序,最小的两个作为左上、右上(再按左上点的X坐标小于右上点)。*@ pts: 图像坐标系下的坐标。*@ sorted:排序之后的坐标。*@ 返回值: 0:成功。非零值:失败*/int RectFixedpointSort(const cv::Poi.原创 2022-03-07 11:13:56 · 2078 阅读 · 0 评论