首页 > 代码库 > 【OpenCV学习】Kmean均值聚类对图片进行减色处理
【OpenCV学习】Kmean均值聚类对图片进行减色处理
#include <cv.h>#include <highgui.h>#include <iostream>#define MAX_CLUSTERS (8)using namespace std;int main( int argc, char **argv){IplImage *imgA = cvLoadImage( "1.jpg", CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR);if(imgA ==NULL){cout<<"Can‘t Load Image ." << endl;exit(0);}cvNamedWindow("window",CV_WINDOW_AUTOSIZE);cvShowImage("window",imgA);//加载原图unsigned long int size;size = imgA->width * imgA->height;//取得图片大小CvMat *clusters;//分类后的矩阵clusters = cvCreateMat (size, 1, CV_32SC1);//32位1通道的矩阵CvMat *points;//分类前的样例浮点矩阵points = cvCreateMat (size, 1, CV_32FC3); //32位3通道的矩阵unsigned long int i; for (i = 0; i < size; i++) {points->data.fl[i*3] = (unsigned char) imgA->imageData[i*3];points->data.fl[i*3 + 1] = (unsigned char) imgA->imageData[i*3 + 1];points->data.fl[i*3 + 2] = (unsigned char) imgA->imageData[i*3 + 2]; } //得到三通道图像的数据cvKMeans2 (points, MAX_CLUSTERS, clusters,cvTermCriteria (CV_TERMCRIT_EPS + CV_TERMCRIT_ITER, 10, 1.0));//拆分为8类聚合,最大迭代次数是10,精度是1.0CvMat *color = cvCreateMat (MAX_CLUSTERS, 1, CV_32FC3);//8行1列的三通道浮点矩阵CvMat *count = cvCreateMat (MAX_CLUSTERS, 1, CV_32SC1);//8行1列的单通道整数矩阵,用作计数cvSetZero (color);cvSetZero (count);for (i = 0; i < size; i++){int idx = clusters->data.i[i];int j = ++count->data.i[idx];color->data.fl[idx * 3 ] = color->data.fl[idx * 3 ] * (j - 1) / j + points->data.fl[i * 3 ] / j;color->data.fl[idx * 3 + 1] = color->data.fl[idx * 3 + 1] * (j - 1) / j + points->data.fl[i * 3 + 1] / j;color->data.fl[idx * 3 + 2] = color->data.fl[idx * 3 + 2] * (j - 1) / j + points->data.fl[i * 3 + 2] / j;}//把处理过的数据打回imgAfor (i = 0; i < size; i++){int idx = clusters->data.i[i];imgA->imageData[i * 3 ] = (char) color->data.fl[idx * 3 ];imgA->imageData[i * 3 + 1] = (char) color->data.fl[idx * 3 + 1];imgA->imageData[i * 3 + 2] = (char) color->data.fl[idx * 3 + 2];}cvNamedWindow("window2",CV_WINDOW_AUTOSIZE);cvShowImage("window2",imgA);cvWaitKey(0);cvReleaseImage( &imgA );cvDestroyWindow("window");cvDestroyWindow("window2");return 0;}
作者:gnuhpc
出处:http://www.cnblogs.com/gnuhpc/
【OpenCV学习】Kmean均值聚类对图片进行减色处理
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。