opencv图像分割2-GMM

GMM随机数分类:

#include<opencv2\opencv.hpp>
#include<iostream>
using namespace cv;
using namespace std;
using namespace cv::ml;
int main()
{Mat img=Mat::zeros(500, 500, CV_8UC3);RNG rng(12345);Scalar colorTab[] = {Scalar(0,0,255),Scalar(0,255,0),Scalar(255,0,0),Scalar(0,255,255),Scalar(255,0,255)};int numCluster = rng.uniform(2, 5);  //分类个数cout << "分类个数:" << numCluster << endl;int sampleCount = rng.uniform(2, 1000);   //需要分类的点数Mat points(sampleCount, 2, CV_32FC1);  //每一列两个数Mat labels;  //存储每一个数据点的聚类编号Mat centers;  //存储每一个聚类的中心位置//生成随机数for (int k = 0; k < numCluster; k++){Point center;center.x = rng.uniform(0, img.cols);center.y = rng.uniform(0, img.rows);//随机数据块Mat pointChunk = points.rowRange(k*sampleCount / numCluster, k == numCluster - 1 ? sampleCount : (k + 1)*sampleCount / numCluster);rng.fill(pointChunk, RNG::NORMAL, Scalar(center.x, center.y), Scalar(img.cols*0.05, img.rows*0.05));}randShuffle(points, 1, &rng); //将随机数据块打乱//使用GMMPtr<EM> em_model = EM::create();em_model->setClustersNumber(numCluster);em_model->setCovarianceMatrixType(EM::COV_MAT_SPHERICAL);  //协方差矩阵em_model->setTermCriteria(TermCriteria(TermCriteria::EPS + TermCriteria::COUNT, 100, 0.1));//停止条件em_model->trainEM(points, noArray(), labels, noArray());//classify every image pixelsMat sample(1, 2, CV_32FC1);for (int row = 0; row < img.rows; row++){for (int col = 0; col < img.cols; col++){sample.at<float>(0) = (float)col;sample.at<float>(1) = (float)row;int response=cvRound(em_model->predict2(sample, noArray())[1]);Scalar c = colorTab[response];circle(img, Point(col, row), 1, c*0.75, -1);}}//draw the clustersfor (int i = 0; i < sampleCount; i++){Point p(cvRound(points.at<float>(i, 0)), cvRound(points.at<float>(i, 1)));circle(img, p, 1, colorTab[labels.at<int>(i)], -1);}imshow("GMM_Demo", img);waitKey(0);return 0;  //返回值为0表示成功执行此函数
}

运行结果:

GMM 图像分割案例:

