import cv2
import numpy as np
img = cv2.imread('6.png')
#img = cv2.imread('3.jpg')
imgray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, thresh = cv2.threshold(imgray, 127, 255, 0)
'''image, contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
上句会出现下面的错误
ValueError: not enough values to unpack (expected 3, got 2)'''
#修正代码如下
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
cv2.imshow('imageshow', img) # 显示返回值image,其实与输入参数的thresh原图没啥区别
#cv2.waitKey(0) #注释掉就可以同时显示
'''核心
cv2.drawContours(image, contours, contourIdx, color, thickness=None, lineType=None, hierarchy=None, maxLevel=None, offset=None)
第一个参数image表示目标图像,
第二个参数contours表示输入的轮廓组,每一组轮廓由点vector构成,
第三个参数contourIdx指明画第几个轮廓,如果该参数为负值,则画全部轮廓,
第四个参数color为轮廓的颜色,
第五个参数thickness为轮廓的线宽,如果为负值或CV_FILLED表示填充轮廓内部,
第六个参数lineType为线型,
第七个参数为轮廓结构信息,
第八个参数为maxLevel'''
img = cv2.drawContours(img, contours, -1, (225, 225, 0), 5) # img为三通道才能显示轮廓
cv2.imshow('drawimg', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
运行结果
原图
绘制轮廓