淄博做淘宝网站,盐山做网站的,商标设计网免费,互联网广告是做什么的轮廓
cv2.findContours(img,mode,method)
mode:轮廓检索模式
RETR_EXTERNAL #xff1a;只检索最外面的轮廓#xff1b;RETR_LIST#xff1a;检索所有的轮廓#xff0c;并将其保存到一条链表当中#xff1b;RETR_CCOMP#xff1a;检索所有的轮廓#xff0c;并将他们组…轮廓
cv2.findContours(img,mode,method)
mode:轮廓检索模式
RETR_EXTERNAL 只检索最外面的轮廓RETR_LIST检索所有的轮廓并将其保存到一条链表当中RETR_CCOMP检索所有的轮廓并将他们组织为两层顶层是各部分的外部边界第二层是空洞的边界;RETR_TREE检索所有的轮廓并重构嵌套轮廓的整个层次;
method:轮廓逼近方法
CHAIN_APPROX_NONE以Freeman链码的方式输出轮廓所有其他方法输出多边形顶点的序列。CHAIN_APPROX_SIMPLE:压缩水平的、垂直的和斜的部分也就是函数只保留他们的终点部分。
def cv_show(img,name):cv2.imshow(name,img)cv2.waitKey()cv2.destroyAllWindows()
img cv2.imread(contours.png)
gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, thresh cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
binary, contours, hierarchy cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)
cv_show(img,img) #传入绘制图像轮廓轮廓索引颜色模式线条厚度
# 注意需要copy,要不原图会变。。。
draw_img img.copy()
res cv2.drawContours(draw_img, contours, -1, (0, 0, 255), 2)
cv_show(res,res)面积、周长参数
cnt contours[0]
#面积
cv2.contourArea(cnt)
#周长True表示闭合的
cv2.arcLength(cnt,True)模拟绘制轮廓
img cv2.imread(contours2.png)gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, thresh cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
contours, hierarchy cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)
cnt contours[0]draw_img img.copy()
res cv2.drawContours(draw_img, [cnt], -1, (0, 0, 255), 2)
cv_show(res,res)33
轮廓近似
epsilon 0.15*cv2.arcLength(cnt,True)
approx cv2.approxPolyDP(cnt,epsilon,True)draw_img img.copy()
res cv2.drawContours(draw_img, [approx], -1, (0, 0, 255), 2)
cv_show(res,res)边界矩形
img cv2.imread(contours.png)gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, thresh cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
contours, hierarchy cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)
cnt contours[0]x,y,w,h cv2.boundingRect(cnt)
img cv2.rectangle(img,(x,y),(xw,yh),(0,255,0),2)
cv_show(img,img)area cv2.contourArea(cnt)
x, y, w, h cv2.boundingRect(cnt)
rect_area w * h
extent float(area) / rect_area
print (轮廓面积与边界矩形比,extent)外接圆
(x,y),radius cv2.minEnclosingCircle(cnt)
center (int(x),int(y))
radius int(radius)
img cv2.circle(img,center,radius,(0,255,0),2)
cv_show(img,img)