openCV簡要 10 輪廓檢測

2021-10-18 17:53:02 字數 1968 閱讀 4653

1.尋找影象中的輪廓

cv2.findcontours(img,mode,method)

mode為輪廓檢索模式:

retr_external:只檢索最外面的輪廓

retr_list:檢索所有輪廓,並把所有輪廓儲存在乙個鍊錶中

retr_ccomp:檢索所有輪廓,組織為兩層;第一層是外部邊界,第二層是空洞邊界

retr_tree:檢索所有輪廓並重構輪廓層次。

#轉換為二值影象準確度更高

ret,thresh=cv2.threshold(gray,

127,

255,cv2.thresh_binary)2.繪製輪廓

draw_img=img.copy(

)#避免覆蓋原影象

res=cv2.drawcontours(draw_img,contours,-1

,(0,

0,255),2

)#在img中畫出所有輪廓contours;-1為畫出所有輪廓,若為其他值則只畫出指定序號的輪廓;(bgr)表示線條顏色,2為線條寬度

3.輪廓特徵

#取出輪廓集合中的某個輪廓

con=contours[0]

#面積cv2.contourarea(con)

#周長cv2.arclength(con,

true

)#true表示輪廓是封閉的

4.輪廓近似

期望得到近似於輪廓的乙個規則圖形(以直代曲)

epsilon=

0.1cv2.arclength(con,

true

)#確定閾值,閾值一般按周長的百分比進行設定

#當弧上的某個點c到直線ab的距離小於這個閾值,則認為直線ab可以代替弧acb,否則近似為直線ac,cb然後繼續迭代處理。

true

)#將輪廓con按epsilon近似

res=cv2.drawcontours(draw_img,,-

1,(0

,0,255),

2)#按近似輪廓畫出

5.規則輪廓

#外接矩形

x,y,w,h=cv2.boundingrect(con)

#將輪廓直接以外置矩形代替

img=cv2.rectangle(img,

(x,y)

,(x+w,y+h),(

0,255,0)

,2)#畫矩形,在影象img中畫出以(x,y)為左上角,(x+w,y+h)為右下角的矩形,2為線條寬度

area=cv2.countarea(con)

x,y,w,h=cv2.boundingrect(con)

rect_area=w*h#矩形面積

ans=

float

(area)

/rect_area

print

('輪廓面積/矩形面積'

,ans)

#外界圓

(x,y)

,radius=cv2.minenclosingcircle(con)

center=

(int

(x),

int(y)

)radius=

int(radius)

img=cv2.circle(img,center,radius,(0

,255,0

),2)

opencv學習(四)輪廓識別

本章學習輪廓識別 bbb.cpp 定義控制台應用程式的入口點。include stdafx.h include using namespace std using namespace cv int tmain size refs size int captrefrnc.get cv cap prop...

opencv學習 9 輪廓提取

輪廓提取 主要針對二值影象 1 輪廓分為外輪廓和內輪廓 如下圖 外輪廓以c開頭 內輪廓以h開頭 其中img是二值影象,storage是記憶體儲存序列,contours指向儲存的第乙個輪廓,cvmemstorage storage cvcreatememstorage 0 記憶體儲存序列 cvseq ...

opencv 9 輪廓 性質

邊界矩形的寬高比 x,y,w,h cv2.boundingrect cnt aspect ratio float w h輪廓面積與邊界矩形面積的比 area cv2.contourarea cnt x,y,w,h cv2.boundingrect cnt rect area w h extent f...