⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 design.c

📁 基于labwindows/cvi的图像的艺术化处理的编程实现
💻 C
📖 第 1 页 / 共 2 页
字号:
		        IPI_GetPixelValue(GreenPlane,x+1,y+2,&value7);
		        IPI_GetPixelValue(GreenPlane,x+1,y+3,&value8);
		        IPI_GetPixelValue(GreenPlane,x+2,y,&value9);
		        IPI_GetPixelValue(GreenPlane,x+2,y+1,&value10);
		        IPI_GetPixelValue(GreenPlane,x+2,y+2,&value11);
		        IPI_GetPixelValue(GreenPlane,x+2,y+3,&value12);
		        IPI_GetPixelValue(GreenPlane,x+3,y,&value13);
		        IPI_GetPixelValue(GreenPlane,x+3,y+1,&value14);
		        IPI_GetPixelValue(GreenPlane,x+3,y+2,&value15);
		        IPI_GetPixelValue(GreenPlane,x+3,y+3,&value16);
		        	   
		        average=(value1+value2+value3+value4+value5+value6+value7+value8+value9+		 //求平均值
		        					value10+value11+value12+value13+value14+value15+value16)/16;
		               
		        IPI_SetPixelValue(TempGreen,x,y,average);
		        IPI_SetPixelValue(TempGreen,x,y+1,average);								//新图像赋值
		        IPI_SetPixelValue(TempGreen,x,y+2,average);
		        IPI_SetPixelValue(TempGreen,x,y+3,average);
		        IPI_SetPixelValue(TempGreen,x,y+4,average);
		        IPI_SetPixelValue(TempGreen,x+1,y,average);
		        IPI_SetPixelValue(TempGreen,x+1,y+1,average);
		        IPI_SetPixelValue(TempGreen,x+1,y+2,average);
		        IPI_SetPixelValue(TempGreen,x+1,y+3,average);
		        IPI_SetPixelValue(TempGreen,x+1,y+4,average);
		        IPI_SetPixelValue(TempGreen,x+2,y,average);
		        IPI_SetPixelValue(TempGreen,x+2,y+1,average);
		        IPI_SetPixelValue(TempGreen,x+2,y+2,average);
		        IPI_SetPixelValue(TempGreen,x+2,y+3,average);
		        IPI_SetPixelValue(TempGreen,x+2,y+4,average);
		        IPI_SetPixelValue(TempGreen,x+3,y,average);
		        IPI_SetPixelValue(TempGreen,x+3,y+1,average);
		        IPI_SetPixelValue(TempGreen,x+3,y+2,average);
		        IPI_SetPixelValue(TempGreen,x+3,y+3,average);
		        IPI_SetPixelValue(TempGreen,x+3,y+4,average);
		        IPI_SetPixelValue(TempGreen,x+4,y,average);
		        IPI_SetPixelValue(TempGreen,x+4,y+1,average);
		        IPI_SetPixelValue(TempGreen,x+4,y+2,average);
		        IPI_SetPixelValue(TempGreen,x+4,y+3,average);
		        IPI_SetPixelValue(TempGreen,x+4,y+4,average);
		        y=y+4;
		        	   
	            }
	            x=x+4;
          }
		
		
		//蓝色通道马赛克
		for(x=0;x<width;)
	     {
	         for(y=0;y<height;)
																								   
	           	{
	        	IPI_GetPixelValue(BluePlane,x,y,&value1);
		        IPI_GetPixelValue(BluePlane,x,y+1,&value2);
		        IPI_GetPixelValue(BluePlane,x,y+2,&value3);
		        IPI_GetPixelValue(BluePlane,x,y+3,&value4);
		        IPI_GetPixelValue(BluePlane,x+1,y,&value5);
		        IPI_GetPixelValue(BluePlane,x+1,y+1,&value6);
		        IPI_GetPixelValue(BluePlane,x+1,y+2,&value7);
		        IPI_GetPixelValue(BluePlane,x+1,y+3,&value8);
		        IPI_GetPixelValue(BluePlane,x+2,y,&value9);
		        IPI_GetPixelValue(BluePlane,x+2,y+1,&value10);
		        IPI_GetPixelValue(BluePlane,x+2,y+2,&value11);
		        IPI_GetPixelValue(BluePlane,x+2,y+3,&value12);
		        IPI_GetPixelValue(BluePlane,x+3,y,&value13);
		        IPI_GetPixelValue(BluePlane,x+3,y+1,&value14);
		        IPI_GetPixelValue(BluePlane,x+3,y+2,&value15);
		        IPI_GetPixelValue(BluePlane,x+3,y+3,&value16);
		        	   
		        average=(value1+value2+value3+value4+value5+value6+value7+value8+value9+
		        					value10+value11+value12+value13+value14+value15+value16)/16;
		               
		        IPI_SetPixelValue(TempBlue,x,y,average);
		        IPI_SetPixelValue(TempBlue,x,y+1,average);
		        IPI_SetPixelValue(TempBlue,x,y+2,average);
		        IPI_SetPixelValue(TempBlue,x,y+3,average);
		        IPI_SetPixelValue(TempBlue,x,y+4,average);
		        IPI_SetPixelValue(TempBlue,x+1,y,average);
		        IPI_SetPixelValue(TempBlue,x+1,y+1,average);
		        IPI_SetPixelValue(TempBlue,x+1,y+2,average);
		        IPI_SetPixelValue(TempBlue,x+1,y+3,average);
		        IPI_SetPixelValue(TempBlue,x+1,y+4,average);
		        IPI_SetPixelValue(TempBlue,x+2,y,average);
		        IPI_SetPixelValue(TempBlue,x+2,y+1,average);
		        IPI_SetPixelValue(TempBlue,x+2,y+2,average);
		        IPI_SetPixelValue(TempBlue,x+2,y+3,average);
		        IPI_SetPixelValue(TempBlue,x+2,y+4,average);
		        IPI_SetPixelValue(TempBlue,x+3,y,average);
		        IPI_SetPixelValue(TempBlue,x+3,y+1,average);
		        IPI_SetPixelValue(TempBlue,x+3,y+2,average);
		        IPI_SetPixelValue(TempBlue,x+3,y+3,average);
		        IPI_SetPixelValue(TempBlue,x+3,y+4,average);
		        IPI_SetPixelValue(TempBlue,x+4,y,average);
		        IPI_SetPixelValue(TempBlue,x+4,y+1,average);
		        IPI_SetPixelValue(TempBlue,x+4,y+2,average);
		        IPI_SetPixelValue(TempBlue,x+4,y+3,average);
		        IPI_SetPixelValue(TempBlue,x+4,y+4,average);
		        y=y+4;
		        	   
	            }
	            x=x+4;
          }
	
	
	//重新合成图像
	IPI_ReplaceColorPlanes (SourceImage1, DestImage1, TempRed,
								TempGreen, TempBlue, IPI_RGB);
        
		
    IPI_WriteFile (DestImage1, "C:\\Documents and Settings\\All Users\\Documents\\temp3.bmp", IPI_FILE_BMP, NULL,
						 NULL);	   
  
	GetBitmapFromFile ("C:\\Documents and Settings\\All Users\\Documents\\temp3.bmp", &DstImg);
	CanvasDrawBitmap (panelHandle, PANEL_CANVAS_3, DstImg, VAL_ENTIRE_OBJECT,
						VAL_ENTIRE_OBJECT);
	DiscardBitmap(DstImg); 
			   
	Proc=3; 

}




