線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2014
推到 Plurk!
推到 Facebook!

有關影像相減

尚未結案
billmin
一般會員


發表:14
回覆:18
積分:6
註冊:2005-03-20

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-09-18 02:56:34 IP:220.138.xxx.xxx 未訂閱
 //---------------------------------------------------------------------------    #include 
#pragma hdrstop    #include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;    //---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------    void __fastcall TForm1::Button1Click(TObject *Sender)
{
    if(OpenDialog1->Execute())
    {
        MediaPlayer1->FileName=OpenDialog1->FileName;
    }
    MediaPlayer1->Open();
    Edit1->Text=MediaPlayer1->Length;
    ScrollBar1->Max = MediaPlayer1->Length;
    ScrollBar1->Enabled = true;                      
    Edit2->Text=ScrollBar1->Position;
    MediaPlayer1->Frames = 1;
    MediaPlayer1->Display=Panel1;
     }
//---------------------------------------------------------------------------
void __fastcall TForm1::MediaPlayer1Click(TObject *Sender,
      TMPBtnType Button, bool &DoDefault)
{
     MediaPlayer1->Frames = 1;
     switch (Button)
     {
         case btPlay:
         Timer1->Interval = 5;
         Timer1->Enabled = true;             break;
         case btPause:
         Timer1->Enabled = false;
         break;             case btStop:
         Timer1->Enabled = false;
         MediaPlayer1->Position=0;             break;
     }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{        if(MediaPlayer1->FileName != "")
    {
        ScrollBar1->Position = MediaPlayer1->Position;
        Edit2->Text = MediaPlayer1->Position;           
    }        //把panel上的圖抓下來放在image上  -----------------------------        Graphics::TBitmap *Bmp= new Graphics::TBitmap;;
    TCanvas *MyCanvas= new TCanvas;;
    HDC dc = GetDC(Panel1->Handle);
    TRect rect = Panel1->ClientRect;
    MyCanvas->Handle = dc;
    Bmp->Width = rect.Right - rect.Left;
    Bmp->Height = rect.Bottom - rect.Top;        Bmp->Canvas->CopyRect(rect,MyCanvas,rect);
    Bmp->PixelFormat=pf24bit;
    Image1->Picture->Bitmap->Assign(Bmp);        //-------------------------------------------------------------        //fullsearch---------------------------------------------------        Graphics::TBitmap *FullSearch_Bmp= new Graphics::TBitmap;;
    FullSearch_Bmp->Assign(Bmp);
    int i,j;
    int n=0;
    byte *ptr;
    int frame_now[240][320];
    int frame_next[240][320];        if((n%2)==0)
    {
        for(j=0;j< FullSearch_Bmp->Height;j++)
        {
            ptr = (Byte *)FullSearch_Bmp->ScanLine[j];
            for(i=0;iWidth;i++)
            {
                frame_now[j][i] = 0.299*ptr[i*3+2] +0.587*ptr[i*3+1]+0.114*ptr[i*3];
            }
        }
    }
    else
    {
        for(j=0;j< FullSearch_Bmp->Height;j++)
        {
            ptr = (Byte *)FullSearch_Bmp->ScanLine[j];
            for(i=0;i< FullSearch_Bmp->Width;i++)
            {
                frame_next[j][i] = 0.299*ptr[i*3+2] +0.587*ptr[i*3+1]+0.114*ptr[i*3];
            }
        }
    }
    for(i=0;i<320;i++)
    {
        for(j=0;j<240;j++)
        {
            ptr[i*3] = ptr[i*3+1] = ptr[i*3+2]=abs(frame_now[i][j]-frame_next[i][j]);
        }
    }        n++; 
    Form1->DoubleBuffered=true ;
    delete Bmp;    }
然後一直出現 請問一下要如何修改阿 = =" 發表人 - billmin 於 2005/09/18 02:58:46
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-09-18 16:41:47 IP:218.169.xxx.xxx 未訂閱
您好: 您圖片是320*240還是240*320呢? 您處理的範圍似乎顛倒了
billmin
一般會員


發表:14
回覆:18
積分:6
註冊:2005-03-20

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-09-20 14:56:20 IP:220.139.xxx.xxx 未訂閱
= =" 果然是寫反了... 不過我想問一下... 我這樣寫會不會有問題... 怎麼我用這樣寫... 好像都是讀到同一張frame...
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-09-20 15:32:39 IP:210.68.xxx.xxx 未訂閱
您好: 因為您的程式沒有辦法進入(n%2)==1的情況 解決方式有兩種,1.n設為全域變數,2.加上static修飾 P.S:您有很多地方記憶體都沒有歸還(有new但沒有delete)
billmin
一般會員


發表:14
回覆:18
積分:6
註冊:2005-03-20

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-09-20 16:30:39 IP:220.139.xxx.xxx 未訂閱
我把它改成下面模樣... 不過好像沒什麼插ㄝ  =   =" 不好意思在麻煩一下taishyang大大幫我看一下     
 //---------------------------------------------------------------------------    #include 
#include <math.h>
#pragma hdrstop    #include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
int n;
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{    }
//---------------------------------------------------------------------------    void __fastcall TForm1::Button1Click(TObject *Sender)
{
 if(OpenDialog1->Execute())
        {
                MediaPlayer1->FileName = OpenDialog1->FileName;            }
        //MediaPlayer1->Frames = FramesJump->Position;            MediaPlayer1->Open();
        Edit1->Text=MediaPlayer1->Length;
        ScrollBar1->Enabled = true;
        ScrollBar1->SetFocus();
        ScrollBar1->Max = MediaPlayer1->Length;
        MediaPlayer1->Frames = 1;
        Edit2->Text = MediaPlayer1->Position;                MediaPlayer1->Display = Panel1; //Set display device to a TPanel
}
//---------------------------------------------------------------------------    void __fastcall TForm1::MediaPlayer1Click(TObject *Sender,
      TMPBtnType Button, bool &DoDefault)
{
     //MediaPlayer1->Frames = 100;
     switch (Button)
     {
         case btPlay:
         Timer1->Interval = 5;
         Timer1->Enabled = true;             break;
         case btPause:
         Timer1->Enabled = false;
         break;
   
     }    }
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
    n  ;
    if(MediaPlayer1->FileName != "")
    {
        ScrollBar1->Position = MediaPlayer1->Position;
        Edit2->Text = MediaPlayer1->Position;           
    }        Graphics::TBitmap *Bmp= new Graphics::TBitmap;;
    TCanvas *MyCanvas= new TCanvas;;
    HDC dc = GetDC(Panel1->Handle);
    TRect rect = Panel1->ClientRect;
    MyCanvas->Handle = dc;
    Bmp->Width = rect.Right - rect.Left;
    Bmp->Height = rect.Bottom - rect.Top;        Bmp->Canvas->CopyRect(rect,MyCanvas,rect);
    Bmp->PixelFormat=pf24bit;
    Image1->Picture->Bitmap->Assign(Bmp);        //-------------------------------------------------------------            Graphics::TBitmap *FullSearch_Bmp= new Graphics::TBitmap;;
    FullSearch_Bmp->Assign(Bmp);
    int i,j;
   
    byte *ptr;
    int frame_now[240][320];
    int frame_next[240][320];        if((n%2)==0)
    {
        for(j=0;j< FullSearch_Bmp->Height;j  )
        {
            ptr = (Byte *)FullSearch_Bmp->ScanLine[j];
            for(i=0;iWidth;i  )
            {
                frame_now[j][i] = 0.299*ptr[i*3 2]  0.587*ptr[i*3 1] 0.114*ptr[i*3];
            }
        }
    }
    else
    {
        for(j=0;j< FullSearch_Bmp->Height;j  )
        {
            ptr = (Byte *)FullSearch_Bmp->ScanLine[j];
            for(i=0;i< FullSearch_Bmp->Width;i  )
            {
                frame_next[j][i] = 0.299*ptr[i*3 2]  0.587*ptr[i*3 1] 0.114*ptr[i*3];
            }
        }
    }
    for(i=0;i<240;i  )
    {
        for(j=0;j<320;j  )
        {
            ptr[i*3] = ptr[i*3 1] = ptr[i*3 2]=abs(frame_now[i][j]-frame_next[i][j]);
        }
    }        
    Form1->DoubleBuffered=true ;
    delete Bmp;
    delete MyCanvas;
    delete FullSearch_Bmp;    }
