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

📄 unit1.cpp

📁 影像中角落的偵測-主要是機器視覺當中很重要的一環 因為角落的改變或是變化可以偵測出來當做影像變化的特徵
💻 CPP
📖 第 1 页 / 共 2 页
字号:

gy=0;

for(m=1;m<10;m++)
  gy+=p[m]*z[m];

 return(gy);

}
//---------------------------------------------------------------------------
void __fastcall TForm1::N3Click(TObject *Sender)
{
Byte *ptr;
int r,g,b;
int gray;
int i,j;

Form1->Bitmap2->Assign(Form1->Bitmap1);

for(j=0;j<Form1->height;j++)
{
  ptr = (Byte *)Form1->Bitmap2->ScanLine[j];
  for(i=0;i<Form1->width;i++)
    {
    b=ptr[i*3];
    g=ptr[i*3+1];
    r=ptr[i*3+2];
    gray=0.299*r +0.587*g+0.114*b;

    ptr[i*3]=(Byte)gray;
    ptr[i*3+1]=(Byte)gray;
    ptr[i*3+2]=(Byte)gray;
    }

 }
   Form1->origin->Picture->Assign(Form1->Bitmap2);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Sobel1Click(TObject *Sender)
{
Byte *ptr;
int output;
Bitmap3->Assign(origin->Picture);

 for(int i=0;i<Bitmap3->Height;i++)
 {
 ptr  = (Byte *)Bitmap3->ScanLine[i];
 for(int j=0;j<Bitmap3->Width;j++)
      P3[j][i]=ptr[j*3] ;
 }

for(int i=0;i<Bitmap3->Height;i++)
 {
 ptr = (Byte *)Bitmap3->ScanLine[i];
 for(int j=10;j<Bitmap3->Width;j++)
  {
      output=sqrt(Ix[j][i]*Ix[j][i]+Iy[j][i]*Iy[j][i]);

      ptr[j*3]=output;
      ptr[j*3+1]=output;
      ptr[j*3+2]=output;

  }
 }
origin->Picture->Assign(Bitmap3);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N4Click(TObject *Sender)
{
Byte *ptr;
int output;
Bitmap3->Assign(origin->Picture);

for(int i=0;i<Bitmap3->Height;i++)
 {
 ptr = (Byte *)Bitmap3->ScanLine[i];
 for(int j=10;j<Bitmap3->Width;j++)
  {
      if(35>ptr[j*3])
      {
      output=0;

      ptr[j*3]=output;
      ptr[j*3+1]=output;
      ptr[j*3+2]=output;
      }
  }
 }
origin->Picture->Assign(Bitmap3);
}
//---------------------------------------------------------------------------
//灿絬て
void __fastcall TForm1::N5Click(TObject *Sender)
{
int i,j,k,w,h;
int flag;

flag =1;

Byte *ptr,*ptr2;
Bitmap1->Assign(origin->Picture);
Bitmap2->Assign(Bitmap1);



for(int i=0;i<Bitmap1->Height;i++)
 {
 ptr  = (Byte *)Bitmap1->ScanLine[i];
 for(int j=0;j<Bitmap1->Width;j++)
  {
   if( ptr[j*3] ==0)
      P2[j][i]=0 ;
   else
      P2[j][i]=1;
  }
 }



k=0;
while(flag)
{
flag=0;
k++;
for(int j=0;j<Bitmap2->Height;j++)
   for(int i=0;i<Bitmap2->Width;i++)
      P[i][j]=P2[i][j];

for(int j=0;j<Bitmap2->Height;j++)
   for(int i=0;i<Bitmap2->Width;i++)
     {
      if(P[i][j]!=0)
       if(N(i,j)>=2 && N(i,j)<=6)
        if(S(i,j)==1)
         if(P[i][j-1] * P[i+1][j] * P[i][j+1] ==0 )
          if(P[i-1][j] * P[i+1][j] * P[i][j+1] ==0 )
            {P2[i][j]=0;
             flag++;
            }
     }

for(int j=0;j<Bitmap2->Height;j++)
   for(int i=0;i<Bitmap2->Width;i++)
      P[i][j]=P2[i][j];

for(int j=0;j<Bitmap2->Height;j++)
   for(int i=0;i<Bitmap2->Width;i++)
     {
      if(P[i][j]!=0)
       if(N(i,j)>=2 && N(i,j)<=6)
        if(S(i,j)==1)
         if(P[i][j-1] * P[i+1][j] * P[i-1][j] ==0 )
          if(P[i-1][j]* P[i][j-1] * P[i][j+1] ==0 )
            P2[i][j]=0;
     }
}

for(int i=0;i<Bitmap2->Height;i++)
 {
 ptr2 = (Byte *)Bitmap2->ScanLine[i];
 for(int j=0;j<Bitmap2->Width;j++)
  {
   if(P2[j][i]==0)
      {ptr2[j*3]=0;
      ptr2[j*3+1]=0;
      ptr2[j*3+2]=0;
      }
   else
      {ptr2[j*3]=255;
      ptr2[j*3+1]=255;
      ptr2[j*3+2]=255;
      }
  }
 }

origin->Picture->Assign(Bitmap2);


}
//---------------------------------------------------------------------------
int __fastcall TForm1::N(int i,int j)
{
int m,n,count=0;
int p[10];                          //   8 1 4
                                    //   7 6 5
p[1]=P[i  ][j];
p[2]=P[i  ][j-1];
p[3]=P[i+1][j-1];
p[4]=P[i+1][j];
p[5]=P[i+1][j+1];
p[6]=P[i  ][j+1];
p[7]=P[i-1][j+1];
p[8]=P[i-1][j];
p[9]=P[i-1][j-1];

for(int m=2;m<=9;m++)
   if(p[m]!=0)
      count++;
/*
 for(n=-1;n<=1;n++)
  for(m=-1;m<=1;m++)
    if(P[i+m][j+n]>0 && (m!=0 && n!=0))
      count++;
*/
return(count);
}
//----------------------------------------------------------------------------
int __fastcall TForm1::S(int i,int j)
{
int m,n,count=0,t;                  //   9 2 3
int p[10];                          //   8 1 4
                                    //   7 6 5
p[1]=P[i  ][j];
p[2]=P[i  ][j-1];
p[3]=P[i+1][j-1];
p[4]=P[i+1][j];
p[5]=P[i+1][j+1];
p[6]=P[i  ][j+1];
p[7]=P[i-1][j+1];
p[8]=P[i-1][j];
p[9]=P[i-1][j-1];

for(int m=2;m<9;m++)
{
   if(p[m]==0 && p[m+1]!=0)
      count++;
}
if(p[9]==0 && p[2]!=0)
   count++;


   return(count);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::GHT1Click(TObject *Sender)
{
int i,j;
int D;
int x,y;
float G;
int max;
int output;
Byte *ptr,*ptr2;

initial_flag=1;
Bitmap3->Assign(origin->Picture);
Bitmap3->PixelFormat =6;

for(int j=0;j<Bitmap3->Height;j++)
   for(int i=0;i<Bitmap3->Width;i++)
      PS[i][j]=0;

   for(j=0;j<Bitmap3->Height;j++)
   {
       ptr = (Byte *)Bitmap3->ScanLine[j];
         for(int i=0;i<Bitmap3->Width;i++)
         {
          if(ptr[i*3]!=0)
          {    
               if(Ix[i][j]!=0 || Iy[i][j]!=0)
               {
               G=sqrt(Ix[i][j]*Ix[i][j]+Iy[i][j]*Iy[i][j]);
               for(int D=0;D<T;D++)
                  {
                  x = i + D*(Iy[i][j]/G);
                  y = j + D*(Ix[i][j]/G);

                  PS[x][y]++;
                  }
               }
           }
         }
     }


   for(j=0;j<Bitmap3->Height;j++)
   {
       ptr2 = (Byte *)Bitmap3->ScanLine[j];
         for(int i=0;i<Bitmap3->Width;i++)
         {
            if(PS[i][j]!=0)
 //              origin->Canvas->Pixels[i][j]=RGB(PS[i][j],PS[i][j],PS[i][j]);
            {
            output=PS[i][j]*20;
            if(output>255)
               output=255;
            ptr2[i*3  ]=output;
            ptr2[i*3+1]=output;
            ptr2[i*3+2]= output;
               if(PS[i][j]>max)
                  max=PS[i][j];
            }
           else
            {
            ptr2[i*3  ]=0;
            ptr2[i*3+1]=0;
            ptr2[i*3+2]=0;
            }
         }
   }
   origin->Picture->Assign(Bitmap3);

}
//---------------------------------------------------------------------------
void __fastcall TForm1::originMouseMove(TObject *Sender, TShiftState Shift,
      int X, int Y)
{
Edit3->Text=X;
Edit4->Text=Y;   
}
//---------------------------------------------------------------------------

void __fastcall TForm1::SAVE1Click(TObject *Sender)
{
   if(SavePictureDialog1->Execute())
      origin->Picture->SaveToFile(SavePictureDialog1->FileName);
}
//---------------------------------------------------------------------------




void __fastcall TForm1::GHT2Click(TObject *Sender)
{
int i,j;
int D;
int x,y;
float G;
int max;
int output;
Byte *ptr,*ptr2;

initial_flag=1;
Bitmap3->Assign(origin->Picture);
Bitmap3->PixelFormat =6;

for(int j=0;j<Bitmap3->Height;j++)
   for(int i=0;i<Bitmap3->Width;i++)
      PS[i][j]=0;

   for(j=0;j<Bitmap3->Height;j++)
   {
       ptr = (Byte *)Bitmap3->ScanLine[j];
         for(int i=0;i<Bitmap3->Width;i++)
         {
          if(ptr[i*3]!=0)
          {    
               if(Ix[i][j]!=0 || Iy[i][j]!=0)
               {
               G=sqrt(Ix[i][j]*Ix[i][j]+Iy[i][j]*Iy[i][j]);
               for(int D=0;D<T;D++)
                  {
                  x = i - D*(Iy[i][j]/G);
                  y = j - D*(Ix[i][j]/G);

                  PS[x][y]++;
                  }
               }
           }
         }
     }


   for(j=0;j<Bitmap3->Height;j++)
   {
       ptr2 = (Byte *)Bitmap3->ScanLine[j];
         for(int i=0;i<Bitmap3->Width;i++)
         {
            if(PS[i][j]!=0)
 //              origin->Canvas->Pixels[i][j]=RGB(PS[i][j],PS[i][j],PS[i][j]);
            {
            output=PS[i][j]*20;
            if(output>255)
               output=255;
            ptr2[i*3  ]=output;
            ptr2[i*3+1]=output;
            ptr2[i*3+2]= output;
               if(PS[i][j]>max)
                  max=PS[i][j];
            }
           else
            {
            ptr2[i*3  ]=0;
            ptr2[i*3+1]=0;
            ptr2[i*3+2]=0;
            }
         }
   }
   origin->Picture->Assign(Bitmap3);
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

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