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

📄 code.cpp

📁 卡车运输拉煤中丢煤现象严重,本程序为丢煤视频自动检测系统动态链接库,输出CoalChange函数供其它系统调用。
💻 CPP
字号:
#include "windows.h"

DLLEXPORT_API int __stdcall IsCoalChange(LPCSTR szFile1,LPCSTR szFile2)
{
	return true;
}

void Bianyuan(LPCSTR szFile)
{
	    CImage image;
	LPBYTE lpimc,lpImage;
	int nWidth,nHeight,nWidthBytes,nBits;

	//任意方向边缘检测
		image.LoadFile((HWND)(AfxGetMainWnd()->m_hWnd),szFile);
		
		CSize sizeTotal;	
		CPoint pt(0,0);		
		lpimc=image.FindDibBits();
		nWidth=image.GetWidth();
		nHeight=image.GetHeight();
		nWidthBytes=image.GetWidthBytes();
		nBits=image.GetBits();
		dib=image.GetDIB();

	LPBYTE lpdata;	
	if(dib==NULL)
	{
		MessageBox("No Image!",NULL,MB_OK);
		return;
	}
	if(hImage!=NULL)
	{
		return;
	}
	//---------------------------------------------------------------
	//请在此添加您需要的程序!
	HLOCAL	hNewDIBBits;
	hNewDIBBits = LocalAlloc(LHND, nWidth * nHeight);
	if (hNewDIBBits== NULL)
		return ;
	lpdata= (unsigned char * )LocalLock(hNewDIBBits);
	memset((char *)lpdata, (BYTE)0, nWidth * nHeight);
	//////////////////////////////////////////////////////
	int k1,k2,i,j,k3,k4,k5,k6;
	int i1,i2,j1,j2,ch[700],s,jm,j0,jj1,jj2,i0,im;
	BYTE imag[704][576];
	int g[4],max,kp;
	int rx1,rx2,lx1,lx2,m,n,kps,xy[10][10],ii,jj,ii3,ii4;
	float dx1,dx2,dy,a,b;
	kp=10;
	
	
	i1=10;i2=690;j1=60;j2=500;
	for(i=i1;i<i2;i++)
	{
		for(j=j1;j<j2;j++)
		{		
		    //灰度信息
			*(lpdata+j*nWidth+i)=(unsigned char)(0.299**(lpimc+j*nWidthBytes+nBits*i/8+2)+
				0.587**(lpimc+j*nWidthBytes+nBits*i/8+1)+
				0.114**(lpimc+j*nWidthBytes+nBits*i/8));
		}
	}	
	for(i=0;i<256;i++) 
	{
		ch[i]=0;
	}
	for(i=i1;i<i2;i++)
	{
		for(j=j1;j<j2;j++)
		{
			if(*(lpdata+(j+1)*nWidth+i)-*(lpdata+(j-1)*nWidth+i)>0)
			imag[i][j]=*(lpdata+(j+1)*nWidth+i)-*(lpdata+(j-1)*nWidth+i);
			else
				imag[i][j]=0;
		}
	}
	s=0;
 
	kp=20;
  for(i=i1;i<i2;i++)
	{
		for(j=j1;j<j2;j++)
		{
			if(imag[i][j]>kp)
			{
				imag[i][j]=0;
			}
			else
				imag[i][j]=*(lpdata+j*nWidth+i);
		}
   }
   
/*   for(i=i1;i<i2;i++)
	{
		for(j=j1;j<j2;j++)
		{
			*(lpimc+j*nWidthBytes+nBits*i/8)=imag[i][j];
			*(lpimc+j*nWidthBytes+nBits*i/8+1)=imag[i][j];
			*(lpimc+j*nWidthBytes+nBits*i/8+2)=imag[i][j];
		}
	}
	*/
////////////////////////////////////////////////////////////////////////////
   jm=(j1+j2)/2;
   for(j=jm;j<j2;j++) ch[j]=0;
   for(i=i1;i<i2;i++)
   {
	   for(j=jm;j<j2;j++)
	   {
		   if(imag[i][j]==0)
		   {
			   ch[j]++;
			   ch[j+1]++;
			   ch[j-1]++;
			 // break;
		   }
	   }
   }
   max=0;
   j0=jm;
   for(j=jm;j<j2-10;j++)
   {
	   if(ch[j]>max)
	   {
		   max=ch[j];
		   j0=j;
	   }
   }
   for(i=i1;i<i2;i++)
   {
			*(lpimc+j0*nWidthBytes+nBits*i/8)=255;
			*(lpimc+j0*nWidthBytes+nBits*i/8+1)=255;
			*(lpimc+j0*nWidthBytes+nBits*i/8+2)=255;
	}
   jj1=j0;
/////////////////////////////////////////////////////////////////////////
jm=(j1+j2)/2;
   for(j=jm;j>j1;j--) ch[j]=0;
   for(i=i1;i<i2;i++)
   {
	   for(j=jm;j>j1;j--)
	   {
		   if(imag[i][j]==0)
		   {
			   ch[j]++;
			   ch[j+1]++;
			   ch[j-1]++;
			 // break;
		   }
	   }
   }
   max=0;
   j0=jm;
   for(j=jm;j>j1+10;j--)
   {
	   if(ch[j]>max)
	   {
		   max=ch[j];
		   j0=j;
	   }
   }
   for(i=i1;i<i2;i++)
   {
			*(lpimc+j0*nWidthBytes+nBits*i/8)=255;
			*(lpimc+j0*nWidthBytes+nBits*i/8+1)=255;
			*(lpimc+j0*nWidthBytes+nBits*i/8+2)=255;
	}
   jj2=j0;
/////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
   	for(i=i1;i<i2;i++)
	{
		for(j=j1;j<j2;j++)
		{
		  if(abs(*(lpdata+(j)*nWidth+i+1)-*(lpdata+(j)*nWidth+i-1))>0)
			imag[i][j]=abs(*(lpdata+(j)*nWidth+i+1)-*(lpdata+(j)*nWidth+i-1));
			
		}
	}
	s=0;
 
	kp=10;
  for(i=i1;i<i2;i++)
	{
		for(j=j1;j<j2;j++)
		{
			if(imag[i][j]>kp)
			{
				imag[i][j]=0;
			}
			else
				imag[i][j]=*(lpdata+j*nWidth+i);
		}
   }
 j1=jj2;j2=jj1;
  im=(i1+i2)/2;
   for(i=i2;i>i2-150;i--) ch[i]=0;
   
   a=float(599.0-616.0)/(404.0-199.0);
   b=float(616.0-a*199.0);
/*   for(j=j1-20;j<j2+20;j++)
   {
	   i=a*j+b;
	   	*(lpimc+j*nWidthBytes+nBits*i/8)=255;
			*(lpimc+j*nWidthBytes+nBits*i/8+1)=255;
			*(lpimc+j*nWidthBytes+nBits*i/8+2)=255;
	}
   
*/
	 for(i=i2;i>i2-150;i--)
	 {
		 b=i-a*j1;
	  for(j=j1;j<j2;j++)
	  {
		  ii=a*j+b;
	   		   if(imag[ii][j]==0)
		   {
			   
			   ch[ii]++;
			   ch[ii+1]++;
			   ch[ii-1]++;
			   
			 // break;
		   }
	   }
   }
   max=0;
   i0=im;
   for(i=i2-10;i>i2-150;i--)
   {
	   if(ch[i]>(j2-j1))
	   {
		   max=ch[i];
		   i0=i;
		   break;
	   }
   }
   b=i0-a*j1;
   for(j=j1;j<j2;j++)
   {
	   i=a*j+b;
	   if(i>0 && i<700 && j>0 &&j<576)
	   {
			*(lpimc+j*nWidthBytes+nBits*i/8)=255;
			*(lpimc+j*nWidthBytes+nBits*i/8+1)=255;
			*(lpimc+j*nWidthBytes+nBits*i/8+2)=255;
	   }
	}
   rx1=a*j1+b;
   rx2=a*j2+b;

///////////////////////////////////////////////////////////////////////
 
j1=jj2;j2=jj1;
  im=(i1+i2)/2;
  i1=10;
   for(i=i1;i<i1+100;i++) ch[i]=0;
   a=float(37.0-12.0)/(274.0-153.0);
   b=float(37.0-a*163.0);
	 for(i=i1;i<i1+100;i++)
	 {
		 b=i-a*j1;
	  for(j=j1;j<j2;j++)
	  {
		  ii=a*j+b;
	   		   if(imag[ii][j]==0)
		   {
			   
			   ch[ii]++;
			   ch[ii+1]++;
			   ch[ii-1]++;
			   
			 // break;
		   }
	   }
   }
   max=0;
   i0=100;
   for(i=i1;i<i1+100;i++)
   {
	   if(ch[i]>(j2-j1)/3)
	   {
		   max=ch[i];
		   i0=i;
		   break;
	   }
   }
  
   b=i0-(a*j2+a*j1)/2;
   for(j=j1;j<j2;j++)
   {
	   i=a*j+b;
	   if(i>0 && i<700 && j>0 &&j<576)
	   {
			*(lpimc+j*nWidthBytes+nBits*i/8)=255;
			*(lpimc+j*nWidthBytes+nBits*i/8+1)=255;
			*(lpimc+j*nWidthBytes+nBits*i/8+2)=255;
	   }
	}
   lx1=a*j1+b;
   lx2=a*j2+b;

/////////////////////////////////////////////////////////////////////
   CString str;
   FILE* fp;
   kps=200;
   kp=20;
   fp = fopen("e:\\jg.txt","w");
   for(i=10;i<690;i++)
	   for(j=j1;j<j2;j++)
	   {
		   g[0]=abs(*(lpdata+j*nWidth+i+1)-*(lpdata+j*nWidth+i-1));
		   g[1]=abs(*(lpdata+(j+1)*nWidth+i)-*(lpdata+(j-1)*nWidth+i));
		   g[2]=abs(*(lpdata+(j+1)*nWidth+i+1)-*(lpdata+(j-1)*nWidth+i-1));
		   g[3]=abs(*(lpdata+(j-1)*nWidth+i+1)-*(lpdata+(j+1)*nWidth+i-1));
		   max=0;
		   for(ii=0;ii<4;ii++)
		   {
			   if(g[ii]>max)
			    max=g[ii];
		   }
		   if(max>kp)
		      imag[i][j]=0;
		  else
			  imag[i][j]=*(lpdata+j*nWidth+i);
		   
	   }
	   for(i=10;i<690;i++)
	   for(j=j1;j<j2;j++)
	   {
			*(lpimc+j*nWidthBytes+nBits*i/8)=imag[i][j];
			*(lpimc+j*nWidthBytes+nBits*i/8+1)=imag[i][j];
			*(lpimc+j*nWidthBytes+nBits*i/8+2)=imag[i][j];
	   }


  

   dy=float(j2-j1)/10.0;
   dx1=float(rx1-lx1)/10.0;
   dx2=float(rx2-lx2)/10.0;
  // m=0;
//  xy[m][n]=1;
  n=0;
   for(j=j1;j<j2-dy/2;j=j+dy)
    {
	   //n=0;
	  
	   i1=lx1;i2=lx2;
	   s=0;
	  // m=0;
	   for(i=0;i<10;i++)
	   {
		   
		   if(i==0)
		   {
			   i1=lx1;
			   i2=lx2;
			   ii3=i1+dx1;
			   ii4=i2+dx2;
		   }
		   else
		   {
			   i1=i1+dx1;
			   i2=i2+dx2;
			   ii3=i1+dx1;
			   ii4=i2+dx2;
		   }
		   a=float(i1-i2)/float(j1-j2);
		   b=float(i1)-float(a*j1);
		   s=0;
		   for(jj=j;jj<j+dy;jj++)
		   {
			   int ii1,ii2;
			   ii=a*jj+b;
			   if(ii>0 && ii<700 && jj>0 && jj<570)
			   {
				  
			*(lpimc+jj*nWidthBytes+nBits*ii/8)=0;
			*(lpimc+jj*nWidthBytes+nBits*ii/8+1)=0;
			*(lpimc+jj*nWidthBytes+nBits*ii/8+2)=0;
			   }
			   for(ii=(i1+i2)/2;ii<(ii3+ii4)/2;ii++)
				   if(imag[ii][jj]==0)
				   s++;
			 
			  
			   
			  
		   }
//	  if(s>kps)
		      xy[i][n]=s;
//	   else
//		      xy[i][n]=0;
	   /*str.Format("%d ",xy[j][kk]);
				fprintf(fp,str);*/
				
	 //  m++;
	   }  
	   
	   for(ii=10;ii<700;ii++)
		   {
			   jj=j;
			    if(ii>0 && ii<700 && jj>0 && jj<570)
			   {
			*(lpimc+jj*nWidthBytes+nBits*ii/8)=0;
			*(lpimc+jj*nWidthBytes+nBits*ii/8+1)=0;
			*(lpimc+jj*nWidthBytes+nBits*ii/8+2)=0;
			   }
		   }
	    
	   n++;
	  
	   /*str.Format("\n ");
				fprintf(fp,str);*/
	   

   }
   	    
		for(j=9;j>-1;j--)
		{
            for(int kk=0;kk<10;kk++) 
			{
				str.Format("%d ",xy[kk][j]);
				fprintf(fp,str);
				
			}
			str.Format("\n");
			fprintf(fp,str);
		}
   fclose(fp);

	::GlobalFree(dib);
	LocalFree(hNewDIBBits);

}

⌨️ 快捷键说明

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