B站学习网址:人工智能-计算机视觉
唐宇迪:图像处理与计算机视觉基础分享,其中包含超多实战项目:信用卡数字识别项目、文档扫描OCR识别项目、全景图像拼接项目、停车场车位识别项目、答题卡识别判卷项目、新闻数据集文本分类项目、基于CNN搭建图像识别模型项目等实战项目
今天我们来讲图像轮廓
import cv2
def cv_show(name,img):
cv2.imshow(name,img)
cv2.waitKey(0)
cv2.destroyAllWindows()
img = cv2.imread('1.png')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
ret, thresh = cv2.threshold(gray,127,255,cv2.THRESH_BINARY)
cv_show('thresh',thresh)
执行轮廓检测函数:
binary,contours,hierarchy = cv2.findContours(thresh,cv2.RETRTREE,cv2.CHAIN_APPROX_NONE)
其中,binary就是你二值的图像,contours是储存了你轮廓的信息,最后一个hierachy是一个层级,这个暂时用不上
绘制轮廓:
#传入绘制图像,轮廓,轮廓索引(-1代表所有轮廓),颜色模式,线条厚度
#注意需要copy,要不原图会变
draw_img = img.copy()
res = cv2.drawContours(draw_img,contours,-1,(0,0,255),2)
cv_show('res',res)
那你把图像轮廓整出来了肯定是想要获取一些特征的,那如何获取这些特征呢?
cnt = contours[0] #取第0个轮廓
#面积
cv2.contourArea(cnt)
#周长,True表示闭合的
cv2.arcLength(cnt,True)
#轮廓
cnt = coutours[0]
#边界矩形boundingRect
x,y,w,h = cv2.boundingRect(cnt)
img = cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),2)
cv_show('img',img)