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

📄 sampledlg.cpp

📁 capture the image of the inpu object from the user and then detect image edge of the object
💻 CPP
📖 第 1 页 / 共 3 页
字号:
					 
					  if(endy==h)
						 emptycol=true;
					 else
					  for(i=prex;i<=endx;i++)
					  {	
				  pBmpdata  = 	lpDIBBits 	+
		    	  (w*endy + i)*Res;
                  blue  = *pBmpdata;
                  green = *(pBmpdata+1);
				  red   = *(pBmpdata+2);
				  RGB2YUV(red,green,blue,y,u,v);

				   	if ((( y>=colorinfor->redcolYmin) && (y<=colorinfor->redcolYmax) ) &&
				     ( (colorinfor->redcolUmin<=u) && (u<=colorinfor->redcolUmax) ) &&
				     ( (colorinfor->redcolVmin<=v) && (v<=colorinfor->redcolVmax) ) )
					{
						if(i!=prex && i!=endx)

				        redcount[redobj]++;
				   
                         emptycol=false;
					// break;
					}			  
					  }

		                     
                           ////end of col scan

					  ///start of row scan
				  bool emptyrow;
				  
				  if(endx==w)
					  emptyrow=true;
				  else					
                  for(i=prey;i<=endy;i++)
					  {	
	     
		        pBmpdata = 	lpDIBBits 	+
		   		  (w*i + endx)*Res;
                  blue  = *pBmpdata;
                  green = *(pBmpdata+1);
				  red   = *(pBmpdata+2);
				  RGB2YUV(red,green,blue,y,u,v);

				   	if (( (colorinfor->redcolYmin<=y) && (y<=colorinfor->redcolYmax) ) &&
				     ( (colorinfor->redcolUmin<=u) && (u<=colorinfor->redcolUmax) ) &&
				     ( (colorinfor->redcolVmin<=v) && (v<=colorinfor->redcolVmax) ) )
					{
						
					redcount[redobj]++; 

                    emptyrow=false;

					// break;
					}			  
					  }
				
					  /////////// start col scan
					  bool emptycol0=true;
					
                       if(prey==0)
						   emptycol0=true;
					   else
					  for(i=prex;i<=endx;i++)
					  {	
				pBmpdata = 	lpDIBBits 	+
				(w*prey + i)*Res;
                  blue  = *pBmpdata;
                  green = *(pBmpdata+1);
				  red   = *(pBmpdata+2);
				  RGB2YUV(red,green,blue,y,u,v);

				   	if (( (colorinfor->redcolYmin<=y) && (y<=colorinfor->redcolYmax) ) &&
				     ( (colorinfor->redcolUmin<=u) && (u<=colorinfor->redcolUmax) ) &&
				     ( (colorinfor->redcolVmin<=v) && (v<=colorinfor->redcolVmax) ) )
					{
					if(i!=prex && i!=endx
					)
				   redcount[redobj]++;						
				
                   emptycol0= false;
					   
					// break;
					}			  
					  }
  
                       
                           ////end of col scan

					  ///start of row scan
					    bool emptyrow0=true;
					 if(prex==0)
						 emptyrow0=true;
					 else
                  for(i=prey;i<=endy;i++)
					  {	
			     pBmpdata = 	lpDIBBits 	+
				(w*i + prex)*Res;
                  blue  = *pBmpdata;
                  green = *(pBmpdata+1);
				  red   = *(pBmpdata+2);
				  	RGB2YUV(red,green,blue,y,u,v);

				   	if (( (colorinfor->redcolYmin<=y) && (y<=colorinfor->redcolYmax) ) &&
				     ( (colorinfor->redcolUmin<=u) && (u<=colorinfor->redcolUmax) ) &&
				     ( (colorinfor->redcolVmin<=v) && (v<=colorinfor->redcolVmax) ) )
					{
					
				    redcount[redobj]++;                   
                      
                    emptyrow0=false;
					  
			
					}			  
					  }


				 
               
                            ////end of row scan            
                    
							 
						   
						 	

                      	 
					  ////////////1
			
                     

                  
                    if(emptyrow && 
						emptycol
					&& emptyrow0 &&  
					 emptycol0)	
						
					{
						finished=true;				

					}

					else
					{	  if(!emptycol)						  
                           			 endy++;
						   
							


							    if(!emptyrow )						   
                           			 endx++;
						   
					      


							   
							    if(!emptycol0)
						 
                           			 prey--;
						 


							   
							    if(!emptyrow0)
						 		 prex--;		
					    	
					
					
					}
			

			

				  
				  }//end while
            
                          RedxlArray[redobj]=prex+1;
						  RedxrArray[redobj]=endx-1;
						  RedytArray[redobj]=prey+1;
						  RedybArray[redobj]=endy-1;

                           if(redcount[redobj]<2) 
						   {    
							   redcount[redobj]=0;
							   redobj--;

						   }

		   

				}//end of scan


		}//end of red anglysis  

              	
          if ( ( (colorinfor->bluecolYmin<=y) && (y<=colorinfor->bluecolYmax) ) &&
		     ( (colorinfor->bluecolUmin<=u) && (u<=colorinfor->bluecolUmax) ) &&
		     ( (colorinfor->bluecolVmin<=v) && (v<=colorinfor->bluecolVmax) ) )
				{   
                   

      
				  	bool Scaned=FALSE; 
				for(i=0;i<=blueobj;i++)
				  if(col<=bluexr[i] && col>=bluexl[i] &&
					  row>=blueyt[i] && row<=blueyb[i])
					  Scaned=TRUE;







                   if(!Scaned && blueobj<maxpatch-1)
									 {
 
                            blueobj++;    
				   bluecount[blueobj]=1;
                   int prex=col-1;
				   int prey=row-1;

                   int endx=col+1;
                   int endy=row+1;
                   bool finished=false;

  
			  while(!finished)
				  {
				          
				/////////// start col scan
					  bool emptycol=true;

					  if(endy==h)
					emptycol=true;
					  else
					  for(i=prex;i<=endx;i++)
					  {	
					 pBmpdata  = 	lpDIBBits 	+
				(w*endy + i)*Res;
                  blue  = *pBmpdata;
                  green = *(pBmpdata+1);
				  red   = *(pBmpdata+2);
				  RGB2YUV(red,green,blue,y,u,v);

				   	if ((( y>=colorinfor->bluecolYmin) && (y<=colorinfor->bluecolYmax) ) &&
				     ( (colorinfor->bluecolUmin<=u) && (u<=colorinfor->bluecolUmax) ) &&
				     ( (colorinfor->bluecolVmin<=v) && (v<=colorinfor->bluecolVmax) ) )
					{
						if(i!=prex && i!=endx			
							)
				        bluecount[blueobj]++;
				   
                         emptycol=false;
					// break;
					}			  
					  }

					



                      
                           ////end of col scan

					  ///start of row scan
				      bool emptyrow=true;
					if(endx==w)
                   emptyrow=true;
					else
                  for(i=prey;i<=endy;i++)
					  {	
						  pBmpdata = 	lpDIBBits 	+
				(w*(i) + endx)*Res;
                  blue  = *pBmpdata;
                  green = *(pBmpdata+1);
				  red   = *(pBmpdata+2);
				  RGB2YUV(red,green,blue,y,u,v);

				   	if (( (colorinfor->bluecolYmin<=y) && (y<=colorinfor->bluecolYmax) ) &&
				     ( (colorinfor->bluecolUmin<=u) && (u<=colorinfor->bluecolUmax) ) &&
				     ( (colorinfor->bluecolVmin<=v) && (v<=colorinfor->bluecolVmax) ) )
					{
						
					bluecount[blueobj]++;				   
                   emptyrow=false;
					// break;
					}			  
					  }

					  /////////// start col scan
					  bool emptycol0=true;
					
					  if(prey==0)
						  emptycol0=true;
					  else
					  for(i=prex;i<=endx;i++)
					  {	
				pBmpdata = 	lpDIBBits 	+
				(w*prey + i)*Res;
                  blue  = *pBmpdata;
                  green = *(pBmpdata+1);
				  red   = *(pBmpdata+2);
				  RGB2YUV(red,green,blue,y,u,v);

				   	if (( (colorinfor->bluecolYmin<=y) && (y<=colorinfor->bluecolYmax) ) &&
				     ( (colorinfor->bluecolUmin<=u) && (u<=colorinfor->bluecolUmax) ) &&
				     ( (colorinfor->bluecolVmin<=v) && (v<=colorinfor->bluecolVmax) ) )
					{
					if(i!=prex && i!=endx)
				   bluecount[blueobj]++;
						
				
                     emptycol0= false;
					   
					// break;
					}			  
					  }



					

                 
                       
                           ////end of col scan

					  ///start of row scan
					    bool emptyrow0=true;
					 
						if(prex==0)
							emptyrow0=true;
                  for(i=prey;i<=endy;i++)
					  {	
			     pBmpdata = 	lpDIBBits 	+
				(w*i + prex)*Res;
                  blue  = *pBmpdata;
                  green = *(pBmpdata+1);
				  red   = *(pBmpdata+2);
				  	RGB2YUV(red,green,blue,y,u,v);

				   	if (( (colorinfor->bluecolYmin<=y) && (y<=colorinfor->bluecolYmax) ) &&
				     ( (colorinfor->bluecolUmin<=u) && (u<=colorinfor->bluecolUmax) ) &&
				     ( (colorinfor->bluecolVmin<=v) && (v<=colorinfor->bluecolVmax) ) )
					{
					
						 bluecount[blueobj]++;

                    
                      
                     emptyrow0=false;
					  
			//		 break;
					}			  
					  }


               
                            ////end of row scan            
                    
							 
						   
						 	

                      	 
					  ////////////1
			
                     

                    
                   
                    if(emptyrow && 
						emptycol
					&& emptyrow0 &&  
					 emptycol0)	
					{
						finished=true;				

					}

					else
					{	
						if(!emptycol )						  
                           			 endy++;
						   
							


							    if(!emptyrow )						   
                           			 endx++;
						   
					      


							   
							    if(!emptycol0)
						 
                           			 prey--;
						 


							   
							    if(!emptyrow0)
						 		 prex--;		
					    			
					
					}

				  
				  }//end while
                          bluexl[blueobj]=prex+1;
						  bluexr[blueobj]=endx-1;
						  blueyt[blueobj]=prey+1;
						  blueyb[blueobj]=endy-1;

                           if(bluecount[blueobj]<2) 
						   {    
							   bluecount[blueobj]=0;
							   blueobj--;
						   }

		   

				}//end of scan

				
				}//end of blue
                
           

           /*  else
			 {
			 if(m_Black)
			 {	  
				    *pBmpdata=0;
                   	*(pBmpdata+1)=0;
					*(pBmpdata+2)=0;
			 }
			 
			 }*/
			}
	       }//end of col scan

     }//end of row scan  
