【问题标题】:How to extract segmentation as images after applying K Means using OpenCV C++?如何在使用 OpenCV C++ 应用 K 均值后将分割提取为图像?
【发布时间】:2018-12-21 07:40:38
【问题描述】:

我是 OpenCV 新手。

我的图像由随机分布的红色、绿色和蓝色像素组成。我已经应用了 K 均值并希望将聚类保存为不同的图像。假设如果我考虑聚类的数量为 3,我希望保存三张图像,并通过 K 均值进行分割。

我使用的语言是 C++。如果对 EMGUCV 有任何建议,也会很有帮助。

感谢您的回复! 欢迎提出任何建议!

【问题讨论】:

  • 请附上您已经用于解决此问题的代码。尽可能附上输入和电流输出,
  • @ZdaR 感谢您的编辑和快速回复。我正在使用 K 均值即通用语法。 "kmeans(SampleImages, ClusterCount, Labels, TermCriteria(CV_TERMCRIT_ITER | CV_TERMCRIT_EPS, 10, 1.0), Attempts, KMEANS_RANDOM_CENTERS, Centers);"

标签: c++ opencv k-means emgucv


【解决方案1】:

bestLabels argument to kmeans(您称其为“标签”)允许您指定一个 cv::Mat,该方法将在其中存储所有输入像素的标签索引。它与输入图像具有相同的几何形状。

将输出拆分为掩码相当简单。然后可以将掩码保存为文件。示例代码(未测试):

for (auto k = 0; k < K; ++k) {
    cv::Mat1b mask = (bestLabels == k);
    cv::imwrite("cluster_" + std::to_string(k) + ".png", mask);
}

请注意,您可能需要做更多的工作来合成文件名。

【讨论】:

  • 感谢您的回复!是的,我尝试通过手动提供簇数来迭代保存标签中像素值的簇索引。但是你建议的 for 循环的想法刚刚引起了我的注意。当然,我会设计代码来获取集群数量的输入。再次感谢!
猜你喜欢
  • 1970-01-01
  • 2015-09-23
  • 2013-12-24
  • 2017-01-29
  • 2021-11-01
  • 2013-04-10
  • 2017-08-28
  • 2018-11-23
  • 1970-01-01
相关资源
最近更新 更多