//图像的屏蔽与叠加
void CVICALLBACK proc4 (int menuBar, int menuItem, void *callbackData,
		int panel)  
{
	IPIError	lError;                                                                
                                                                  
    int		lStatus;                                                               
    char lPath[260];
    
    //选择另一图像                                   
    lStatus = FileSelectPopup (".\\image.", "*.apd;*.bmp;*.tif", "", "",          
								   VAL_LOAD_BUTTON, 0, 0, 1, 0, lPath);            
	if (lStatus == VAL_EXISTING_FILE_SELECTED)                                 
		{                                                                      
			
			/* Read the file into the source image */                              
		lError = IPI_ReadFile (SourceImage2, lPath, FALSE, NULL, NULL);
			
		if (lError == IPI_ERR_NOERROR)                                         
			{  
			IPIImageInfo Image_Info1;
			IPIImageInfo Image_Info2;
			static int width,width1,width2,height,height1,height2,x,y,x_dup,y_dup;
			
			//IPI_Copy (SourceImage1, DestImage2);
			
			IPI_GetImageInfo (SourceImage1, &Image_Info1);  //读出图像信息
			IPI_GetImageInfo (SourceImage2, &Image_Info2);
			
			width1=Image_Info1.width;
			width2=Image_Info2.width;
			height1=Image_Info1.height;
			height2=Image_Info2.height;
			
			
			width=(width1>=width2)?width1:width2;
			height=(height1>=Image_Info2.height)? height1:height2;
			x_dup=width/width1;
			y_dup=height/height1;
			IPI_Expand (SourceImage1, DestImage2, x_dup,
						y_dup, IPI_FULL_RECT);  //设置目标图像大小
			
			
			//目标图像赋值
			/*for (x=0;x<height2;x++)
				{
				for (y=0;y<width2;y++)
					{
					int color_value;									 // 此法运行较慢,所以直接用库函数 IPI_ImageToImage()
					IPI_GetColorPixel (SourceImage2, x, y, &color_value);
					IPI_SetColorPixel (DestImage2, x, y, color_value);
					
					}
				
				}
			 */
			
			//IPI_ImageToImage (SourceImage1, DestImage2, 0, 0);
			
			IPI_ImageToImage (SourceImage2, DestImage2, 0, 0);
			
			
			IPI_WriteFile (DestImage2, "C:\\Documents and Settings\\All Users\\Documents\\temp4.bmp", IPI_FILE_BMP, NULL,
						 NULL);
  
			GetBitmapFromFile ("C:\\Documents and Settings\\All Users\\Documents\\temp4.bmp", &DstImg);
			CanvasDrawBitmap (panelHandle, PANEL_CANVAS_4, DstImg, VAL_ENTIRE_OBJECT,
						VAL_ENTIRE_OBJECT);
			DiscardBitmap(DstImg);
			Proc=4;	 

			}                                                                  
		}    

}



