zoukankan      html  css  js  c++  java
  • 【图像算法】彩色图像分割专题四:测试图片的生成

    【图像算法】彩色图像分割专题四:测试图片的生成

      SkySeraph May 29th 2011  HQU

    Email:zgzhaobo@gmail.com    QQ:452728574

    Latest Modified Date:May 29th 2011 HQU

    一 说明:

    用于对彩色分割算法的测试。

     

    二 源码:

     说明:读者可修改代码中的H、S、V值生成所需要的测试图片

    /////////////////////////////////////////////////////////////////////////////
    // Note:		生成测试图片
    // Copyright:	zgzhaobo@gmail.com  @skyseraph 
    // Version:	5/23/2011
    /////////////////////////////////////////////////////////////////////////////
    void CColorSegDlg::OnCreatImage() 
    {
    	if(!(ToDisplayCtr1))
    	{
    		MessageBox("Please Load Pic!");
    		return;
    	}	
    	
    	//  定义工作位图
    	IplImage* src;
    	src = ToDisplayCtr1;
    
    	IplImage * dst = cvCreateImage(cvGetSize(src),IPL_DEPTH_8U,3);
    	double R,G,B,H,S,V;
    	int x,y;
    
    	//给定HSV值,转换为RGB后生成测试图像
    
    	//①和③ V相同/近,H相距较大,S相距2倍(测试S大小对聚类影响)
    	//①
    	for (y=0; y<src->height/4; y++)
    	{
    		for (x=0; x<src->width/4; x++)
    		{
    			H = (2*PI*260/360);//弧度制
    			S = 5/100.0;
    			V = 71*2.55/255.0;
    			//  RGB-HSV
    			pMyColorSpace.HSV2RGB(R,G,B,H,S,V);	
    			R = R*255;
    			G = G*255;
    			B = B*255;
    			// 获取当前点BGR值
    			((uchar*)(dst->imageData + y*dst->widthStep))[x*dst->nChannels] = (int)B;
    			((uchar*)(dst->imageData + y*dst->widthStep))[x*dst->nChannels+1] = (int)G;
    			((uchar*)(dst->imageData + y*dst->widthStep))[x*dst->nChannels+2] = (int)R;	
    		}
    	}
    	//③
    	for (y=0; y<src->height/4; y++)
    	{
    		for (x=src->width/4; x<src->width; x++)
    		{
    			H = (2*PI*104/360);//弧度制
    			S = 7/100.0;
    			V = 71*2.55/255.0;
    			//  RGB-HSV
    			pMyColorSpace.HSV2RGB(R,G,B,H,S,V);	
    			R = R*255;
    			G = G*255;
    			B = B*255;
    			// 获取当前点BGR值
    			((uchar*)(dst->imageData + y*dst->widthStep))[x*dst->nChannels] = (int)B;
    			((uchar*)(dst->imageData + y*dst->widthStep))[x*dst->nChannels+1] = (int)G;
    			((uchar*)(dst->imageData + y*dst->widthStep))[x*dst->nChannels+2] = (int)R;	
    		}
    	}
    
    
    	//②和④ V相同,H相同/近,测试S(S大小对聚类影响)
        //②
    	for (y=src->height/4; y<src->height; y++)
    	{
    		for (x=0; x<src->width/4; x++)
    		{
    			H = (2*PI*260/360);//弧度制
    			S = 20.0/100.0;
    			V = 71*2.55/255.0;
    			//  RGB-HSV
    			pMyColorSpace.HSV2RGB(R,G,B,H,S,V);	
    			R = R*255;
    			G = G*255;
    			B = B*255;
    			// 获取当前点BGR值
    			((uchar*)(dst->imageData + y*dst->widthStep))[x*dst->nChannels] = (int)B;
    			((uchar*)(dst->imageData + y*dst->widthStep))[x*dst->nChannels+1] = (int)G;
    			((uchar*)(dst->imageData + y*dst->widthStep))[x*dst->nChannels+2] = (int)R;	
    		}
    	}
    	//④
    	for (y=src->height/4; y<src->height; y++)
    	{
    		for (x=src->width/4; x<src->width; x++)
    		{
    			H = (2*PI*104/360);//弧度制
    			S = 40.0/100.0;
    			V = 71*2.55/255.0;
    			//  RGB-HSV
    			pMyColorSpace.HSV2RGB(R,G,B,H,S,V);	
    			R = R*255;
    			G = G*255;
    			B = B*255;
    			// 获取当前点BGR值
    			((uchar*)(dst->imageData + y*dst->widthStep))[x*dst->nChannels] = (int)B;
    			((uchar*)(dst->imageData + y*dst->widthStep))[x*dst->nChannels+1] = (int)G;
    			((uchar*)(dst->imageData + y*dst->widthStep))[x*dst->nChannels+2] = (int)R;	
    		}
    	}
    
    	cvNamedWindow("ImageRGB",0);
    	cvShowImage("ImageRGB",dst);
    	cvSaveImage(".\\imageRGB.jpg",dst);
    
    
    /*	// 对生成的图像转换为HSV输出显示
    	IplImage * dstHSV = cvCreateImage(cvGetSize(src),IPL_DEPTH_8U,3);
    	for (y=0; y<src->height; y++)
    	{
    		for ( x=0; x<src->width; x++)
    		{
    			// 获取当前点BGR值
    			B = ((uchar*)(dst->imageData + y*dst->widthStep))[x*dst->nChannels];
    			G = ((uchar*)(dst->imageData + y*dst->widthStep))[x*dst->nChannels+1];
    			R = ((uchar*)(dst->imageData + y*dst->widthStep))[x*dst->nChannels+2];
    			//
    			pMyColorSpace.RGB2HSV(R,G,B,H,S,V);	
    			H = 360*H/(2*PI); //弧度转换为角度制
    			V = V*255.0;  //[0,1] to [0,255]
    			S = S*100.0;  //[0,1] to [0,100]
    			//
    			((uchar*)(dstHSV->imageData + y*dstHSV->widthStep))[x*dstHSV->nChannels] = (int)H;
    			((uchar*)(dstHSV->imageData + y*dstHSV->widthStep))[x*dstHSV->nChannels+1] = (int)S;
    			((uchar*)(dstHSV->imageData + y*dstHSV->widthStep))[x*dstHSV->nChannels+2] = (int)V;	
    		}
    	}
    
    	cvNamedWindow("ImageHSV",0);
    	cvShowImage("ImageHSV",dstHSV);
    	cvSaveImage(".\\imageHSV.jpg",dstHSV);
    */
    
    	cvWaitKey(0);
    	cvDestroyAllWindows();
    }
    

     

    三 图片:

    图片一: V相同/相近、H相距较大,用于测试饱和度S大小对分割算法的影响

    左上部分和右上部分的V相同(71),H相距较大(260、104),S为5、7

    左下部分和右下部分的V相同(71),H为(260、104),S为20、40

    Note:S范围[0,100] V[0,255] H范围[0,2PI]

     

     图片二  S相同/相近、H相距较大,用于测试亮度V大小对分割算法的影响

    左上部分和右上部分的S相同(80),H相距较大(260、104),S为10、20

    左下部分和右下部分的S相同(80),H为(260、104),S为50、70

    Note:S范围[0,100] V[0,255] H范围[0,2PI]

    More in  http://skyseraph.com/2011/08/27/CV/图像算法专题/ 

    Author:         SKySeraph

    Email/GTalk: zgzhaobo@gmail.com    QQ:452728574

    From:         http://www.cnblogs.com/skyseraph/

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,请尊重作者的劳动成果

  • 相关阅读:
    关于ADO.NET连接池
    The Cost of GUIDs as Primary Keys
    数据库反规范设计
    如何快速的呈现我们的网页(转)
    小议数据库主键选取策略(转自吕震宇老师博文)
    javascript 单元测试 (Jsunit应用) 转
    sqlserver版本降级方法
    算术运算表达式正则及分析
    sql STUFF用法
    Flex DashBoard功能
  • 原文地址:https://www.cnblogs.com/skyseraph/p/2061909.html
Copyright © 2011-2022 走看看