//---------------------------------------------------------------------------
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-09-20 17:31:40 IP:210.68.xxx.xxx 未訂閱
您好:    您最後填圖的程式碼有問題(應該還要用到ScanLine)
for(i=0;i<240;i  )
{
    for(j=0;j<320;j  )
    {
        ptr[i*3] = ptr[i*3 1] = ptr[i*3 2]=abs(frame_now[i][j]-frame_next[i][j]);
    }
}
我沒有Trace您的程式碼,所以您可以先Trace您的程式碼看看.. 看哪邊不合理就知道問題在哪邊了 class="code"> for(j=0;j< FullSearch_Bmp->Height;j ) { ptr = (Byte *)FullSearch_Bmp->ScanLine[j]; for(i=0;iWidth;i ) { if ((n%2)==0) frame_now[j][i] = 0.299*ptr[i*3 2] 0.587*ptr[i*3 1] 0.114*ptr[i*3]; else frame_next[j][i] = 0.299*ptr[i*3 2] 0.587*ptr[i*3 1] 0.114*ptr[i*3]; } }
billmin
一般會員


發表:14
回覆:18
積分:6
註冊:2005-03-20

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-09-28 11:04:51 IP:220.139.xxx.xxx 未訂閱
感謝taishyang兄 我弄出來了 ^^ taishyang兄你是中原的??
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-09-28 12:16:02 IP:210.68.xxx.xxx 未訂閱
引言:taishyang兄你是中原的??
是滴
billmin
一般會員


發表:14
回覆:18
積分:6
註冊:2005-03-20

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-09-28 13:51:08 IP:220.139.xxx.xxx 未訂閱
呵呵... 學長好...^^ 我也是中原低... 不過我是電機的...
billmin
一般會員


發表:14
回覆:18
積分:6
註冊:2005-03-20

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-09-28 15:20:45 IP:220.139.xxx.xxx 未訂閱
我又發現怪怪的地方了 =   =" 為什麼當我開完檔案... 然後iamge1元件上會出現怪怪的點阿... 在播放影像相減結果的時候那些點也都還在說... 看起來實在粉礙眼 >"<    
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#11 引用回覆 回覆 發表時間:2005-09-28 16:28:16 IP:210.68.xxx.xxx 未訂閱
引言: 我又發現怪怪的地方了 = =" 為什麼當我開完檔案... 然後iamge1元件上會出現怪怪的點阿... 在播放影像相減結果的時候那些點也都還在說... 看起來實在粉礙眼 >"<
這似乎不是原來的問題所影響的,所以請開新標題發問 開檔的過程您也沒有交代清楚
系統時間:2024-04-28 2:50:14
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!