// Laplican素描
void CVICALLBACK proc5 (int menuBar, int menuItem, void *callbackData,
		int panel)   
{
	IPIImageInfo Image_Info;
	int x,y,width,height;
	float val;
    float value,value1,value2,value3,value4,sum1,sum2,dif,a,b;
	
    if (Proc!=1 && Proc!=2)					  //判断源图像是否已经改变
    	{
    	IPI_Cast (TempImage, IPI_PIXEL_U8);
		IPI_Copy (TempImage, TempImage1);		
		}
		//平滑
	//IPI_NthOrder (TempImage1, IPI_NOMASK, TempImage1, 3, 3, 5);
		

	IPI_GetImageInfo (TempImage1, &Image_Info);  //读出图像信息
	width=Image_Info.width;
    height=Image_Info.height;
	
		//拉普拉斯算子锐化,素描
	IPI_Copy (TempImage1, TempImage5);
		
	
	for (x=0;x<width;x++)
		{
		IPI_GetPixelValue(TempImage1,x,0,&a); //设置增加行和列
		IPI_GetPixelValue(TempImage1,0,x,&b);
		IPI_SetPixelValue(TempImage1,x,-1,a);
		IPI_SetPixelValue(TempImage1,-1,x,b);
		}
		
	for(x=0;x<width;x++)
	     {
	         for(y=0;y<height;y++)
																									   
	            {
		        IPI_GetPixelValue(TempImage1,x,y,&value);	 //拉普拉斯边缘检测
		        IPI_GetPixelValue(TempImage1,x+1,y,&value1);
		        IPI_GetPixelValue(TempImage1,x-1,y,&value2);
		        IPI_GetPixelValue(TempImage1,x,y+1,&value3);
		        IPI_GetPixelValue(TempImage1,x,y-1,&value4);
		        sum1=4*value;
		        sum2=value1+value2+value3+value4;
		        dif=255-fabs(sum1-sum2);
		        IPI_SetPixelValue(TempImage5,x,y,dif);
	            }
         }
    /*
      通过腐蚀膨胀可以优化素描后的效果,可继续添加程序代码
    */
    
    IPI_WriteFile (TempImage5, "C:\\Documents and Settings\\All Users\\Documents\\temp5.bmp", IPI_FILE_BMP, NULL,
						 NULL);
  
	GetBitmapFromFile ("C:\\Documents and Settings\\All Users\\Documents\\temp5.bmp", &DstImg);
	CanvasDrawBitmap (panelHandle, PANEL_CANVAS_5, DstImg, VAL_ENTIRE_OBJECT,
						VAL_ENTIRE_OBJECT);
	DiscardBitmap(DstImg);
	Proc=5;

}


//三色板图像查看

