Corner Detection 传统策略学习笔记

mask 实际上可能就是和图片同样大小的矩阵,这个矩阵和原图像进行位运算可以选定感兴趣的区域 (cv2.bitwise_or)

这和threshold实际上功能上有近似,设置相应的阈值同样可以找到想要的关键点,或者图像里的关键信息 (cv2.threshold)

mask和threshold都跟实际的任务场景有关。

cv2.erode(src, kernel, iteration) (输入图片, 核即方框的大小, 迭代次数)

原理:使用一个kernel在图像中不断平移,在kernel范围内,我们将所有颜色都替换成方框中占比最高的颜色。针对带有毛刺的图片可以去除毛刺,获取边界清晰的图像。

cv2.dilate(img, kernel, iteration)

原理:存在一个kernel,在图像上进行从左到右,从上到下的平移,如果方框中存在白色,那么这个方框内所有的颜色都是白色

erode和dilate组合起来类似目标提取,erode将图像的一些噪声信息抹平,dilate则将感兴趣的区域进行放大。(在基于轮廓的检测中,这两种预处理会非常有用。我们假设这样一种场景,我们希望检测两个顶点临近的四边形,如果直接使用cv2.findContours, 我们可能会找到一个八边形,而不是两个四边形,这时我们就可能使用cv2.dilate方法使两个四边形分离,然后再使用cv2.findContours)

cv2.findContours计算图片中的轮廓,返回轮廓顶点坐标和轮廓特征。

cv2.arcLength根据轮廓顶点坐标,计算轮廓的周长。

cv2.approxPolyDP(x, y, z)x是轮廓顶点坐标,y是拟合的多边形和实际轮廓的距离,值越小,越精确, z是是否闭环。

cv2.boundingRect(cnt)根据轮廓点计算框选的长方形的坐标和长宽

cv2.convexHull()计算凸包

针对特定的检测目标,传统视觉方法会设计特定的处理和选择策略。我们假设一个这样的场景,我们希望检测出图像中的四边形和六边形,那么我们本能的希望可以从轮廓判断来找到我们希望找到的对象位置。opencv中提供了轮廓检测,轮廓面积计算,凸包计算等逐步得到轮廓点,顶点坐标等信息,我们可以计算轮廓顶点间轮廓边的长度来进行筛选,去除不感兴趣的轮廓,筛选出我们的检测目标的轮廓。

针对以上的算法流程,实验性的我们可能使用不同的阈值以适应不同的光照情况:

(1)二值图像mask,我们希望mask能够尽可能的框选我们呢希望检测的目标,但实际上,我们为了算法鲁棒性的考虑,这个区域的框选一般不能过于贴合目标,因此就可能会有动态调整mask的需要

(2)在基于

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值