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

關於即時膚色偵測卻無法動作

尚未結案
jeff71321
一般會員


發表:6
回覆:14
積分:4
註冊:2005-01-20

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-08-07 22:39:12 IP:203.71.xxx.xxx 未訂閱
各位大大們..不好意思...我現在程式執行沒問題..但是當我要執行 fpVideoCallback2這個函式時他卻沒法出現正確動作 我有查到好像是因為我的r與g矩陣運算的值似乎都沒正確運算,且輸出的值都是0,但是我又都有設定他計算出來的值是浮點數。 想知道位啥會出現這樣的問題,是不是我哪邊用法錯誤,或是哪裏應該修正 這組CallFeameBack的函式我有用來做其他的演算法都可正常動作,唯獨這個函式有牽涉到浮點數的時候,卻出現黑色畫面。請各位大大幫我看看。感謝    
 
LRESULT CALLBACK fpVideoCallback2(HWND hWndC,LPVIDEOHDR lpVHdr)
{
  unsigned char *pData = (unsigned char *)lpVHdr->lpData;
  Pic2 = Form1->Image2->Picture->Bitmap;
  Pic2->PixelFormat=pf24bit;  
  int i,j,sum;
  double r[320][240],g[320][240],f1[320][240],f2[320][240],r1,g1;
  double w[320][240];
  for (i=239;i>=0;i--)
    {
    for (j=0;j<320;j  )
      {
       OrgBuff2[j][i][0] = *pData  ;   // blue
       OrgBuff2[j][i][1] = *pData  ;   // green
       OrgBuff2[j][i][2] = *pData  ;   // red
      }
    }        for(i=0;i<240;i  )
    {
      for(j=0;j<320;j  )
      {
       sum=(OrgBuff2[j][i][0] OrgBuff2[j][i][1] OrgBuff2[j][i][2]); //R G B             r[j][i]=(float)(OrgBuff2[j][i][2]/sum);//  R/(R G B)             g[j][i]=(float)(OrgBuff2[j][i][1]/sum);//  G/(R G B)           f1[j][i]=0.1452 (1.0743-1.376*r[j][i])*r[j][i];//膚色下界           f2[j][i]=0.1766 (0.5601-0.776*r[j][i])*r[j][i];//膚色上界           r1=(r[j][i]-0.33);
       
       g1=(g[j][i]-0.33);           w[j][i]=pow(r1,2) pow(g1,2); //           if  (( g[j][i] < f1[j][i] )&&(w[j][i]>0.0004)&&( g[j][i] > f2[j][i]))
         {
            ShowBuff2[j][i][0]= OrgBuff2[j][i][0];
            ShowBuff2[j][i][1]= OrgBuff2[j][i][1];
            ShowBuff2[j][i][2]= OrgBuff2[j][i][2];
         }
         else
           {
            ShowBuff2[j][i][0]= 0;
            ShowBuff2[j][i][1]= 0;
            ShowBuff2[j][i][2]= 0;
           }
         }
    }
//----------------輸出------------------------------------------------
   for(i=0;i<240;i  )
      {
       Pixel2=(Byte*)Pic2->ScanLine[i];
     for(j=0;j<320;j  )
       {
        Pixel2[j*3  ]=ShowBuff2[j][i][2];
        Pixel2[j*3 1]=ShowBuff2[j][i][1];
        Pixel2[j*3 2]=ShowBuff2[j][i][0];           }
      }
    Form1->Image2->Invalidate();
    return 0;
}     
jeff71321
一般會員


發表:6
回覆:14
積分:4
註冊:2005-01-20

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-08-08 11:08:10 IP:203.71.xxx.xxx 未訂閱
我檢查發現我所取到的 OrgBuff2[j][i][0] OrgBuff2[j][i][1] OrgBuff2[j][i][2] 這三個陣列似乎將進行除的動作時不可以令他小於0 若是小於0,他就自動將其當作0來看,不知是否問題出在這裡 請各位高手幫幫我吧...感謝
justdo
高階會員


發表:2
回覆:359
積分:222
註冊:2004-08-17

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-08-08 20:24:06 IP:221.169.xxx.xxx 未訂閱
OrgBuff2[j][i][2]/sum 的分子分母均為整數,算出來也會是整數,在轉成float也沒用了 因此應該寫成 r[j][i]=(float)OrgBuff2[j][i][2]/sum; 先把OrgBuff2[j][i][2]轉成float再來算
jeff71321
一般會員


發表:6
回覆:14
積分:4
註冊:2005-01-20

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-08-09 12:34:17 IP:203.71.xxx.xxx 未訂閱
justdo大大感謝你的回覆,我剛剛找到這個問題,所以也解決了 的確是因為這樣,所以才發生運算出錯。 那我這分就給你囉....感謝
系統時間:2024-04-30 0:49:41
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!