首页 > 代码库 > OpenCV+KMeans算法
OpenCV+KMeans算法
<span style="font-size:18px;">#include <opencv2/opencv.hpp> #include <iostream> using namespace std; using namespace cv; int main(int argc, char** argv) { #define MAX_CLUSTERS 5 CvScalar color_table[MAX_CLUSTERS]; IplImage* img = cvCreateImage(cvSize(500,500),8,3); cvNamedWindow("source", 1); cvShowImage("source", img); cvWaitKey(0); CvRNG rng = cvRNG(0xffffffff); color_table[0] = CV_RGB(255,0,0); color_table[1] = CV_RGB(0,255,0); color_table[2] = CV_RGB(0,0,255); color_table[3] = CV_RGB(255,0,255); color_table[4] = CV_RGB(255,255,0); cvNamedWindow("clusters", 1); while(true) { int k, cluster_count = cvRandInt(&rng)%MAX_CLUSTERS + 1; int i, sample_count = cvRandInt(&rng)%1000 + 1; CvMat* points = cvCreateMat(sample_count,1,CV_32FC2); CvMat* clusters = cvCreateMat(sample_count,1,CV_32SC1); //高斯分布产生随机点 for (k = 0; k < cluster_count; k++) { CvPoint center; CvMat point_chunk; center.x = cvRandInt(&rng)%img->width; center.y = cvRandInt(&rng)%img->height; cvGetRows(points, &point_chunk, k*sample_count/cluster_count, k == cluster_count - 1 ? sample_count:(k+1)*sample_count/cluster_count); cvRandArr(&rng,&point_chunk,CV_RAND_NORMAL,cvScalar(center.x,center.y,0,0), cvScalar(img->width/6, img->height/6,0,0)); } for(i = 0; i < sample_count/2; i++) { CvPoint2D32f* pt1 = (CvPoint2D32f*)points->data.fl + cvRandInt(&rng)%sample_count; CvPoint2D32f* pt2 = (CvPoint2D32f*)points->data.fl + cvRandInt(&rng)%sample_count; CvPoint2D32f temp; CV_SWAP(*pt1,*pt2, temp); } cvKMeans2(points,cluster_count,clusters,cvTermCriteria(CV_TERMCRIT_EPS + CV_TERMCRIT_ITER,10, 1.0)); cvZero(img); for(i = 0; i < sample_count; i++ ) { CvPoint2D32f pt = ((CvPoint2D32f*)points->data.fl)[i]; int cluster_idx = clusters->data.i[i]; cvCircle(img, cvPointFrom32f(pt), 2, color_table[cluster_idx], CV_FILLED); } cvReleaseMat(&points); cvReleaseMat(&clusters); cvShowImage("clusters", img); if(cvWaitKey(0) == 27) //'ESC' break; } return 0; }</span>
OpenCV+KMeans算法
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。