#include<opencv2\opencv.hpp>
#include<iostream>
using namespace std;
using namespace cv;
using namespace cv::ml;
实时性很差/
int main(int argc, char **argv)
{Mat src = imread("E:\\vs2015\\opencvstudy\\2kmeans.jpg", 1);if (src.empty()){cout << "could not load the image!" << endl;return -1;  //返回-1代表函数执行失败}imshow("input", src);int width = src.cols;int height = src.rows;int dims = src.channels();初始化定义int nsamples = width*height;const Scalar color[] = {Scalar(0,0,255),Scalar(0,255,0),Scalar(0,0,255),Scalar(255,255,0)};int numcluster = 4;Mat points(nsamples, dims, CV_64FC1);Mat labels;Mat result = Mat::zeros(src.size(), src.type());RGB数据转换到样本数据int index = 0;for (int row = 0; row < height; row++){for (int col = 0; col < width; col++){index = row*width + col;Vec3b bgr = src.at<Vec3b>(row, col);points.at<double>(index, 0) = static_cast<int>(bgr[0]);points.at<double>(index, 1) = static_cast<int>(bgr[1]);points.at<double>(index, 2) = static_cast<int>(bgr[2]);}}EM Cluster TrainPtr <EM> em_model= EM::create();em_model->setClustersNumber(numcluster);em_model->setCovarianceMatrixType(EM::COV_MAT_SPHERICAL);em_model->setTermCriteria(TermCriteria(TermCriteria::EPS + TermCriteria::COUNT, 100, 0.1));em_model->trainEM(points, noArray(), labels, noArray());//对每个像素进行颜色的标记Mat sample(dims, 1, CV_64FC1);double time = getTickCount();int r = 0, g = 0, b = 0;for (int row = 0; row < height; row++){for (int col = 0; col < width; col++){index = row*width + col;/*int label = labels.at<int>(index,0);Scalar c = color[label];result.at<Vec3b>(row, col)[0] = c[0];result.at<Vec3b>(row, col)[1] = c[1];result.at<Vec3b>(row, col)[2] = c[2];*/b = src.at<Vec3b>(row,col)[0];g = src.at<Vec3b>(row,col)[1];r = src.at<Vec3b>(row,col)[2];sample.at<double>(0) = b;sample.at<double>(1) = g;sample.at<double>(2) = r;int response = cvRound(em_model->predict2(sample, noArray())[1]);Scalar c = color[response];result.at<Vec3b>(row, col)[0] = c[0];result.at<Vec3b>(row, col)[1] = c[1];result.at<Vec3b>(row, col)[2] = c[2];}}cout << "time consume:" << (getTickCount()-time)  / getTickFrequency() * 1000 << endl;imshow("EM_Result", result);imwrite("EM_Result.jpg",result);//for (int i = 0; i < centers.rows; i++)//{//	int x = centers.at<float>(i, 0);//	int y = centers.at<float>(i, 1);//	cout << "第" << i << "个:" << "c.x" << x << "c.y" << y << endl;//}//imshow("KMeans_Result", result);waitKey(0);return 0;
}

运行结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/568139.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mitmproxy抓包 | Python疑难测试场景mock实战(四)

往期经典文章回顾&#xff1a;抓包工具mitmproxy环境配置使用&#xff08;一&#xff09;抓包工具mitmproxy | mitmweb基本用法&#xff08;二&#xff09;mitmproxy抓包 | Python实时生成接口自动化用例mitmproxy抓包 | Python实时生成接口自动化用例&#xff08;三&#xff0…

mitmproxy抓包 | Python篡改请求参数实战(五)

抓包工具mitmproxy环境配置使用&#xff08;一&#xff09;抓包工具mitmproxy | mitmweb基本用法&#xff08;二&#xff09;mitmproxy抓包 | Python实时生成接口自动化用例&#xff08;三&#xff09;mitmproxy抓包 | Python实时生成接口自动化用例mitmproxy抓包 | Python疑难…

数据结构-链表1-顺序存储

DynamicArray.h #ifndef DYNAMIC_ARRAY_H #define DYNAMIC_ARRAY_H #define _CRT_SECURE_NO_WARNINGS #include<stdlib.h> #include<stdio.h> #include<string.h>//动态数组结构体 typedef struct DYNAMICARRAY {int* pAddr; //具体存放数据的地址int size…

全网都在用的超全【面试刷题小程序】,最新版激活教程

前几天&#xff0c;我的一个粉丝留言给我说&#xff0c;他在面试美团的自动化测试岗的时候&#xff0c;不幸挂掉了。越想越觉得可惜&#xff0c;回想面试经过&#xff0c;好好总结了几个点&#xff0c;发现面试没过的主要原因是在几个关键的问题没有给到面试官想要的答案。从而…

数据结构-链表2-链式存储

LinkList.h #ifndef LINKLIST_H #define LINKLIST_H #define _CRT_SECURE_NO_WARNINGS #include<stdlib.h> #include<stdio.h> #include<string.h>//链表结点 typedef struct LINKNODE {void* data; //无类型指针&#xff0c;指向任何类型的数据struct LIN…

字节内部自动化测试培训资料,明年涨薪用得上

今天是12月27日&#xff0c;2021年还剩下最后4天。昨晚我收到一位粉丝朋友的涨薪喜讯&#xff0c;他踩着2021的尾巴&#xff0c;成功跳进广州海珠的互联网巨头&#xff0c;涨薪幅度达284%。其实每年的年末&#xff0c;圈子里的朋友都特别忙&#xff0c;大家都在为来年跳槽做准备…

数据结构-链表3-循环链表

LinkList.h #ifndef LINKLIST_H #define LINKLIST_H #define _CRT_SECURE_NO_WARNINGS #include<stdlib.h> #include<stdio.h> #include<string.h>//链表小结点 typedef struct CIRCLELINKNODE {struct LinkNode *next; }CircleLinkNode;//链表结构体 type…

探索篇 | 接口字段容错测试(三)

往期关联文章&#xff1a;探索测试 | 新奇深层测试策略之案例剖析&#xff08;一&#xff09;探索篇 | 新奇测试策略剖析&#xff0c;大家都觉得多此一举(二)探索篇|越权测试策略之案例剖析&#xff08;一&#xff09;重磅福利 | 全网唯一,多年踩坑经验&#xff0c;探索测试策略…

数据结构-链表4-企业链表

LinkList.h #ifndef LINKLIST_H #define LINKLIST_H#include<stdio.h> #include<stdlib.h> //链表结点 typedef struct LINKNODE {struct LINKNODE *next; }LinkNode;//链表 typedef struct LINKLIST{LinkNode head; //放在第一个&#xff0c;防止有偏移量.//不…

全网都在看的Jmeter精选原创文章

点击上方“蓝字”&#xff0c;轻松关注我们Jmeter 原创合集‍‍‍‍‍‍‍1、【Jmeter篇】Linux环境下安装部署运行Jmeter2、Jmeter跨线程组传递参数3、Jmeter中JDBC Connection Configuration实现MySQL JDBC Request数据库处理4、Jmeter JDBC Request执行多条SQL语句5、Jmeter…

opencv之namedWindow,imshow出现两个窗口

初学opencv&#xff0c;代码如下&#xff0c;按理来说结果应该是&#xff1a;一个cmd命令行窗口&#xff0c;一个显示照片的窗口 #include<opencv2\opencv.hpp> #include<iostream> using namespace cv; using namespace std; int main() {const char* win_name …

全网都在看的Fiddler、mitmproxy抓包秘籍,花钱都买不到

点击上方“蓝字”&#xff0c;轻松关注我们Fiddler、mitmproxy、Stream抓包工具原创集合1、Fiddler抓取APP请求&#xff08;环境搭建&#xff09;之mama再也不用担心抓不到包了2、Fiddler抓包神器带你遨游网络&#xff0c;叱咤风云&#xff0c;为所欲为3、Fiddler抓包 | 竟然有…

无法打开文件“python35_d.lib”

在windows10安装opencv时&#xff0c;执行cmake之后&#xff0c;用vs2015打开工程&#xff0c;在debug下&#xff0c;生成INSTALL会出现 错误 1 error LNK1104: 无法打开文件“python35_d.lib” 。 转自 http://blog.csdn.net/Chris_zhangrx/article/details/78947526 在用…

缺陷定位 | 如何精准效率分析推测BUG定位(二)

点击上方“蓝字”&#xff0c;轻松关注我们明天就是除夕了&#xff0c;很多人都回到了老家&#xff0c;吃上了妈妈做的饭菜&#xff0c;这时候应该是最幸福的时刻&#xff0c;我也用年前上班仅剩的几小时把 缺陷定位&#xff08;二&#xff09;分享给大家&#xff0c;希望大家能…

VS2015+cmake3.8+opencv3.2+opencv-contrib3.2编译及配置步骤

一、下载以下文件并解压和安装cmake。并在同目录下新建文件夹mybuild 文件1 opencv-3.2.0-vc14.exe 文件2 opencv_contrib-3.2.0.zip 文件3 cmake-3.8.0-win64-x64.msi 二、打开cmake&#xff0c;并填写路径 .cmake第一行输入的是opencv的源码即opencv的source文件&…

缺陷定位 | 分析推理定位BUG案例(三)

往期关联文章&#xff1a;缺陷定位 | 测试发现了Bug&#xff0c;还要分析定位Bug&#xff1f;&#xff08;一&#xff09;缺陷定位 | 如何精准效率分析推测BUG定位&#xff08;二&#xff09;运营反馈&#xff0c;生产环境&#xff0c;WEB端管理后台&#xff0c;岗位审核详情&a…

数据结构-栈1-顺序存储

LinkList.h: #include<stdlib.h> #include<stdio.h> #include<string.h> #define MAX_SIZE 1024 #define TRUE 1 #define FALSE 0typedef struct LINKLIST {void* data[MAX_SIZE];int size;}LinkList;//初始化 LinkList* Init_linkList();//压入元素 void Pu…

构建测试的体系化思维(基础篇)

读完需要22分钟速读仅需 8 分钟之前写过一篇文章《神圣的QA》&#xff0c;是面向想从事 QA 工作的毕业生同学的&#xff0c;文中有讲到 QA 的五个基本职责&#xff1a;理解和澄清业务需求制定策略并设计测试实现和执行测试缺陷管理与分析质量反馈与风险识别最近有朋友希望我能分…

数据结构-栈2-链式存储

LinkList.h #include<stdlib.h> #include<stdio.h> #include<string.h> #define MAX_SIZE 1024 #define TRUE 1 #define FALSE 0//链表结点--存储下一个结点指针 typedef struct LINKNODE {struct LINKNODE *next; }LinkNode;//链表--保存头结点,和链表长度…

构建测试的体系化思维(进阶篇)

读完需要24分钟速读仅需 8 分钟00 引言1. 三个层次聊测试体系测试人员缺乏体系化思维&#xff1f;新建产品团队或者新启项目&#xff0c;如何搭建质量保障体系&#xff1f;大家都接触过不计其数的测试、质量方面的文章或者培训课程&#xff0c;内容不乏测试实践、技术相关&…