OpenCV3.2图像分割 实例5:GMM(高斯混合模型)图像分割


1 #include <opencv2/opencv.hpp> 2 #include <iostream> 3 4 using namespace cv; 5 using namespace cv::ml; 6 using namespace std; 7 8 int main(int argc, char** argv) 14 namedWindow("input image", CV_WINDOW_AUTOSIZE); 15 imshow("input image", src); 16 17 // 初始化 18 int numCluster = 3; 19 const Scalar colors[] = ; 25 26 int width = srcols; 27 int height = src.rows; 28 int dims = srchannels(); 29 int nsamples = width*height; 30 Mat points(nsamples, dims, CV_64FC1); 31 Mat labels; 32 Mat result = Mat::zeros(src.size(), CV_8UC3); 33 34 // 图像RGB像素数据转换为样本数据 35 int index = 0; 36 for (int row = 0; row < height; row++) 44 } 45 46 // EM Cluster Train 47 Ptr<EM> em_model = EM::create(); 48 em_model>setClustersNumber(numCluster); 49 em_model>setCovarianceMatrixType(EM::COV_MAT_SPHERICAL);//设置协方差矩阵 50 //设置停止条件,训练100次结束 51 em_model>setTermCriteria(TermCriteria(TermCriteria::EPS + TermCriteria::COUNT, 100, 0.1)); 52 em_model>trainEM(points, noArray(), labels, noArray()); 53 54 // 对每个像素标记颜色与显示 55 Mat sample(dims, 1, CV_64FC1); 56 double time = getTickCount(); 57 int r = 0, g = 0, b = 0; 58 for (int row = 0; row < height; row++) 80 } 81 printf("execution time(ms) : %.2f\n", (getTickCount() time)/getTickFrequency()*1000); 82 imshow("EMSegmentation", result); 83 84 waitKey(0); 85 return 0; 86 }



上一篇:ITK 实例3 OTSU算法对PNG图像进行单阈值二维分割

下一篇:ITK 实例13 ITK分水岭算法对PNG图像进行二维分割


OpenCV
Copyright © 2002-2019 k262电脑网 www.k262.cn 皖ICP备2020016292号
温馨提示:部分文章图片数据来源与网络,仅供参考!版权归原作者所有,如有侵权请联系删除!QQ:251442993 热门搜索 网站地图