opencv K均值聚類分析,標準像背景識別

2021-10-08 13:02:16 字數 2333 閱讀 7956

1. 獲取顏色特徵集合

2. k均值聚類

3. 顯示聚類結果

輸出結果:

輸出結果:

原始碼int main(int argc, char *ar**)

cv::imshow("src", src);

int samplenum = src.rows*src.cols;

cv::mat points(samplenum,src.channels(),cv_32f,cv::scalar(0));

std::cout << "資料集維度:" << points.size() << std::endl;

// rgb為特徵

for(int i=0;i(i,j);

int index =  i*src.cols + j;

// point(j,i) .

points.at(index,0) = bgr[0];

points.at(index,1) = bgr[1];

points.at(index,2) = bgr[2];}}

cv::mat labels;

cv::mat centers;

/* k均值聚類

api介面:cv_exports_w double kmeans( inputarray data, int k, inputoutputarray bestlabels,

termcriteria criteria, int attempts,

int flags, outputarray centers = noarray() );

引數分析:

data:聚類資料,n維點集, 矩陣輸入,行為樣本數目,列為特徵。

k: 分割的類數目

bestlabels: 輸入輸出型別,點集合的索引,輸入的值作為起始聚類值

criteria: 迭代終止條件

attempts: 嘗試重新次數

flags: 初始化中心模式,參考cv::kmeansflags

centers: 聚類的中心,output matrix

cv::kmeansflags

*/int clusternum = 4;

cv::termcriteria tc = cv::termcriteria(cv::termcriteria::eps + cv::termcriteria::count,10,0.1);

cv::kmeans(points,clusternum,labels,tc,3,cv::kmeans_random_centers,centers);

std::cout << "矩陣中心\n" << centers

cv::rng rng(12345);

for(int i=0; i < clusternum; i++) colorset.push_back(cv::vec3b(rng.uniform(0,255),rng.uniform(0,255),rng.uniform(0,255)));

//    colorset.push_back(cv::vec3b(255,0,0));

//    colorset.push_back(cv::vec3b(0,255,0));

//    colorset.push_back(cv::vec3b(255,0,255));

//    colorset.push_back(cv::vec3b(0,255,255));

//    colorset.push_back(cv::vec3b(255,255,255));

cv::mat result = cv::mat::zeros(src.rows,src.cols,cv_8uc3);

// rgb 資料轉換到樣本資料

// 顯示影象分割結果

for(int i=0;i(index);

result.at(i, j) = colorset[label];}}

cv::imshow("cluster result", result);

// 繪製中心

cv::waitkey(0);

return 1;

}

SAS 聚類分析 K 均值聚類

k 均值方法,有時也叫勞埃德方法或 lioyd forgy 方法。k 均值聚類的核心思想是 為指定劃分數目的最佳劃分。對於 n 個觀測,每個觀測是 m 維的實數向量,現在需要找到 k 個聚類 其中 k n,即 n 個子集 使得每個類別分組內的方差最小化。1.隨機選取 k 個真實 或虛擬的資料點作為初...

聚類分析(一) 什麼是聚類分析

將一群物理物件或者抽象物件的劃分成相似的物件類的過程。其中類簇是資料物件的集合,在類簇中所有的物件都彼此相似,而類簇與類簇之間的物件是彼此相異。聚類除了可以用於資料分割 data segmentation 也可以用於離群點檢測 outlier detection 所謂的離群點指的是與 普通 點相對應...

聚類分析(一) 什麼是聚類分析

將一群物理物件或者抽象物件的劃分成相似的物件類的過程。其中類簇是資料物件的集合,在類簇中所有的物件都彼此相似,而類簇與類簇之間的物件是彼此相異。聚類除了可以用於資料分割 data segmentation 也可以用於離群點檢測 outlier detection 所謂的離群點指的是與 普通 點相對應...