使用C++、opencv中的高斯混合模型(GMM)进行图像分割
关于GMM聚类的原理及过程可参考博客:https://blog.youkuaiyun.com/lin_limin/article/details/81048411
使用聚类的方法分割图像,即将图像的像素点值(通常用彩色图像,像素点值为一个三元数组(b,g,r))作为聚类的元素,从而将图像中所有的点分为n类,达到分割的效果。
代码:
#include "stdafx.h"
#include<opencv2\opencv.hpp>
#include <iostream>
using namespace cv;
using namespace ml;
int main(int arc, char** argv)
{
Mat src = imread("C:/Users/lenovo/Desktop/1.jpg");
namedWindow("input", WINDOW_NORMAL);
imshow("input", src);
int width = src.cols;
int height = src.rows;
int dims = src.channels();
int pointsCount = width * height;
Mat points(pointsCount, dims, CV_64FC1);
Mat labels;
//Scalar color[] = { Scalar(0,0,255), Scalar(0,255,0), Scalar(255,0,0) };
//将图像转换为一维数据点,传入训练器进行分类
int index = 0;
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
index =

本文介绍了如何使用C++和OpenCV的高斯混合模型(GMM)进行图像分割。通过GMM聚类原理,将图像像素点值(如BGR)作为聚类元素,实现图像分割。示例代码展示了实际效果,并指出可以拓展到其他颜色参数或参数组合以处理更复杂的分割任务。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



