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

ㄜ 奇怪白點問題 = ="

尚未結案
billmin
一般會員


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

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-09-28 18:59:37 IP:220.139.xxx.xxx 未訂閱
我執行OPEN指令 然後畫面變成下圖 會有奇怪白點 請問一下為什麼會造成這樣的結果?? 然後當我播放所開啟檔案以後白點依舊存在 如第二張圖如示     發表人 - billmin 於 2005/09/28 19:06:38
 //---------------------------------------------------------------------------    #include 
#pragma hdrstop    #include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int count=0; // 計算畫面數
int i,j;     // 所需要的變數
//---------------------------------------------------------------------------
__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->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)
{        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;        //-------------------------------------------------------        //---------------影像相減--------------------------------        Graphics::TBitmap *FullSearch_Bmp= new Graphics::TBitmap;;
    FullSearch_Bmp->Assign(Bmp);
    int MV[15][20][2], SAD[15][15];
    int x,y,a,b;        byte *ptr;
    int frame_now[240][320];
    int frame_next[240][320];        for(j=0;j< FullSearch_Bmp->Height;j++)
    {
        ptr = (Byte *)FullSearch_Bmp->ScanLine[j];
        for(i=0;iWidth;i++)
        {
            if ((count%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];
        }
    }        for(j=0;jHeight;j++)
    {
        ptr = (Byte *)FullSearch_Bmp->ScanLine[j];
        for(i=0;iWidth;i++)
        {
            ptr[i*3] = ptr[i*3+1] = ptr[i*3+2]=abs(frame_now[j][i]-frame_next[j][i]);
        }
    }            //---------------------FULL SEARCH---------------------------------
    /*i=0;
    j=0;
    int SADmin=10000000;
    int  MVx, MVy;
    for(a=0;a<8;a++)
    {
        for(b=0;b<8;b++)
        {
            SAD[a][b] = 0;
            for(x=0;x<16;x++)
            {
                for(y=0;y<16;y++)
                {
                    SAD[a][b]=abs(frame_now[x+i][y+j]-frame_next[x+a][y+b]);
                }
            }                if(SAD[a][b]Width-16;j+=16)
    {
        SADmin=10000000;
        for(a=0;a<8;a++)
        {
            for(b=-7;b<+8;b++)
            {
                SAD[a][b+7] = 0;
                for(x=0;x<16;x++)
                {
                    for(y=0;y<16;y++)
                    {
                        SAD[a][b+7]+=abs(frame_now[x+i][y+j]-frame_next[x+i+a][y+j+b]);
                    }
                }                    if(SAD[a][b+7]Width-16;
    SADmin=10000000;
    for(a=0;a<8;a++)
    {
        for(b=-7;b<1;b++)
        {
            for(x=0;x<16;x++)
            {
                SAD[a][b+7] = 0;
                for(y=0;y<16;y++)
                {
                    SAD[a][b+7]+=abs(frame_now[x+i][y+j]-frame_next[x+i+a][y+j+b]);
                }                    if(SAD[a][b+7]Height/16-1][0] = MVx;
    MV[0][FullSearch_Bmp->Height/16-1][1] = MVy;        //=====================  補中間部分MB  =====================
    for(i=16;iHeight-16;i+=16)
    {
        for(j=16;jWidth-16;j+=16)
        {
            SADmin=1000000;
            for(a=-7;a<8;a++)
            {
                for(b=-7;b<8;b++)
                {
                    SAD[a+7][b+7]=0;
                    for(x=0;x<16;x++)
                    {
                        for(y=0;y<16;y++)
                        {
                            SAD[a+7][b+7]+=abs(frame_now[x+i][y+j]-frame_next[x+i+a][y+j+b]);
                        }
                    }                        if(SAD[a+7][b+7]Height-16;i+=16)
    {
        SADmin=10000000;
        for(a=-7;a<8;a++)
        {
            for(b=0;b<8;b++)
            {
                SAD[a+7][b] = 0;
                for(x=0;x<16;x++)
                {
                    for(y=0;y<16;y++)
                    {
                        SAD[a+7][b]+=abs(frame_now[x+i][y+j]-frame_next[x+i+a][y+j+b]);
                    }
                }                    if(SAD[a+7][b]Width-16;
    for(i=16;iHeight-16;i+=16)
    {
        SADmin=10000000;
        for(a=-7;a<8;a++)
        {
            for(b=-7;b<1;b++)
            {
                SAD[a+7][b+7] = 0;
                for(x=0;x<16;x++)
                {
                    for(y=0;y<16;y++)
                    {
                        SAD[a+7][b+7]+=abs(frame_now[x+i][y+j]-frame_next[x+i+a][y+j+b]);                        }
                }
                if(SAD[a+7][b+7]Height-16;
    j=0;
    SADmin=10000000;
    for(a=-7;a<1;a++)
    {
        for(b=0;b<8;b++)
        {
            SAD[a+7][b] = 0;
            for(x=0;x<16;x++)
            {
                for(y=0;y<16;y++)
                {
                    SAD[a+7][b]+=abs(frame_now[x+i][y+j]-frame_next[x+i+a][y+j+b]);
                }
            }                if(SAD[a+7][b]Height/16-1][0][0] = MVx;
        MV[FullSearch_Bmp->Height/16-1][0][1] = MVy;
    }        //====================== 補最下面一列MB  ================================
    i=FullSearch_Bmp->Height-16;
    for(j=16;jWidth-16;j+=16)
    {
        SADmin=10000000;
        for(a=-7;a<1;a++)
        {
            for(b=-7;b<8;b++)
            {
                SAD[a+7][b+7] = 0;
                for(x=0;x<16;x++)
                {
                    for(y=0;y<16;y++)
                    {
                        SAD[a+7][b+7]+=abs(frame_now[x+i][y+j]-frame_next[x+i+a][y+j+b]);
                    }
                }                    if(SAD[a+7][b+7]Height-16;
    j=FullSearch_Bmp->Width-16;
    SADmin=10000000;
    for(a=-7;a<1;a++)
    {
        for(b=-7;b<1;b++)
        {
            SAD[a+7][b+7] = 0;
            for(x=0;x<16;x++)
            {                    for(y=0;y<16;y++)
                {
                    SAD[a+7][b+7]+=abs(frame_now[x+i][y+j]-frame_next[x+i+a][y+j+b]);
                }
            }                if(SAD[a+7][b+7]Height/16-1][FullSearch_Bmp->Width/16-1][0] = MVx;
    MV[FullSearch_Bmp->Height/16-1][FullSearch_Bmp->Width/16-1][1] = MVy;            Image1->Picture->Bitmap->Assign(FullSearch_Bmp);
    //=================以上為Full Search  =========================
    //=================把MV畫在畫布上==============================
    Image1->Canvas->Pen->Width = 0.01;
    Image1->Canvas->Pen->Color = clYellow;
    for(j=0;j< FullSearch_Bmp->Height;j+=16)
    {
        for(i=0;i< FullSearch_Bmp->Width;i+=16)
        {
            Image1->Canvas->MoveTo(i, j);
            Image1->Canvas->LineTo(i+MV[j/16][i/16][0], j+MV[j/16][i/16][1]);
        }
    }
    //==============================================================   */        Image1->Picture->Bitmap->Assign(FullSearch_Bmp);        count++;        Form1->DoubleBuffered=true ;
    delete Bmp;
    delete MyCanvas;
    delete FullSearch_Bmp;
    Form1->DoubleBuffered=true ;    //讓畫面不再閃爍
}
//---------------------------------------------------------------------------
發表人 - billmin 於 2005/09/28 19:08:34
taishyang
站務副站長


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-09-28 19:02:36 IP:210.68.xxx.xxx 未訂閱
您好: 請PO上相關的程式碼讓有經驗的前輩們幫您看看問題在哪邊
billmin
一般會員


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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-09-28 23:00:55 IP:220.137.xxx.xxx 未訂閱
程式碼我PO好摟.. 靠各位前輩幫幫忙瞜.. 先謝謝啦 ^^
taishyang
站務副站長


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-09-29 13:47:45 IP:210.68.xxx.xxx 未訂閱
您好: 先把範圍收斂一下吧,這麼一大段的程式碼很難看出問題 比如說,先用兩張照片相減看看是不是也有同樣情況
billmin
一般會員


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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-09-29 14:57:24 IP:220.138.xxx.xxx 未訂閱
歹勢歹勢 昨天趕著去吃飯 把拿來亂玩那段FULL SEARCH的程式碼也弄進來 = ="
billmin
一般會員


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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-10-12 00:45:30 IP:220.139.xxx.xxx 未訂閱
ㄜ 我照taishyang兄所說 先用兩張影像相減 得到的結果是沒有白點 圖與相關程式碼如下 有沒有人有實做過動態的經驗阿  我實在看不出我用連續影像為什麼會有白點  =   =" 真是見鬼了  >"<
//---------------------------------------------------------------------------    #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)
{
    Graphics::TBitmap* Bmp1 = new Graphics::TBitmap();
    Graphics::TBitmap* Bmp2 = new Graphics::TBitmap();
    //Bmp1->LoadFromFile(".\\pic\"1.bmp"");
    Image1->Picture->LoadFromFile(".\\pic\\1.bmp");
    Image2->Picture->LoadFromFile(".\\pic\\2.bmp");    }
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
    int i,j;
    Graphics::TBitmap* Bmp1 = new Graphics::TBitmap();
    Graphics::TBitmap* Bmp2 = new Graphics::TBitmap();
    Graphics::TBitmap* Bmp3 = new Graphics::TBitmap();
    Bmp1->LoadFromFile(".\\pic\\1.bmp");
    Bmp2->LoadFromFile(".\\pic\\2.bmp");
    Bmp3->Assign(Bmp1);
    byte* ptr1,*ptr2,*ptr3;
    int gray1,gray2;                int **pic = new int*[Bmp1->Height];
    int **pic1 = new int*[Bmp2->Height];
    for(i = 0; i< Bmp1->Height; i++)
    {
        pic[i] = new int[Bmp1->Width];
        pic1[i] = new int[Bmp1->Width];        }        for(j=0; jHeight; j++)
    {
        ptr1 = (Byte *)Bmp1->ScanLine[j];
        ptr2 = (Byte *)Bmp1->ScanLine[j];
        for(i=0; iWidth; i++)
        {
            gray1 = (ptr1[i*3]*28 + ptr1[i*3+1]*151 +ptr1[i*3+2]*77)/256;
            pic[j][i] = ptr1[i*3] = ptr1[i*3+1] = ptr1[i*3+2] =(Byte)gray1;
            gray2 = (ptr2[i*3]*28 + ptr2[i*3+1]*151 +ptr2[i*3+2]*77)/256;
            pic1[j][i] = ptr2[i*3] = ptr2[i*3+1] = ptr2[i*3+2] =(Byte)gray2;
        }
    }        for(j=0;j<240;j++)
    {            ptr3=(byte*)Bmp3->ScanLine[j];
        for(i=0;i<320;i++)
        {
            ptr3[i*3] = ptr3[i*3+1] = ptr3[i*3+2]=abs(pic[j][i]-pic1[j][i]);
        }
    }
    Image3->Picture->Bitmap->Assign(Bmp3);    }
//---------------------------------------------------------------------------     
系統時間:2024-04-28 10:13:34
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!