- 前言
- 一、cv2.candy(image, threshold1, threshold2[, edges[, apertureSize[, L2gradient ]]])
- 二、CV2.threshold(src, thresh, maxval, type[, dst])
- 三、cv2.getStructuringElement(, )
- 四、CV2.dilate()和CV2.erode()
- 五、cv2.findContours()
- 六、cv2.drawContours()
- 七、cv2.boundingRect(cnt)
前言
opencv在轮廓方面用到的一些函数
一、cv2.candy(image, threshold1, threshold2[, edges[, apertureSize[, L2gradient ]]])
image为照片,threshold1为阈值一,threshold2为阈值二。
我感觉他的原理应该就是根据梯度和两个阈值比较,来求边缘线。
如果这个像素点的梯度大于threshold2,那就认为他是边缘线的一部分;
如果小于threshold1就不是边界的一部分;
如果介于两只之间则暂时保留,看有没有用。
他会返回数组。
src:表示的是图片源;
thresh:表示的是阈值(起始值);
maxval:表示的是最大值
type:表示的是这里划分的时候使用的是什么类型的算法
这是一个二值计算,如果咱们数组中的数大于thresh那么就让他等于maxval,如果小于thresh,那么就让他等于0.
他会返回两个值,一个是thresh,就是咱们输入的阈值,还有救是数组了。
这个返回的一个矩阵,第一个输入参数是矩阵的类型,第二个是大小
四、CV2.dilate()和CV2.erode()cv2.dilate()是膨胀用的
cv2.erode()是收缩用的
cv2.erode(src, # 输入图像
kernel, # 卷积核
dst=None,
anchor=None #锚的位置,其有默认值(-1,-1),表示锚位于中心
iterations=None, # 迭代次数,默认1
borderType=None,
borderValue=None)
膨胀
cv2.dilate(src, # 输入图像
kernel, # 卷积核
dst=None,
anchor=None,
iterations=None, # 迭代次数,默认1
borderType=None,
borderValue=None)
这个是用来寻找边缘的。
返回两个值:contours:hierarchy
contours 包括找到的所有边框
这个是绘制边界的
cv2.drawContours(image, contours, contourIdx, color[, thickness[, lineType[, hierarchy[, maxLevel[, offset ]]]]])
第一个参数是指明在哪幅图像上绘制轮廓;
第二个参数是上面检测出来的轮廓list的名字。
第三个参数指定绘制轮廓list中的哪条轮廓,如果是-1,则绘制其中的所有轮廓。
后面的参数很简单。其中thickness表明轮廓线的宽度,如果是-1(cv2.FILLED),则为填充模式。
这个函数很简单,cnt是一个轮廓点集合,也就是它的参数,可以通过cv2.findContours获取;
返回四个值,分别是x,y,w,h;
x,y是矩阵左上点的坐标,w,h是矩阵的宽和高
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)