//short thdis=10;

int mergepatch=0;

for(i=0;i<=redobj;i++)
if(redcount[i]<4 || RedxlArray[i]==RedxrArray[i] || RedytArray[i]==RedybArray[i])
{

        redcount[i]=0;
	    RedxlArray[i]=0;
		RedxrArray[i]=0;
		RedytArray[i]=0;
		RedybArray[i]=0;
    	mergepatch++;
} 

for(i=0;i<=redobj;i++)//array from big to small
    for(j=i+1;j<=redobj;j++)
	if(redcount[i]<redcount[j])
	{
	  swap(RedxlArray[j],RedxlArray[i] );
	  swap(RedxrArray[j],RedxrArray[i] );
      swap(RedytArray[j],RedytArray[i] );
	  swap(RedybArray[j],RedybArray[i] );
	  swap(redcount[j],redcount[i]);
	}  	

redobj-=mergepatch;





//////////get oppo num


mergepatch=0;

for(j=0;j<=blueobj;j++)
	if(bluecount[j]<4 || bluexl[j]==bluexr[j] || blueyt[j]==blueyb[j])
	{	
		bluecount[j]=0;
	    bluexl[j]=0;
		bluexr[j]=0;
		blueyt[j]=0;
		blueyb[j]=0;
    	mergepatch++;

}

