资源简介
利用opencv的cvKMeans2进行聚类分析,并给出测试代码,希望对大家有所帮助
代码片段和文件信息
// Knowledge.cpp : Defines the entry point for the console application.
//
#include “stdafx.h“
BOOL ImageSegmentByKMeans2(const IplImage* pImg IplImage* pResult BOOL colorFlag = FALSE int sortFlag = 0);
BOOL GrayImageSegmentByKMeans2(const IplImage* pImg IplImage* pResult int sortFlag = 0);
BOOL ColorImageSegmentByKMeans2(const IplImage* pImg IplImage* pResult int sortFlag = 0);
#define nClusters 3
int _tmain(int argc char** argv)
{
string savePath = “D:\\“;
string path = “D:\\igandvd\\CharCh\\CharForTrain\\pos\\yellow\\“;
string imgName = “D:\\igandvd\\CharCh\\CharForTrain\\pos\\yellow\\*.png“;
IplImage* pImg = NULL;
// 验证腐蚀和膨胀
_finddata_t imgInfo;
memset(&imgInfo 0x0 sizeof(imgInfo));
// 寻找第一个文件
long handle = _findfirst(imgName.c_str() &imgInfo);
if (-1L == handle)
{
cerr << “ERROR: Failed to Find the First Image!“ << std::endl;
system(“pause“);
return 0;
}
IplImage* img = NULL *pGray = NULL *pBin = NULL;
do
{
if ((img = cvLoadImage((path + imgInfo.name).c_str())) == NULL)
{
cerr << “ERROR: Failed to Load Image “ << imgInfo.name << std::endl;
system(“pause“);
return 0;
}
cvNamedWindow( “原始图像“ 1 ); //创建窗口
cvShowImage( “原始图像“ img ); //显示图像
// cvWaitKey(0); //等待按键
pBin = cvCreateImage(cvSize(img->width img->height) 8 1);
cvSetZero(pBin);
ImageSegmentByKMeans2(img pBin FALSE 0);
cvNamedWindow( “聚类图像“ 1 ); //创建窗口
cvShowImage( “聚类图像“ pBin); //显示图像
cvWaitKey(0); //等待按键
cvReleaseImage(&pBin);
cvDestroyAllWindows();
}while (0 == _findnext(handle &imgInfo));
system(“pause“);
return 0;
}
// int nClusters 类别数目 BOOL colorFlag 处理灰度图像还是彩色图像,默认为FALSE,灰度图像聚类分析
// int sortFlag 0代表不进行排序 1代表按照升序进行排序 2 代表按照降序进行排序,默认为0不进行排序
BOOL ImageSegmentByKMeans2(const IplImage* pImg IplImage* pResult BOOL colorFlag int sortFlag)
{
// 检查输入参数
assert(pImg != NULL && pResult != NULL);
assert(pResult->nChannels == 1);
if (colorFlag)
{
assert(pImg->nChannels == 3);
}
// 复制工作图像如果存在ROI,则只对ROI进行处理
IplImage* pClone = NULL;
if (pImg->roi)
{
CvRect rect = cvRect(pImg->roi->xOffset pImg->roi->yOffset pImg->roi->width pImg->roi->height);
pClone = cvCreateImage(cvSize(rect.width rect.height) pImg->depth pImg->nChannels);
cvCopyImage(pImg pClone);
}
else
{
pClone = cvCloneImage(pImg);
}
// 聚类分析
if (!colorFlag) // 灰度图像
{
IplImage* pWork = NULL;
if (pClone->nChannels == 3) // 如果是彩色图像需要进行颜色转换
{
pWork = cvCreateImage(cvSize(pClone->width pClone->height) IPL_DEPTH_8U 1);
cvCvtColor(pClone pWork CV_BGR2GRAY);
}
else
{
pWork = cvCloneImage(pClone);
}
cvReleaseImage(&pClone);
BOOL grayResult = GrayImageSegmentByKMeans2(pWork pResult sortFlag);
cvReleaseImage(&pWork);
return grayResult;
}
else // 彩色图像
{
IplImage* pWork = cvCloneImage(pClone);
cvReleaseImage(&pClone);
BOOL colorResult = ColorImageSegmentByKMeans2(pWork pResult sor
- 上一篇:词法分析器c语言实现
- 下一篇:qt c++ 开发的俄罗斯方块
相关资源
- 基于opencv的模板匹配代码
- opencv图片扫描以及校正
- opencv手部轮廓识别以及轨迹识别
- opencv2 3D标定.cpp
- 基于opencv漫水填充算法综合
- opencv激光中心线的提取
- OpenCV Computer Vision Application Programming
- 基于图割的图像分割OpenCV+MFC实现
- 识别魔方颜色
- opencv版俄罗斯方块源码
- VS2013 / MFC + OpenCV 2.4.9实现视频的播放
- 粒子滤波器+目标跟踪的C++实现,VS2
- 张平OpenCV算法精讲基于python和C++教材
- 虹膜识别开源代码OSIRIS4.1基于opencv
- Sift特征点提取与匹配opencv库
- YCbCr、混合高斯以及YCbCg肤色检测模型
- 光流法代码
- OpenCV打开摄像机显示在MFC窗口工程源
- 使用c++读取图像到二维矩阵
- 三维点云的圆柱面拟合
- MFC+OPENCV摄像机标定程序
- 基于特征脸的人脸识别MFC+OpenCV
- opencv图像处理MFC
- OPENCV人脸检测加角点检测并输出坐标
- FillHole.rar
- 道路提取算法 c++ opencv
- PCA代码实现详解
- opencv卡尔曼滤波
- SeamCarving opencv c++
- opencv prewitt边缘检测
评论
共有 条评论