opencv 通過輪廓識別提取檢測目標

2021-09-20 03:06:28 字數 1484 閱讀 2640

1.轉換為灰度圖

2.高斯濾波

void gaussianblur(inputarray src, //輸入影象

outputarray dst, //輸出影象

size ksize, //高斯濾波器模板大小

double sigmax, //高斯濾波在橫線的濾波係數

double sigmay,//高斯濾波在豎向的濾波係數

int bordertype=border_default ) ;//邊緣擴充套件點插值型別

mat blur_image;

gaussianblur(org, blur_image, size(3,3), 0,0);

3.canny 輪廓檢測

void cv::canny( inputarray image,//輸入影象:8-bit

outputarray edges,//輸出邊緣影象

double threshold1,//雙閥值抑制中的低閥值

double threshold2,//雙閥值抑制中的高閥值

int aperturesize=3,//sobel運算元模板大小,預設為3

bool l2gradient=false );//計算影象梯度幅值的標識,有預設值false

4.findcontours尋找輪廓

void findcontours(inputoutputarray image,//輸入影象,二值8位單通道影象,

outputarrayofarrays contours,//檢測到的輪廓,每個輪廓被表示成乙個point向量

outputarray hierarchy,//可選的輸出向量,包含影象的拓撲資訊。其中元素的個數和檢測到的輪廓的數量相等

int mode,//說明需要的輪廓型別和希望的返回值方式

int method,//輪廓近似方法

point offset = point()

)

vector>contours;
對所有點集進行篩選,boundingrect外接矩形

rect contours_rect;

for (int i =1; i < contours.size(); i++)

}//for

6.完成,可檢視效果;

關鍵之處在於:閾值化,需明顯隔離出待檢測的目標物體和周圍環境;

利用OpenCV提取目標輪廓

乙個簡單的提取飛機目標影象 二值圖 輪廓的程式 include include include include iplimage g image null iplimage g gray null int g thresh 100 cvmemstorage g storage null char n...

Opencv實現輪廓提取功能

輪廓 乙個輪廓代表一系列的點 畫素 這一系列的點構成乙個有序的點集,所以可以把乙個輪廓理解為乙個有序的點集。在opencv中,提供了乙個函式返回乙個有序的點集或者有序的點集的集合 指多個有序的點集 函式findcontour是從二值影象中來計算輪廓的,一般使用canny 函式處理後的影象,因為這樣的...

opencv學習 9 輪廓提取

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