for(i=0;i<=blueobj;i++)
  for(j=i+1;j<=blueobj;j++)
	if(bluecount[i]<bluecount[j])
	{
	  swap(bluexl[j],bluexl[i]);
	  swap(bluexr[j],bluexr[i]);
      swap(blueyt[j],blueyt[i]);
	  swap(blueyb[j],blueyb[i]);
	  swap(bluecount[j],bluecount[i]);
	}  	


    blueobj-=mergepatch;

     m_Var=Res;
	 m_Pixel0=redobj;
	 m_Pixel1=blueobj;

	 FILE* fp;


fp=fopen("infor\\pixels","a");

fprintf(fp,"%d %d %d %d %d\n", blueobj, redobj, Res, bluecount[1], redcount[1]);
fclose(fp);

	 UpdateData(FALSE);

//StretchDIBits(gDC->m_hDC,0,0,w,h,0,0,w,h,lpDIBBits,lpbi,DIB_RGB_COLORS,SRCCOPY);

CPen* pOldPen = NULL; 
CPen pen3;
pen3.CreatePen(PS_SOLID,2,RGB(255,255,255)); 
pOldPen = gDC->SelectObject(&pen3); 



gDC->MoveTo(bluexl[0],h-blueyt[0]);
gDC->LineTo(bluexr[0],h-blueyt[0]);
gDC->LineTo(bluexr[0],h-blueyb[0]);
gDC->LineTo(bluexl[0],h-blueyb[0]);
gDC->LineTo(bluexl[0],h-blueyt[0]);


CPen pen2;
pen2.CreatePen(PS_SOLID,2,RGB(255,0,0)); 
gDC->SelectObject(&pen2); 

gDC->MoveTo(RedxlArray[0],h-RedytArray[0]);
gDC->LineTo(RedxrArray[0],h-RedytArray[0]);
gDC->LineTo(RedxrArray[0],h-RedybArray[0]);
gDC->LineTo(RedxlArray[0],h-RedybArray[0]);
gDC->LineTo(RedxlArray[0],h-RedytArray[0]);

gDC->SelectObject(pOldPen); 

}

⌨️ 快捷键说明

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