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...