轮廓检测
上采样,图像变大一倍,矩阵用0填充
img = cv2.imread('1,jpg')
cv_show('img',img)
up = cv2.pyrUp(img)
cv_show('up',up)下采样,图像缩小一倍 删除矩阵偶数行偶数列
img = cv2.imread('1.jpg')
cv_show('img',img)
down = cv2.pyrDown(img)
cv_show('down',down)
- 拉普拉斯金字塔
对图像G先down得到G_d,再G_d进行up得到G_d_u,然后对G_d_u先down再up,反复这个过程直到某一点结束
down = cv2.pyrDown(img)
down_up = cv2.pyrUp(down)
l_l = img - down_up
cv_show('l_l',l_l)
进行轮廓检测 先使图像变成灰度图,再进行二值化处理,再利用cv2.findContours()进行轮廓检测,再利用 cv2.drawContours()画出轮廓
1.cv2.findContours(二值化图像,轮廓检索方式,轮廓近似方式)
轮廓检索方式:一般使用cv2.RETR_TREE
cv2.RETR_EXTERNAL
只检测外轮廓
cv2.RETR_LIST
检测的轮廓不建立等级关系
cv2.RETR_CCOMP
建立两个等级的轮廓,上面一层为外边界,里面一层为内孔的边界信息
cv2.RETR_TREE
建立一个等级树结构的轮廓
轮廓近似方式:
cv2.CHAIN_APPROX_NONE
存储所有边界点
cv2.CHAIN_APPROX_SIMPLE
压缩垂直、水平、对角方向,只保留端点
cv2.CHAIN_APPROX_TX89_L1
使用teh-Chini近似算法
cv2.CHAIN_APPROX_TC89_KCOS
使用teh-Chini近似算法
cv2.findContours在Opencv3里有三个返回值:输入的二值化图像,图像的轮廓,轮廓的层析结构(本身包含两个 ndarray,每个ndarray对应一个轮廓,每个轮廓有四个属性)
cv2.findContours在Opencv2、Opencv4里有两个返回值:图像的轮廓,轮廓的层析结构
2.cv2.drawContours(原始图像,轮廓,轮廓的索引(当设置为-1时,绘制所有轮廓),画笔颜色,画笔大小)
cv2.drawContours返回值是绘制轮廓后的图像,注意原图像会变化,如果不想让原图变化的话可以copy一份
img = cv2.imread('TX.jpg')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
ret,thresh = cv2.threshold(gray,127,255,cv2.THRESH_BINARY)
thresh,contours,hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE)
draw_img = img.copy()
res = cv2.drawContours(draw_img,contours,-1,(0,0,255),2)
cv_show('res',res)轮廓特征
#轮廓特征
cnt = contours[0]
#面积
a = cv2.contourArea(cnt)
print(a)
#周长 True表闭合
L = cv2.arcLength(cnt,True)
print(L)轮廓近似
cv2.approxPolyDP() 主要功能是把一个连续光滑曲线折线化,对图像轮廓点进行多边形拟合
参数有3个:
InputArray curve:输入曲线,数据类型可以为vector
。 double epsilon:判断点到相对应的line segment 的距离的阈值。(距离大于此阈值则舍弃,小于此阈值则保留, epsilon越小,折线的形状越“接近”曲线。)
bool closed:曲线是否闭合的标志位。
#利用周长做阈值进行轮廓近似
epsilon = 0.02 * cv2.arcLength(cnt,True)
approx = cv2.approxPolyDP(cnt,epsilon,True)
外接矩形
利用cv2.boundingRec(cnt)返回cnt的外接矩形的左上点坐标和宽w和高h,再利用cv2.rectangle()画出外接矩形
cv2.rectangle()有五个参数:图像,(x,y)左上角坐标,(x+w,y+h)右下角坐标,画笔颜色,画笔粗细
x,y,w,h = cv2.boundingRect(cnt)
img = cv2.rectangle(img,(x,y),(x+w,y+h),(0,0,255),2)
cv_show('img',img)
手机扫一扫
移动阅读更方便
你可能感兴趣的文章