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

📄 unit2.cpp

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

#include <vcl.h>
#pragma hdrstop

#include "Unit2.h"
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm2 *Form2;
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
   : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm2::FormCreate(TObject *Sender)
{
 Edit1->Text=ScrollBar1->Position;
}
//---------------------------------------------------------------------------

void __fastcall TForm2::ScrollBar1Change(TObject *Sender)
{
Byte *ptr;
int r,g,b;
int gray;
int i,j;
int threshold;

threshold=ScrollBar1->Position;
if(Form1->initial_flag)
 Form1->Bitmap2->Assign(Form1->Bitmap3);
else
 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;

    if(gray>threshold)
      gray=255;
    else
      gray=0;


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

 }
   Form1->origin->Picture->Assign(Form1->Bitmap2);
   Edit1->Text=ScrollBar1->Position;
}
//---------------------------------------------------------------------------
int __fastcall TForm2::Gx(int i,int j,int x)
{
int gx;
int m,n;
int p[10];
int z[10];                          //   1 2 3
                                    //   4 5 6
                                    //   7 6 5
if(x==1)
{
p[1]=P[i-1][j-1];
p[2]=P[i  ][j-1];
p[3]=P[i+1][j-1];
p[4]=P[i-1][j  ];
p[5]=P[i  ][j  ];
p[6]=P[i+1][j  ];
p[7]=P[i-1][j+1];
p[8]=P[i  ][j+1];
p[9]=P[i+1][j+1];
}

if(x==2)
{
p[1]=Ix[i-1][j-1];
p[2]=Ix[i  ][j-1];
p[3]=Ix[i+1][j-1];
p[4]=Ix[i-1][j  ];
p[5]=Ix[i  ][j  ];
p[6]=Ix[i+1][j  ];
p[7]=Ix[i-1][j+1];
p[8]=Ix[i  ][j+1];
p[9]=Ix[i+1][j+1];
}

if(x==3)
{
p[1]=Iy[i-1][j-1];
p[2]=Iy[i  ][j-1];
p[3]=Iy[i+1][j-1];
p[4]=Iy[i-1][j  ];
p[5]=Iy[i  ][j  ];
p[6]=Iy[i+1][j  ];
p[7]=Iy[i-1][j+1];
p[8]=Iy[i  ][j+1];
p[9]=Iy[i+1][j+1];
}

z[1]=-1;
z[2]=-2;
z[3]=-1;
z[4]=0;
z[5]=0;
z[6]=0;
z[7]=1;
z[8]=2;
z[9]=1;

gx=0;

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

 return(gx);

}
//---------------------------------------------------------------------------
int __fastcall TForm2::Gy(int i,int j,int y)
{
int gy;
int m,n;
int p[10];
int z[10];

if(y==1)
{
p[1]=P[i-1][j-1];
p[2]=P[i  ][j-1];
p[3]=P[i+1][j-1];
p[4]=P[i-1][j  ];
p[5]=P[i  ][j  ];
p[6]=P[i+1][j  ];
p[7]=P[i-1][j+1];
p[8]=P[i  ][j+1];
p[9]=P[i+1][j+1];
}

if(y==2)
{                                    //   7 6 5
p[1]=Ix[i-1][j-1];
p[2]=Ix[i  ][j-1];
p[3]=Ix[i+1][j-1];
p[4]=Ix[i-1][j  ];
p[5]=Ix[i  ][j  ];
p[6]=Ix[i+1][j  ];
p[7]=Ix[i-1][j+1];
p[8]=Ix[i  ][j+1];
p[9]=Ix[i+1][j+1];
}

if(y==3)
{                                    //   7 6 5
p[1]=Iy[i-1][j-1];
p[2]=Iy[i  ][j-1];
p[3]=Iy[i+1][j-1];
p[4]=Iy[i-1][j  ];
p[5]=Iy[i  ][j  ];
p[6]=Iy[i+1][j  ];
p[7]=Iy[i-1][j+1];
p[8]=Iy[i  ][j+1];
p[9]=Iy[i+1][j+1];
}

z[1]=-1;
z[2]=0;
z[3]=1;
z[4]=-2;
z[5]=0;
z[6]=2;
z[7]=-1;
z[8]=0;
z[9]=1;

gy=0;

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

 return(gy);

}
//---------------------------------------------------------------------------

void __fastcall TForm2::FormClose(TObject *Sender, TCloseAction &Action)
{
int i,j;
int flag;

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

for(int i=0;i<Form1->height;i++)
 {
 ptr  = (Byte *)Form1->Bitmap1->ScanLine[i];
 for(int j=0;j<Form1->width;j++)
  {
      P[j][i]=ptr[j*3];
      Ix[i][j]= 0;
      Iy[i][j]= 0;
  }
 }

for(int j=0;j<Form1->height;j++)
 for(int i=0;i<Form1->width;i++)
   {
    Ix[i][j]= Gx(i,j,1);
    Iy[i][j]= Gy(i,j,1);

    Form1->Ix[i][j]= Ix[i][j];
    Form1->Iy[i][j]= Iy[i][j];
   }

for(int j=0;j<Form1->height;j++)
 for(int i=0;i<Form1->width;i++)
   {
    Ixx[i][j]= Gx(i,j,2);
    Iyy[i][j]= Gy(i,j,3);
    Ixy[i][j]= Gy(i,j,2);
    Form1->Ixx[i][j]= Ixx[i][j];
    Form1->Iyy[i][j]= Iyy[i][j];
    Form1->Ixy[i][j]= Ixy[i][j];
   }


}
//---------------------------------------------------------------------------
void __fastcall TForm2::BitBtn1Click(TObject *Sender)
{
Close();   
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

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