2011年1月11日 星期二

擷取照片_圖像二值化

上次是從最初始得把影像讀取裝置抓進來,
這次是開始拍照作以及加入了影像處理二值化,
拍照是按下擷取照片的按鈕,分別按三次將圖檔顯示在Image1、Image2、Image3,
接著按下載入圖檔按鈕將Image的圖檔載入顯示在Image4,
按下二值化按鈕後,即可對她做二值化處理並儲存起來。
(對了,二值化就是黑白照片拉~)


//程式碼開始
//---------------------------------------------------------------------------
#include
#pragma hdrstop
#include "Unit1.h"
#include
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"

TForm1 *Form1;
HWND hCapWnd;

int flag=0;
int **Data;
int **Data_temp;

//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{

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

//連接WebCam
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int device=0;

hCapWnd=capCreateCaptureWindow (
"Capture Window",WS_CHILD | WS_VISIBLE ,
0,0,320,240,Panel1->Handle,0);

for(device=0;device<10;device++) { if(capDriverConnect(hCapWnd,device))//連結驅動程式 break; } if(device==10){ ShowMessage("No webcam device exist!"); exit(EXIT_FAILURE) ; } capOverlay(hCapWnd,true);//影像直接傳入電腦,不需要通過cpu的暫存器 capPreviewRate(hCapWnd,1000/6);//每一秒影像變化張數,數值越大,速度會越慢 capPreview(hCapWnd,true);//影像出現在視窗中 capPreviewScale(hCapWnd,true); //影像延伸到所設定的視窗大小 Timer1->Enabled=true;

}
//---------------------------------------------------------------------------
//擷取照片
void __fastcall TForm1::CaptureClick(TObject *Sender)
{
Graphics::TBitmap *bmp = new Graphics::TBitmap;
bmp->Width = Panel1->Width;
bmp->Height = Panel1->Height;
HDC hDC=GetDC(Panel1->Handle);

BitBlt(bmp->Canvas->Handle,0,0,bmp->Width,bmp->Height,hDC,0,0,0xCC0020); //SRCCOPY
ReleaseDC(Panel1->Handle , hDC);

if(flag==0){
bmp->SaveToFile("panel_1.bmp");
Image1->Picture->LoadFromFile("panel_1.bmp");//讀取bmp影像
}
if(flag==1){
bmp->SaveToFile("panel_2.bmp");
Image2->Picture->LoadFromFile("panel_2.bmp");//讀取bmp影像
}
if(flag==2){
bmp->SaveToFile("panel_3.bmp");
Image3->Picture->LoadFromFile("panel_3.bmp");//讀取bmp影像
}


delete bmp;
flag++;
if(flag==3)
flag=0;


}

//---------------------------------------------------------------------------
void __fastcall TForm1::GetBitmap(void)
{
Data = new int*[Image4->Width];
Data_temp = new int*[Image4->Width];

for(int i = 0; i < Image4->Width; i++)
{
Data[i] = new int[Image4->Height];
Data_temp[i] = new int[Image4->Height];
for(int j = 0; j < Image4->Height; j++)
Data[i][j] = Data_temp[i][j]= (Image4->Canvas->Pixels[i][j])&0xff;
}
}

void __fastcall TForm1::SetBitmap(void)
{
for(int i = 0; i < Image4->Width; i++)
for(int j = 0; j < Image4->Height; j++)
Image4->Canvas->Pixels[i][j] = TColor(RGB(Data[i][j],Data[i][j],Data[i][j]));
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Retrieve(void)
{
for(int i = 0; i < Image4->Width; i++)
for(int j = 0; j < Image4->Height; j++)
Data[i][j] = Data_temp[i][j];
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button_closeClick(TObject *Sender)
{
Close();// 程式結束
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)
{
Image4->Picture->LoadFromFile("panel_1.bmp");
Image4->Height = Image1->Height;
Image4->Width = Image1->Width;
GetBitmap();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button_2ColorClick(TObject *Sender)
{
for(int i = 0; i < Image4->Width; i++)
for(int j = 0; j < Image4->Height; j++)
{
if( Data[i][j] > 128 )
Data[i][j] = 255;
else
Data[i][j] = 0;
}
SetBitmap();
Retrieve();
}
//---------------------------------------------------------------------------
//程式碼結束

所拉的元件如下圖所式:



執行畫面如下圖所示(咦~打哪來的素顏歐巴桑~囧"~):

沒有留言:

張貼留言