void CVICALLBACK rgbshow (int menuBar, int menuItem, void *callbackData,
		int panel)
{
	IPIImageInfo image_info;
	int key_code,width,height,g,h;
	Proc=6;
	
	//弹出操作提示
	
	MessagePopup ("提示", "按ENTER键在三色间转换,四次按键后退出.");
	
	
		//读取RGB Plane
	IPI_ReadFile (SourceImage1, lPath, TRUE, NULL, NULL);
	IPI_ExtractColorPlanes (SourceImage1, RedPlane, GreenPlane,
								BluePlane, IPI_RGB);
	
	//设置一块模板,用于取代彩色的其中两个色板
	//IPI_Cast (SourceImage1, IPI_PIXEL_U8);
	
	IPI_Copy (RedPlane, MaskPlane);
	IPI_GetImageInfo (MaskPlane, &image_info);
	width=image_info.width;
	height=image_info.height;
	for (g=0;g<height;g++)					   //赋值0.0,黑色
	    {
	    for (h=0;h<width;h++)
		IPI_SetPixelValue (MaskPlane, h, g, 0.0);
	    
	    }
		
	
	//设置标准输入窗口的属性
	
	SetStdioWindowPosition (-100, -100);  //在可见范围之外
	SetStdioWindowSize (10, 10);
	
	SetStdioWindowOptions (100, 0, 0);
	SetStdioWindowVisibility (0);
	
//红色	
	key_code = GetKey();   //获取键盘操作
	
	if (key_code==VAL_ENTER_VKEY)		 //VAL_ENTER_VKEY ,,是否按回车
		{
		//IPI_Cast (RedPlane, IPI_PIXEL_RGB32);
		
		IPI_ReplaceColorPlanes (SourceImage1, DestImage1, IPI_NOIMAGE,		  //只留下一块色板
								MaskPlane, MaskPlane, IPI_RGB);
		
		IPI_WriteFile (DestImage1, "C:\\Documents and Settings\\All Users\\Documents\\temp6.bmp", IPI_FILE_BMP, NULL,
					 				NULL);
		GetBitmapFromFile ("C:\\Documents and Settings\\All Users\\Documents\\temp6.bmp", &SrcImg);
		CanvasClear (panelHandle, PANEL_CANVAS_0, VAL_ENTIRE_OBJECT);
			
		CanvasDrawBitmap (panelHandle, PANEL_CANVAS_0, SrcImg,
							  VAL_ENTIRE_OBJECT, VAL_ENTIRE_OBJECT);
		DiscardBitmap(SrcImg);
		}
	//else if (key_code==VAL_ESC_VKEY) break;			 //中断
	
//红色结束,绿色开始
	key_code = GetKey();

	if (key_code==VAL_ENTER_VKEY)
		{
		IPI_ReplaceColorPlanes (SourceImage1, DestImage1, MaskPlane,
								IPI_NOIMAGE, MaskPlane, IPI_RGB);
		IPI_WriteFile (DestImage1, "C:\\Documents and Settings\\All Users\\Documents\\temp6.bmp", IPI_FILE_BMP, NULL,
					 				NULL);
			
		GetBitmapFromFile ("C:\\Documents and Settings\\All Users\\Documents\\temp6.bmp", &SrcImg);
		CanvasClear (panelHandle, PANEL_CANVAS_0, VAL_ENTIRE_OBJECT);
		CanvasDrawBitmap (panelHandle, PANEL_CANVAS_0, SrcImg,
							  VAL_ENTIRE_OBJECT, VAL_ENTIRE_OBJECT);
		DiscardBitmap(SrcImg);
		}
	
	//else if (key_code==VAL_ESC_VKEY) break;
	
//绿色结束,蓝色开始
	key_code = GetKey();
	
	if 	(key_code==VAL_ENTER_VKEY)
		{
		IPI_ReplaceColorPlanes (SourceImage1, DestImage1, MaskPlane,
								MaskPlane, IPI_NOIMAGE, IPI_RGB);
		IPI_WriteFile (DestImage1, "C:\\Documents and Settings\\All Users\\Documents\\temp6.bmp", IPI_FILE_BMP, NULL,
					 				NULL);
		GetBitmapFromFile ("C:\\Documents and Settings\\All Users\\Documents\\temp6.bmp", &SrcImg);
		CanvasClear (panelHandle, PANEL_CANVAS_0, VAL_ENTIRE_OBJECT);
		CanvasDrawBitmap (panelHandle, PANEL_CANVAS_0, SrcImg,
							  VAL_ENTIRE_OBJECT, VAL_ENTIRE_OBJECT);
		DiscardBitmap(SrcImg);
		}
	
	//else if (key_code==VAL_ESC_VKEY) break;
	
//换回原图
	key_code = GetKey();
		
	if	(key_code==VAL_ENTER_VKEY)
		{
		GetBitmapFromFile (lPath, &SrcImg);
		CanvasClear (panelHandle, PANEL_CANVAS_0, VAL_ENTIRE_OBJECT);
		CanvasDrawBitmap (panelHandle, PANEL_CANVAS_0, SrcImg,
							  VAL_ENTIRE_OBJECT, VAL_ENTIRE_OBJECT);
		DiscardBitmap(SrcImg);
		} 
	//else if (key_code==VAL_ESC_VKEY) break;
		
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -