【OpenCV学习】Kmean均值聚类对图片进行减色处理
来源:互联网 发布:微信美化软件 编辑:程序博客网 时间:2024/05/01 00:39
#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/
1 0
- OpenCV学习——Kmean均值聚类对图片进行减色处理
- 【OpenCV学习】Kmean均值聚类对图片进行减色处理
- Opencv 基础学习二(对图片进行腐蚀处理、膨胀处理)
- iOS-Opencv 基础学习四(对图片进行图像模糊处理blur、边缘处理Canny)
- 使用OpenCV对文件夹下所有图片进行批量处理
- 学习OpenCV——Kmean(C++)
- Kmean聚类编写
- opencv手动对BGR彩图进行均值滤波
- 通过K-均值聚类算法对图像进行分割
- 数字图像处理---根据K均值聚类方法对图像灰度值进行分类和阈值化操作
- 【学习OpenCV】——2.4对图像进行平滑处理
- 【学习 OpenCV】—— 图像减色(color reduced)
- opencv 图像减色
- opencv减色算法
- android学习之对照相的图片进行处理学习
- opencv对图片的处理
- opencv对图片的处理
- opencv 学习第二天 学习opencv(中文版)对一幅图片进行高斯平滑
- 关于django时区设置的问题
- 在安卓项目中单独编译某个c源文件
- 分页基本原理(linux0.11)
- 打电话给女友
- 雷军财富超马云100亿美元,马云叹首富位子屁股没坐热
- 【OpenCV学习】Kmean均值聚类对图片进行减色处理
- ACE定时器
- WPF 中Binding的2个属性Source与ElementName的区别
- Find Minimum in Rotated Sorted Array II(LeetCode)
- 花生壳 for linux的安装以及使用
- 哎,我今年28,9岁
- C++11显式转换操作符
- Struts2关于Action的系统训练1
- DB2 SQL300081-08001错误解决办法