opencv版本:3.4.7
編譯器版本:vs2019
在二值影象上發現輪廓 findcontoursapi
void findcontours(
inputoutputarray image, //輸入影象,非0影象看做1,0畫素保持不變,8bit
outputarrayofarrays contours,//發現全部的輪廓物件
outputarray hierarchy, //該圖的拓撲結構,可選,該輪廓發現演算法是基於影象拓撲結構的實現
int mode,//輪廓返回的模式
int method, //發現方法
point offset = point()//輪廓畫素位移,預設(0,0)沒有位移
);
引數介紹method:int
型別,定義輪廓的近似方法:
point:偏移量,所有的輪廓資訊相對於原始影象對應點的偏移量,相當於在每乙個檢測出的輪廓點上加上該偏移量,並且point
還可以是負值。
注意事項:繪製輪廓 drawcontours函式api顯然,從函式名可以看出「尋找輪廓」的意思。我們可以通過邊緣檢測演算法得到邊緣二值圖或者前景二值圖,二值圖的邊緣畫素或者前景畫素就可以被看出是由多個輪廓(點集)組成的。函式findcontours的作用就是將二值圖的邊緣畫素或者前景畫素拆分成多個輪廓,便於分開討論每乙個輪廓,其中引數image代表一張二值圖**,contours代表輸出的多個輪廓。對於該函式的c++api**,對乙個輪廓的描述用vector,那麼多個輪廓(多個點集)如何表示呢?即引數contours是什麼資料結構呢?在c++api中,用vector描述多個輪廓,即將多個輪廓存在乙個vector中。
void drawcontours(
inputoutputarray image, //輸入影象 輪廓將繪製到此圖上
inputarrayofarrays contours, //全部發現的輪廓物件
int contouridx,//輪廓索引號
const scalar& color,//繪製時候的顏色
int thickness = 1,//繪製線寬
int linetype = 8, //線的型別
inputarray hierarchy = noarray(),//拓撲結構圖
int maxlevel = int_max, //最大層數,0只繪製當前的,1表示繪製當前及其內嵌的輪廓
point offset = point()//輪廓位移 可選
)
引數介紹
("原始"
, window_autosize)
;imshow
("原始"
, src)
;cvtcolor
(src, src, color_bgr2gray)
;//轉化為灰度影象
namedwindow
("灰度影象"
, window_autosize)
;imshow
("灰度影象"
, src)
;createtrackbar
("邊緣調整"
,"原始"
,&threshold_value, threshold_max, contours_demo)
;contours_demo(0
,0);
waitkey(0
);destroyallwindows()
;return0;
}void
contours_demo
(int
,void*)
namedwindow
("輪廓圖"
, window_autosize)
;//顯示目標影象
imshow
("輪廓圖"
OpenCV中的輪廓發現和輪廓繪製
實現 import cv2 import numpy as np 輪廓發現和輪廓繪製 img是一張與binary類似的二值圖,contours是list列表結構每個元素包含乙個邊沿資訊,heriachy是乙個矩陣,用處作者也未知,可以 contours,heriachy cv2.findcontou...
opencv學習筆記(15)輪廓發現
參考 python opencv2利用cv2.findcontours 函式來查詢檢測物體的輪廓 試驗用圖 效果 tips 1.如果二值化之後的影象的底色是白色,那麼最後的繪圖會把整張框進去,如圖所示 第三章的邊框是綠色的 這行 因opencv版本而異,opencv2.x和4.x只需要寫成 而ope...
opencv 輪廓描述
上午主要學習了鏈碼的有關知識,鏈碼是一種表示方法,是用於表示有順序連線的具有指定長度了方向的直線段組成的邊界線,典型的情況下,這種表示方法基於4或8連線,經常選用更大間隔的網格對邊界進行重取樣,邊界的鏈碼取決於初始點,然而,此編碼可以通過簡單的過程實現初始點的歸一化,將鏈碼看成是方向編號的迴圈序列,...