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