OpenCV 初識輪廓(Python實現)

2021-09-24 11:54:49 字數 2177 閱讀 6361

什麼是輪廓

輪廓可以簡單認為成將連續的點(連著邊界)連在一起的曲線,具有相同的顏色或者灰度。輪廓在形狀分析和物體的檢測和識別中很有用

怎樣查詢輪廓

cv2.findcontours(image, mode, method[, offset])

#尋找乙個二值影象的輪廓。注意黑色表示背景,白色表示物體,即在黑色背景裡尋找白色物體的輪廓

引數:image:8位單通道影象。非零畫素值視為1,所以影象視作二值影象

mode:輪廓檢索的方式

mode

輪廓檢索的方式

cv2.retr_external

只檢索外部輪廓

cv2.retr_list:

檢測所有輪廓且不建立層次結構

cv2.retr_ccomp

檢測所有輪廓,建立兩級層次結構

cv2.retr_tree:

檢測所有輪廓,建立完整的層次結構

method:輪廓近似的方法

method

輪廓近似的方法

儲存所有的輪廓點

壓縮水平,垂直和對角線段,只留下端點。 例如矩形輪廓可以用4個點編碼。

使用teh-chini chain近似演算法

offset:(可選引數)輪廓點的偏移量,格式為tuple,如(-10,10)表示輪廓點沿x負方向偏移10個畫素點,沿y正方向偏移10個畫素點

返回值

contours:輪廓點。列**式,每乙個元素為乙個3維陣列(其形狀為(n,1,2),其中n表示輪廓點個數,2表示畫素點座標),表示乙個輪廓

hierarchy:輪廓間的層次關係,為三維陣列,形狀為(1,n,4),其中n表示輪廓總個數,4指的是用4個數表示各輪廓間的相互關係。第乙個數表示同級輪廓的下乙個輪廓編號,第二個數表示同級輪廓的上乙個輪廓的編號,第三個數表示該輪廓下一級輪廓的編號,第四個數表示該輪廓的上一級輪廓的編號

imgray = cv2.cvtcolor(im,cv2.color_bgr2gray)#轉為灰度圖

ret,thresh = cv2.threshold(imgray,127,255,0)#二值化

cv2.imshow('img',im)#原圖

cv2.imshow('image',image)#輪廓圖

3.繪製輪廓

cv2.drawcontours(image, cnt, -1, (0, 0, 255), 2)
第乙個引數:繪製影象

第二個引數:findcontours函式返回的輪廓引數

第三個引數:畫第幾個輪廓,-1表示畫出所有輪廓

第四個引數:輪廓顏色的rgb值

第五個引數:輪廓的寬度

imgray = cv2.cvtcolor(im,cv2.color_bgr2gray)#轉為灰度圖

ret,thresh = cv2.threshold(imgray,127,255,0)#二值化

im = cv2.drawcontours(im, contours, -1, (0,0,255), 1)#繪製輪廓

cv2.imshow('image',im)#輪廓圖

opencv 輪廓描述

上午主要學習了鏈碼的有關知識,鏈碼是一種表示方法,是用於表示有順序連線的具有指定長度了方向的直線段組成的邊界線,典型的情況下,這種表示方法基於4或8連線,經常選用更大間隔的網格對邊界進行重取樣,邊界的鏈碼取決於初始點,然而,此編碼可以通過簡單的過程實現初始點的歸一化,將鏈碼看成是方向編號的迴圈序列,...

opencv 輪廓應用

typedef struct cvseq cvseq define cv contour fields cv sequence fields cvrect rect int color int reserved 3 typedef struct cvcontour cvcontour 則 cvcon...

opencv 輪廓屬性

1.aspect ratio寬與高之比 cv2 boundingrect cnt 2.extent 目標面積 佔 邊界矩形框 的比例area cv2.contourarea cnt x,y,w,h cv2.boundingrect cnt rect area w h extent float are...