当前位置: 首页 > 网络知识

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

时间:2026-01-29 09:25:29
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 实例4 OTSU算法对PNG图像进行多阈值二维分割
下一篇:ITK 实例13 ITK分水岭算法对PNG图像进行二维分割
OpenCV
  • 英特尔与 Vertiv 合作开发液冷 AI 处理器
  • 英特尔第五代 Xeon CPU 来了:详细信息和行业反应
  • 由于云计算放缓引发扩张担忧,甲骨文股价暴跌
  • Web开发状况报告详细介绍可组合架构的优点
  • 如何使用 PowerShell 的 Get-Date Cmdlet 创建时间戳
  • 美光在数据中心需求增长后给出了强有力的预测
  • 2027服务器市场价值将接近1960亿美元
  • 生成式人工智能的下一步是什么?
  • 分享在外部存储上安装Ubuntu的5种方法技巧
  • 全球数据中心发展的关键考虑因素
  • 英特尔与 Vertiv 合作开发液冷 AI 处理器

    英特尔第五代 Xeon CPU 来了:详细信息和行业反应

    由于云计算放缓引发扩张担忧,甲骨文股价暴跌

    Web开发状况报告详细介绍可组合架构的优点

    如何使用 PowerShell 的 Get-Date Cmdlet 创建时间戳

    美光在数据中心需求增长后给出了强有力的预测

    2027服务器市场价值将接近1960亿美元

    生成式人工智能的下一步是什么?

    分享在外部存储上安装Ubuntu的5种方法技巧

    全球数据中心发展的关键考虑因素