赞
踩
基于简单的阈值分割,将带识别的物体和背景在二值图中区分开,再提取并对比轮廓,最后将目标轮廓的物体标记。
1.阈值分割
cv2.cvtColor(image,cv2.COLOR_BGR2HSV):将bgr格式图像信息转换为hsv格式并返回。cv2.COLOR_BGR2HSV是类中的常数,注意字母大写。
cv2.medianBlur(image,ksize):将图像进行中值滤波处理,返回处理结果。ksize为滤波核的大小,为比1大的奇数。
cv2.inRange(image,lower_red,upper_red):将图像在lower_red和upper_red之间的颜色变为255,其他变为0,返回处理结果。其中,lower_red和upper_red可直接由元组表示。
cv2.getStructuringElement(,,):返回指定形状和尺寸的结构像素矩阵。第一个参数表示内核的形状,即cv2.MORPH_RECT cv2.MORPH_CROSS和cv2.MORPH_MORPH_CROSS之一。第二个参数表示内核的尺寸,第三个参数表示锚点的位置,默认为(-1,-1)。
cv2.morphologyEx(image, op, kernel) :进行各类形态学的变化。op为变化的方式,有cv2.MORPH_OPEN和cv2.MORPH_CLOSE两种。kernel表示方框的大小。
- import cv2
-
- image=cv2.imread("pic.jpg")
- hsv=cv2.cvtColor(image,cv2.COLOR_BGR2HSV)
- hsv=cv2.medianBlur(hsv,5)
- mask=cv2.inRange(hsv,(11,43,46),(25,255,255))
- line=cv2.getStructuringElement(cv2.MORPH_RECT,(15,15),(-1,-1))
- mask=cv2.morphologyEx(mask,cv2.MORPH_OPEN,line)
- cv2.imshow("mask",mask)
- cv2.waitKey(10000)
- cv2.destroyAllWindows()
2.提取轮廓
contours, hierarchy = cv2.findContours(image,mode,method):检测并返回物体的轮廓。其中,mode是轮廓的模式,cv2.RETR_EXTERNAL只检测外轮廓。method为轮廓的近似方法,cv2.CHAIN_APPROX_SIMPLE压缩水平方向、垂直方向、对角线方向的元素,只保留该方向的终点坐标。contours和hierarchy分别为返回的轮廓以及每条轮廓对应的属性。
cv2.drawContours(image, contours, contourIdx, color, thickness=None, lineType=None, hierarchy=None, maxLevel=None, offset=None):将轮廓画出。注意,函数会直接修改image,而不会返回值。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。